JVM堆内存学习笔记

JVM的内存结构:

1.堆内存 2.栈内存 3.本地方法栈 4.方法区 5.程序计数器

JVM的堆内存:

   JVM虚拟机具有一个堆内存,并且是JVM中最大的一块内存区域,由所有线程共享。堆内存是运行时的数据区域,所有类的实例和数组的内存均从此分配。堆内存是在JAVA虚拟机启动时创建的。

   JVM堆内存细分的话可以分为:新生代和老年代。新生代占1/3的堆内存空间,老年代占2/3的堆内存空间。新生代:大多数情况下JAVA程序中新建对象都从新生代分配内存,两个survivor区的作用是减少被送到老年代对象,今儿减少FullGC的发生。新生代是由Eden区和两块相同大小的suivivor区域构成,可以通过-Xmn参数来制定新生代大小。新生代中Eden占大多数区域,占新生代的8/10,剩下2/10由survivor评分。新建的对象在Eden区中经历一次MinorGC,Eden区中的存活对象就会转移到第一块survivor区中(survivor S0),Eden被清空,等Eden再满,再触发一次MinorGC,Eden和S0中存活的对象又被复制到第二块survivorS1,S0和Eden被清空,然后下轮S0和S1交换角色,如此循环。如果对象的复制到达16次依然存活,改对象就会被送到老年代。

   JVM堆内存的参数设置项:

   -Xms 512m:表示JVM初始分配的堆内存大小为512(默认,最小尺寸,初始分配)。

   -Xmx 1024m:JVM最大允许分配的堆内存为1024m(初始值),如果指定偏小可能导致OOM

   permSize和maxPerSize指的是虚拟机永久生产对象,如class对象,方法,可反射对象分配内存限制。分配过小会导致OOM。



猜你喜欢

转载自blog.csdn.net/xxzbtjffj/article/details/80303354