ParNew+CMSGC

要了解GC首先得知道他的回收算法------可达性分析算法可达性分析算法 就是看我这个对象有没有引用,没有引用就是可以回收的你得找到它的根GC Roots有哪些可以作为GC Roots呢?1 引用栈帧中的本地变量表的所有对象2 引用方法区该静态属性的所有对象3 引用方法区中常量的所有对象4 本地方法栈中(Native方法)引用的对象还得需要了解4中引用:强引用 Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存
摘要由CSDN通过智能技术生成

要了解GC首先得知道他的回收算法------可达性分析算法
可达性分析算法 就是看我这个对象有没有引用,没有引用就是可以回收的
你得找到它的根GC Roots
有哪些可以作为GC Roots呢?
1 引用栈帧中的本地变量表的所有对象
2 引用方法区该静态属性的所有对象
3 引用方法区中常量的所有对象
4 本地方法栈中(Native方法)引用的对象
还得需要了解4中引用:
强引用 Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会
靠随意回收具有强引用的对象来解决内存不足的问题
软引用 如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收
它;如果内存空间不足了,就会回收这些对象的内存只要垃圾回收器没
有回收它,该对象就可以被程序使用
弱引用 弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱
引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过由于垃
圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引
用的对象。
虚拟引用 么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。


接下来就是GC的分代以及算法调优
年轻代的算法是标记复制: 将自身的内存分为3份,E区和两个S区
新生的对象都会先放入E区,等到E区满了,就会触发YGC,将存活对象放入S区,
又接着放入新生的对象,E区又满了,触发YGC,将E区+S区进行回收,将存活的对象放入另一个S区,每次YGC存活的对象大概为10%(经验值)
这样设计的好处是只有一个S区是被闲置的,大多的内存都被使用上了,垃圾回收的性能,还有内存碎片的控制,内存的使用效率 都是非常的好
缺点:以空间换时间


老年代
老年代的回收算法是标记清除,标记整理(防止有内存碎片)
对象如何进入老年代
1 躲过15次GC之后,就会将存活的对象放入老年代中
2 动态年龄判定规则 当存活的对象进入S区中时,下一次GC,他会判断如果
年龄1+年龄2+年龄3的对象
大于S区的50%,就会

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值