堆内存的讲解
类刚被初始化的时候,类的基本信息基本上都是被加载到了新生代,新生代就是对象刚刚初始化的时候需要放入的位置,但是如果一个对象是足够的庞大,也是有可能直接送入老年代进行管理的,因为新生代的内存一般比老年代小.常用的新生代与老年代的比值为1:4.
一个普通对象可能需要通过若干次GC,才会把变量移动至老年代,老年代是说,经过了多次GC,但是依据保留着,就说明这个对象可能是一个使用非常频繁的对象,因此JVM会把对象移入老年代进行管理.一般不会发生改变,这样方便GC进行清扫。
Java堆中一共可分为 新生代和老年代
新生代又可继续分为eden,from,to区
eden可翻译为伊甸园,取自《圣经》中,人类的始祖亚当与夏娃最初居住的地方,也就是说,所有的变量等,最开始都是先在eden中,然后等待GC进行清扫,如果GC经过了若干次清扫之后,变量依然存在,那么Jvm就会认为这个变量比较可靠,是一个需要长久的进行维护的,因此就需要放入老年区,老年区,就是jvm比较少干扰的一个区域,而且一般内存与区比新生代要大,可通过不同的参数进行配置,但是一般建议老年代:新生代=8:2,从而就可以看到老年代是很大的。
from和to区,是GC的一个复制算法需要的