线程隔离,每个线程分布独立的栈空间。
栈由一个个栈帧组成,进入到另一个方法时新开辟一个栈帧
线程隔离,记录当前线程运行位置行号,每执行完一行代码由字节码执行引擎修改行号,线程挂起后切回,从记录的行号继续执行。
线程隔离,存放本地方法数据。
线程共享,存放常量、静态变量、类信息
默认占整个堆的1/3
默认占整个堆的2/3
可达性分析算法:将GC Roots对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,未标记的则为垃圾对象。(GC Roots:线程的本地变量、静态变量、本地方法栈的变量等都可以作为根节点)。
minor gc:当伊甸区空间不足时就会触发,将伊甸区和from区标记的非垃圾对象复制到to幸存区,垃圾对象销毁。如果to被占满了,剩下的非垃圾对象被直接移动到老年代。同时在对象的Object Header(对象头)的标记字段(Mark Word)将此对象的GC年龄加一。幸存区分为from和to,每次gc时这两个区就互换身份。再次发生gc时重复此过程。默认(由参数--XX:MaxTenuringThreshold=15 决定)当一个对象的年龄超过15时被放入老年代。
full gc:当老年代空间不足时触发。
(补充)Object Header
原文:https://www.cnblogs.com/ren-kai/p/12879411.html