1、JVM中对象的创建过程。
JVM中对象的创建过程- 划分内存的方式:
指针碰撞:要求堆空间必须时规整的
空间列表:空间可以是不规整的,必须设置了一个空间列表 - 解决并发安全问题:
CAS :compare and swap 失败重试 (无锁化 乐观机制)
Thread Local Allocation Buffer
2、对象的内存布局及访问方式。
对象的内存布局Mark Word
对象填充:填充对象数据满足8字节的整数
- 对象的访问定位
使用句柄 (做一次地址转换)
直接指针(访问速度更快,节约一次重定位)hotspot主流 访问方式
3、可达性分析算法与垃圾回收算法。
JVM java中,都是自动化的垃圾回收
判断对象的存活
- 引用计数法(无法解决循环引用的问题)
- 可达性分析(根可达) JVM采用的算法
GC Roots =====> Garbage Collection RootSet
静态变量
线程栈变量
常量池
JNI指针
内部引用:class对象、异常对象Exception、类加载器
同步锁:synchronized对象
内部对象:JMXBean
临时对象:跨代引用
- class对象回收条件
1.class new出的所有对象都被回收掉了
2.类加载器也需要被回收掉
3.类 Java.lang.class对象
4.任何地方没有被引用,并且无法通过反射调用这个类的方法
5.参数控制 -Xnoclassgc 启动时禁止类的垃圾回收
-
Finalize
对象的拯救,在垃圾回收的时候会回调的一个方法
只有被回调一次(两次GC就会挂掉) -
各种引用
强引用 =
软引用 SoftRefrence(即将OOM时回收)
弱引用 WeakRefrence(只要发生垃圾回收就会被回收)
虚引用 PhantomRefrence(监控垃圾回收器是否正常)
4、分代回收理论及对象的分配策略。
几乎所有的对象都在堆中进行分配
- 对象的分配原则
对象优先在Eden分配
空间分配担保
大对象直接进入老年代
长期存活的对象进入老年代
动态对象年龄判定
大对象直接进入老年代的条件:
1.垃圾回收器 Serial ParNew
2.-XX:PretenureSizeThreshold=4m 大于这个
-
虚拟机的优化技术
逃逸分析 +触发JIT(热点数据) 会被分配到栈区
对象分配原则 -
分代回收理论
回收理论
5.垃圾回收算法
- 复制回收算法(新生代的算法)
实现简单、运行简单
没有内存碎片
空间利用率只有一半
Appel式的复制回收算法
Appel式回收
提高空间利用率和空间分配担保
复制回收算法
-
标记-清除算法(Mark-Sweep) 老年代算法
位置不连续,产生碎片
可以做到不暂停
标记-清除算法 -
标记-整理算法(Mark-Compact) (先标记->再整理->最后清除)
标记-整体算法
网友评论