java中什么是堆 Java的堆内存是什么
今天给各位分享java中什么是堆的知识,其中也会对Java的堆内存是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Java堆的结构是什么样子的什么是堆中的永久代
Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程所共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存储对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中描述是:The heap is the runntime data area from which memory for all class instances and arrays is allocated。也就是说是在Java堆上进行分配实例对象和数组的。
有一种说法是使用永久代来实现方法区。具体可以参考“深入理解Java虚拟机”中对于堆的介绍
java中堆和栈有什么区别
堆:(对象)
引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。
堆内存主要作用是存放运行时创建(new)的对象。
(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)
栈:(基本数据类型变量、对象的引用变量)
基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。
栈内存的主要作用是存放基本数据类型和引用变量。栈的内存管理是通过栈的"后进先出"模式来实现的。
(主要用来执行程序,存取速度快,大小和生存期必须确定,缺乏灵活性)
Java之堆和栈的区别
堆和栈是信息学数据结构通用名词,不仅在Java中,C++里也有调用模板。
堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全树。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
(ki<=k2i,ki<=k2i+1)或者(ki>= k2i,ki>= k2i+1),(i= 1,2,3,4...n/2)
若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。
(摘自:http://baike.baidu.com/view/249120.htm#4)
栈(stack)又名堆栈,它是一种先进后出(FILO)的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
Java的堆内存是什么
Java堆(Java Heap)是java虚拟机所管理的内存中最大的一块
java堆被所有线程共享的一块内存区域
虚拟机启动时创建java堆
java堆的唯一目的就是存放对象实例。
java堆是垃圾收集器管理的主要区域。
从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以Java堆可以细分为:新生代(Young)和老年代(Old)。新生代又被划分为三个区域Eden、From Survivor, To Survivor等。无论怎么划分,最终存储的都是实例对象,进一步划分的目的是为了更好的回收内存,或者更快的分配内存。
java堆的大小是可扩展的,通过-Xmx和-Xms控制。
如果堆内存不够分配实例对象,并且对也无法在扩展时,将会抛出outOfMemoryError异常。
OK,关于java中什么是堆和Java的堆内存是什么的内容到此结束了,希望对大家有所帮助。