Heap堆结构简介
堆包括三部分:新生代,老年代,元空间/永久代。
新生代包括:伊甸园区,幸存者0区,幸存者1区。
7是永久代,8是元空间。
物理上有2部分:新生+养老。
heap堆new对象流程
知识点:new一个对象,是new在了伊甸园区。
伊甸园区发生的GC是YGC。y是young的意思。也是轻量级的GC。YGC之后幸存的对象,放到幸存者0区,别名from区。
如果15次GC都没被清空,就会送到养老区。养老区满了,开启Full GC(FGC),Full gc 多次执行完毕之后,还不能清理出空间,就OOM了。
Transfervalue
基本类型传复印件,引用类型传引用,string特殊,方法内部会新建一个指向,并不改变原来的指向。
这个题需要注意:栈里面压入一个一个的方法(栈帧),每一个栈帧里面有不同的局部变量,age就是局部变量。虽然传给了另一个方法,是另一个栈帧的入参,是另外一个部分的局部变量,在那个栈帧中改变age,不影响main这个栈帧中age的值。
new person,引用在栈,数据在堆中,传给方法的是内存地址,指向关系如下图:
元空间里有常量池,string的使用原则是池子里有我就复用,没有我就在常量池里面新建。string传过去的确实是引用,但是他新建的逻辑是没有就新建,而不是在原来位置修改,就导致了,main中的string指向的内容没有改变。
对象生命周期和GC
幸存者0区,简称s0,别名叫from区,幸存者1区,简称s1,别名叫to区。
重点:注意关注堆中各部分的比例。新生代:老年代 = 1:2 ,Eden:From:to = 8:1:1.
轻GC(ygc,minorGC)的过程:复制,清空,互换。
永久代
永久代是7的叫法,元空间是8的叫法。