内存模型
本地方法栈:c++的native方法
程序计数器:程序当前运行的位置
栈:函数当前运行过程中的临时变量(引用类型,即地址,指向堆)
以上三个是线程私有
方法区:静态方法或变量,类加载器
堆:对象
gc(垃圾回收)
gcroot不能删除的
栈,本地方法栈,方法区:直接或间接引用
直接或间接引用的对象
gcroot可以删除的
没有和gcroot直接或间接相连
gc方法
标记清理:先标记再清理,内存碎片
标记整理:先标记再清理,清理之后移动到空位,代价太大
复制:内存分为1区和2区,先用1区,把没有标记的复制到2区,清理1区,需要2倍内存
实际gc
young区 1:1:8
survive0
survive1
eden:新创建的对象,快满了之后用复制算法复制到survive区,两个survive区交替使用
old区
年龄>6的对象:每次gc年龄+1,满6次复制到old区
大对象
old区满了之后进行fullgc,java程序暂停,进行标记清理或者标记整理
类加载过程
原文:https://www.cnblogs.com/liuhaoyu999/p/14631749.html