JVM知识汇总

1.JVM内存模型

堆:创建对象的地方

栈:方法执行和引用遍历的地方

元数据区(本地方法区):静态遍历,class类

本地方法栈:native修饰的方法,c语言写的

程序计数器:程序控制

2.类加载机制

加载-类加载过程的一个阶段,ClassLoader通过一个类的完全限定名查找此类字节码文件,并利用字节码文件创建一个class对象

验证-目的在于确保class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身的安全,主要包括四种验证:文件格式的验证,元数据的验证,字节码验证,符号引用验证。

准备-为类变量(static修饰的字段变量)分配内存并且设置该类变量的初始值,(如static int i = 5 这里只是将 i 赋值为0,在初始化的阶段再把 i 赋值为5),这里不包含final修饰的static ,因为final在编译的时候就已经分配了。

解析-常量池中的符号引用替换成直接引用

初始化-类具有父类就进行对父类进行初始化,执行其静态初始化器(静态代码块)和静态初始化成员变量

双亲委派机制:父类加载,不重复加载

3.分代回收

年轻代:刚出生的对象

So:第一次没有被回收的对象

S1:第n次没有被回收的对象

老年代:15次以后没有被回收的对象,超级大的对象

4.垃圾回收机制

引用计数:给每个对象添加一个计数器,当有地方引用该对象时计数器加1,当引用失效时计数器减1。用对象计数器是否为0来判断对象是否可被回收。

缺点:

无法解决循环依赖的问题

标记清除:它分为2部分,先把内存区域中的这些对象进行标记,哪些属于可回收标记出来,然后把这些垃圾拎出来清理掉。就像上图一样,清理掉的垃圾就变成未使用的内存区域,等待被再次使用。

缺点:

内存碎片

标记整理:但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,再清理掉端边界以外的内存区域。

缺点:

标记整理算法对内存变动更频繁,需要整理所有存活对象的引用地址,在效率上比复制算法要差很多。

标记复制:可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

缺点:

消耗空间

5.垃圾回收器:

cms垃圾回收器:

初始标记-》并发标记-》重复标记-》并发清除

标记清除算法

G1垃圾回收器:

标记整理

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值