JVM虚拟机
2021-10-20 12:14:29 30 举报
AI智能生成
Android程序员学习JVM的路线图
作者其他创作
大纲/内容
对象的分配策略
栈中分配对象
逃逸分析
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象进入老年代
对象年龄动态判定
空间分配担保
垃圾回收机制
分代收集理论
复制算法(Copying)
实现简单、运行高效
内存复制、没有内存碎片
利用率只有一半
标记-清除算法(Mark-Sweep)
执行效率不稳定
内存碎片导致提前GC
标记-整理算法(Mark-Compact)
对象移动
引用更新
用户线程暂停
没有内存碎片
JVM中常见的垃圾收集器
单线程垃圾收集器
多线程并行垃圾收集器
多线程并发垃圾收集器
Serial/Serial Old
ParNew
Parallel Scavenge(ParallerGC)/Parallel Old
CMS垃圾回收器工作示意图
Stop The World现象
G1垃圾回收器
常量池
Class 文件常量池
字面量
符号引用
运行时常量池
字符串常量池
intern方法
面试题
简述JVM内存结构
什么情况下内存栈溢出?
描述new一个对象的流程
Java对象会不会分配在栈中?
如果判断一个对象是否被回收,有哪些算法,实际虚拟机使用得最多的是什么?
GC收集算法有哪些?他们的特点是什么?
JVM中一次完整的GC流程是怎样的?
对象如何晋级到老年代?
Java中的几种引用关系,他们的区别是什么?
final、finally、finalize的区别?
String s = new String(“xxx”);创建了几个对象?
JVM 概述
JVM的跨平台与语言无关性
Java程序从编译到执行的过程
Java SE体系架构
JVM 的大致运行过程
运行时数据区域
Java 方法运行的内存区域
虚拟机栈
栈帧
局部变量表
操作数据栈
动态连接
返回地址
栈帧执行对内存区域的影响
程序计数器
本地方法(Native)运行的内存区域
本地方法栈
线程共享的区域
方法区
类信息
常量
静态变量
即时编译期编译后的代码
方法区/永久代
Java 堆
对象实例(几乎所有)
数组
Java 堆的大小参数设置
JVM 查看工具
HSDB
JPS
深入辨析堆和栈
线程独享还是共享
空间大小
内存溢出
栈溢出
堆溢出
方法区溢出
本机直接内存溢出
直接内存
虚拟机优化技术
编译优化技术——方法内联
栈的优化技术——栈帧之间数据的共享
对象的创建
虚拟机中对象的创建过程
检查加载
分配内存
并发安全
CAS机制
本地线程分配缓冲 TLAB
内存空间初始化
设置
对象初始化
对象的内存布局
对象头
实例数据
对其填充
对象的访问定位
使用句柄
直接指针
判断对象的存活
引用计数算法
可达性分析
Finalize方法
四大引用
强引用
软引用 SoftReference
弱引用 WeakReference
虚引用 PhantomReference
0 条评论
下一页