关于JVM学习的一些知识点

OOM产生原因
1)堆溢出(空间不够用)
2)虚拟机栈和本地方法栈溢出(栈空间无法扩展时)
3)方法区和常量池(生成大量动态类)
4)直接内存溢出(默认和堆大小一样,可指定大小使用allocateMemory时产生)

内存泄漏
对象既不能被回收又不能使用,不可控
如IO连接,Socket连接使用完不关闭,此时又不能被垃圾回收应为连接在使用中,造成内存不可控

GCRoot 可达性分析法
GCRoot根对象来源
1)栈中的引用对象
2)方法区的静态属性
3)方法区常量引用的对象
4)本地方法栈中JNI引用的对象


对象引用
强引用 “new Object()”这一类的
软引用   第二次GC被回收
弱引用   只能生存到下次GC
虚引用   随时被回收

垃圾回收算法
1.标记-清除算法(老年代的常用算法,缺点清除对象后内存产生碎片)
2.复制 (新生代常用算法,适用小内存,不考虑产生的碎片问题)

内存分配策略和回收策略
1)通常对象 新生代中分配,当新生代内存不够时发生minor GC
2)大对象直接进入老年代,根据--XX:pertenureSizeThreshold参数指定的大小,大于这个值直接进入老年代
3)长期存活的对象直接进入老年代,如果对象在Eden出生且经过第一次Minor GC仍存活,且能进入幸存区,每发生Minor GC对象年龄就+1,默认15岁进入老年代,但是可以根据--XX:MaxTenuringThreshold参数指定岁数
4)动态年龄判定,为了更好的适应不同程序的内存状况,虚拟机不要求年龄达到上述设置值才进入老年代,当Survivor空间中相同年龄的对象>=Survivor空间的50%,可直接进入老年代,无需满足条件3)
5)空间担保分配
在发生Minor GC前,虚拟机会检查老年代的最大连续可用空间是否大于新生代的所有对象空间,是则Minor GC安全,否则看是否允许担保失败,允许则尝试MinorGC,否则进行Full GC
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值