JVM 内存模型:1.共享区:堆、方法去(元空间)2.私有区:栈(线程)、本地方法栈(native)、程序计数器
每个线程分配到对应栈存储对应线程中的方法会分配栈帧,栈帧内部包含:局部变量表、操作数栈、动态链接、方法出口
操作数栈用于存储操作数据,局部变量表存储变量,(程序计数器记录程序执行的位置),动态链接就是符号引用转变成直接引用
堆存放对象
堆分为年轻代、老年代,年轻代分为Eden、Survivor(s0,s1)
Eden区放满了会执行minor gc,将非垃圾对象放到空的survivor区,下一次Eden区满后,会将的Eden区和survivor区一起扫描,将非垃圾对象放到另一个survivor区,.....15次,年龄达到15会将非垃圾对象放到老年区。老年代放满会执行full gc会回收年轻代和老年代
可达性分析算法:将“GC Roots”对象作为起点,从这些节点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余对象都是垃圾对象。
GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等等
在执行gc的时候会STW(stop the word,停止整个事件),full gc的时候STW时间会比较长
方法区:常量、静态变量、类信息
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于