JVM学习笔记

JVM组成
程序计数器线程独有,用于线程切换后能继续在正确的位置继续运行
方法区:存放类信息常量静态变量编译后的代码等
本地方法栈:和虚拟机栈类似区别在于为本地方法服务
虚拟机栈:存放局部变量表局部变量表存放了各种基本数据类型对象引用
堆存放对象实例共享区域
新生代收集器: Serial、 ParNew、 Parallel Scavenge;
老年代收集器: Serial old、 Parallel old、CMs;
整堆收集器:G1;

垃圾确认算法
1引用计数.当一个对象被其它对象引用数字加一;引用失效就减一;计数为0则回收该对象
缺陷:无法解决两个对象相互引用的情况不可用
2根搜索算法从一系列 GC ROOTS对象出发当一个对象到根对象没有任何引用路径则为不
可达的对象为需要回收的对象 GC ROOTS:虚拟机栈本地变量表或者方法区中的常量所引用
的对象

强/软/虚引用
强引用无论何时都不会被回收
弱引用:在内存不足即将溢出时会被回收
弱引用:垃圾回收时会被回收
虚引用会被回收设置的目的在于该对象被回收时收到系统通知

垃圾回收算法
1.标记清除第一步标记出需要回收的对象,第二步清除.缺陷:1内存会产生大量不连续
碎片.2效率差标记和清除都需要花费大量时间
仅cms使用此算法

2.复制算法.将内存分为两块区域当一块区域的内存快要用完时,将该区域的存活对象复制到另一区域,然后将该区域清空.缺点:可用内存变少
适用于新生代,将内存分为 Eden: Survivor from: Survivor to=8:1:1.每次将Eden和
from中存活的对象放入to,然后清空Eden和from

3.标记-整理.第一步标记,第二步让所有存活对象移动,清理掉边界以外的内存这样内存连续,但是效率依然不高
适用于老年代老年代存活的对象较多,不能采取复制算法不然空间可能不足

垃圾收集器

  1. Serial单线程收集器用于新生代采用复制算法搭配 Serial Old工作时会 stop the world直到收集完成.适用于单核CPU减少线程上下文切换
  2. ParDew:多线程收集器.用于新生代,sera的多线程版本采用复制算法搭配CMs也会stop the world
  3. Parallel Scavenge:多线程收集器,用于新生代.采用复制算法.与 ParNew区别:更关注吞吐量两个参数控制单次垃圾回收最大时间或吞吐量(CPU运行用户线程时间/用户线程运行时间+垃圾回收时间)自适应开关:将自动调整Eden和 Survivor区的比例,自适应地提升吞吐量
  4. Serial Old:单线程收集器用于老年代,采用标记整理算法.工作时会 stop the world直到收集完成.适用于单核CPU减少线程上下文切换
  5. Parallel Old:多线程收集器用于老年代采用标记整理搭配 Parallel Scavenge
    6.CMs:真正意义上可以并发收集垃圾的收集器.采用标记-整理算法.标记过程:初始标记-并发标记-重新标记-并发清除.其中初始标记和重新标记会 stop the world时间短影响小并发标记和并发清除可以和用户线程并行.缺陷1处理后空间不连续2无法处理浮动垃圾(并发清除时产生的新垃圾)3CPU资源敏感.由于是并行CPU核心少的时候会卡顿严重
    7.G1适用于全堆采用标记整理算法优势:可以在基本不牺牲吞吐量的前提下完成垃圾回收原因将整个java堆分为多个区域,根据垃圾数量维护一个列表每次根据允许的收集时间,尽可能多的回收垃圾也就是G1名字的来源 Garbage First

内存分配和回收
1.对象优先分配在新生代的Eden区如果放不下,则触发一次 minor gc,还放不下就直接进入老年代
2.大对象直接进入老年代有一个参数 PretenureSize ThreasHold,大于这个值的对象直接进入老年代.目的:防止新生代大量内存拷贝注意此参数对 Parallel Scavenge收集器无效
3.长期存活对象进入老年代.可配置,默认15岁每在 survivor区存活一次加一岁,15岁以后可进入老年代
4.动态年龄判断.如果 Survivor区中相同年龄的对象超过一半那么大于等于该年龄的对象
可直接进入老年代
5空间分配担保.发生YGC时会检测之前进入老年代的平均大小是否大于当前老年区剩余
大小如果大于,则进行FGC如果小于,则查看是否允许担保失败若允许,则只进行YGC若不允许,则也要进行FGC.一般会设置为允许担保失败,避免FGC过于频繁.

何时会触发FullGC?
1.老年代空间不足
2.大对象进入老年代装不下
3.发生YGC时,前几次YGc进入老年代的平均值大于当前老年代的剩余空间
4.发生YGC时不允许老年代担保失败则触发FGC
5.发生YGC时允许老年代担保失败,并且真的担保失败了,则触发FGC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值