JVM学习笔记Day02

JVM学习笔记Day02

CMS:ConcurrentMarkSweep:并发标记清除,响应时间优先
并发与并行的 区别:
并发是指垃圾回收线程和用户线程同时运行,抢占CPU;
并行是指多个垃圾回收器同时运行,会有stop the world,用户线程会暂停执行。
CMS若并发失败,会退化为serialold,时间一下子会增多。
在这里插入图片描述
G1:Garbage First (2017 JDK9 默认)
在这里插入图片描述
在这里插入图片描述
JDK8u60回收巨型对象:
当一个对象大于region的一半时,称为巨型对象;
G1不会对巨型对象进行拷贝;
回收时被优先考虑;
G1会跟踪老年代所有incoming引用,这样老年代incoming引用为0的巨型对象就可以在新生代垃圾回收时处理掉。
垃圾回收调优:
内存,锁竞争、cpu占用、io。
根据低延迟和高吞吐量,选择合适的回收器
CMS,G1,ZGC;
ParallelGC;
新生代并不是越大越好。当设置过大后,将基本只有FullGC,也很费时间。推荐设置25%~50%的堆内存。
新生代能容纳所有【并发量*(一个请求-响应的单位大小)】的数据。
幸存区大到能保留【当前活跃对象+需要晋升对象】
在这里插入图片描述
其中percent设置为75~80%。
JDK1.7 方法区在永久代中,永久代空间不足也会导致Full GC
常量池中记录了类中的各种信息,包括方法,属性,成员变量,子父类,访问标识和继承信息等等。
javap -v xxx.class :java反编译。
for 和while字节码一模一样
在这里插入图片描述
最终i=30,因为编译器会按照从上至下的顺序,收集所有static静态代码块和静态成员赋值的代码,合并为一个特殊的方法。

多态的原理
在这里插入图片描述
try-catch 分析:
字节码中多出来一个Exception table的结构
在这里插入图片描述
当代码里有多个catch时,局部变量表slot是复用的,因为只会有一个Exception分支进入,以节省栈帧的内存。
try-catch-finally字节码解析:
在这里插入图片描述
下面代码结果为20:
在这里插入图片描述
一定不建议在finally中写return,因为会吞掉异常,即就算发生了异常,也不会发现。finally中不带return的话,若前面出现异常,会将其throw出去。
泛型是在jdk5开始加入的特性,但java在编译泛型代码后会执行 泛型擦除的动作,即泛型信息在编译为字节码之后就丢失了,实际的类型都当做Object类型来处理。
集合的循环会被转换为迭代器调用,例如:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值