笔记:JVM、对象分析与垃圾回收机制剖析

2021-03-21  本文已影响0人  盐海里的鱼

JVM(Java Virtual Machine) Java虚拟机

JVM与操作系统.png

解释执行与JIT的区别:对字节码逐条解释执行,这种方式的执行速度相对会比较慢,尤其当某个方法或代码块运行的特别频繁时,这种方式的执行效率就显得很低。于是后来在虚拟机中引入了JIT编译器(即时编译器),当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,完成这项任务的正是JIT编译器。

java对象的简析(对象的诞生)

1.引用计数法:当对象被引用时 计数器+1 对象被置空时 计数器-1,计数简单 但是存在 内部互相引用不释放无法判断解开引用的情况
2.可达性分析(根可达),以GCRoots为根
GCRoots:静态变量 线程栈变量 常量池 JNI指针,异常 ,锁

Object o  = new Object()  ,= 就是强引用

2.软引用:gc时内存不足时会被回收

 SoftReference<Object> soft = new SoftReference(o);

3.弱引用:gc时会被回收

 WeakReference<Object> weak = new WeakReference(o);

4.虚引用:随时会被回收

 PhantomReference<Object> phantom = new PhantomReference(o);

垃圾回收机制(对象的死亡 GC)

垃圾回收算法:
1.复制算法:直接复制一半有用的内存对象到另外一半内存 然后清空原先的内存


复制算法.png

特点:实现简单,运行高效 ,没有内存碎片;但是内存利用率只有一半
2.标记清除算法:对需要回收的对象进行标记进行清除


标记-清除.png
特点:执行效率不稳定,内存碎片化导致提取GC
3.标记整理算法:标记清除的算法上对内存上的对象进行移动规整
标记整理.png

特点:
对象移动
引用更新
用户线程暂停
没有内存碎片

垃圾回收器.png

CMS:


image.png

G1:(android 未采用g1)


G1.png

常量池与String

image.png

QA

1. JVM内存结构说一下!

A:从线程私有的 虚拟机栈
虚拟机里会包含栈帧
栈帧又可以分为操作数栈 局部变量表 动态链接 完成出口;
程序计数器 记录当前执行的指令
本地方法栈 主要调用本地的native方法
线程共享的有方法区 存放常量 静态变量 对象引用 和堆 存放对象数组 对象实例

2.什么情况下内存栈溢出?

A:方法只进不出 只压栈不弹栈

3.描述new一个对象的流程!

A: 首先会检查class是否已加载如果未加载 先从classLoader加载class。然后开始分配内存 初始化内存,进行对象头 class实例引用 年龄分代等信息的设置 设置完成后开始对象实例的初始化。

4.Java对象会不会分配在栈中?

A:符合逃逸分析的会被分配在栈中

5. 如果判断一个对象是否被回收,有哪些算法,实际虚拟机使用得最多的是什么?

A:如果使用引用计数法 可以看引用数是否为0 如果使用根可达性分析 则需要根据引用链分析是否可达引用,实际使用的是可达性分析

6.GC收集算法有哪些?他们的特点是什么?

A:复制算法:实现简单 效率块,但是内存利用率低
标记-清除算法:效率不稳定 有内存碎片化 容易导致提前gc
标记-整理算法:重新指向引用,无内存碎片化,用户线程需要暂停,对象会被移动

7.JVM中一次完整的GC流程是怎样的?对象如何晋级到老年代?

A:首先一般的对象分配在新生代的eden区 经过一次垃圾回收后进入 from区 在from区和to区存放对象年龄超过15就会进入老年代 或者 from 区或to区空间不足那么 对象占用较大的会直接晋升老年代

8.Java中的几种引用关系,他们的区别是什么?

A:强弱软虚 强引用要主动释放才会回收 虚引用随时可能被回收 弱引用 gc时会被回收 而软引用会在gc时空间不足被回收

9.final、finally、finalize的区别?

A:final 修饰类 则类不可再被继承,修饰 变量则 变量不可再更改
finally:try{}finally{},try{}catch(XXX){}finally{} 最后都会执行finally块里的内容
finalize:对象被回收的回调 (优先级很低)

10.String s = new String(“xxx”);创建了几个对象?

A:2个 分配xxx到常量池1次 new 指向1次

上一篇 下一篇

猜你喜欢

热点阅读