java虚拟机
2019-12-23 10:11:18 0 举报
AI智能生成
java虚拟机详尽描述
作者其他创作
大纲/内容
垃圾收集器
判断对象存活的方法
引用计数算法
可达性分析法
收集算法
标记清除
复制
标记整理
分代收集
种类
serial收集器
采用复制算法的单线程的收集器
parnew收集器
Serial收集器的多线程版本
parallel scavenge 收集器
吞吐量优先
多线程
停顿时间-XX:MaxGCPauseMillis
吞吐量-XX:GCTimeRatio
-XX:UseAdaptiveSizePolicy
设置此参数会动态调整虚拟机新生代等内存大小,并且根据收集的数据进行调优
serial old收集器
serial的老年代版本
单线程
标记-整理算法
parallel old收集器
parallel scavenge的老年代版本
多线程
标记-整理算法
cms收集器
以获取最短回收停顿时间为目标的老年代收集器
采用标记-清除算法
初始标记
并发标记
重新标记
并发清除
g1收集器
可预测停顿时间模型
jdk故障和监控工具
oom日志配置
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/web/oom.hprof
jps 虚拟机进程状况工具jvm process status
可查看jvm启动参数
jstat虚拟机统计信息监控工具 jvm statistics monitoring
监视类加载等情况
监视垃圾收集的情况
jinfo
查看配置及动态修改配置
jmap
内存映像工具可生成堆转储文件,查看内存使用情况
jhat
堆转储文件分析工具
jstack
java堆栈跟踪工具
内存区域
程序计数器
执行指令的行号指示器,线程私有
java虚拟机栈
java方法执行时使用的内存区域
本地方法栈
java执行本地方法时使用的内存区域
java堆
对象存放区域
方法区
存储类信息、常量()、静态变量、即时编译后的代码数据
运行时常量池
属于方法区的一部分
直接内存
直接分配的堆外内存,不受虚拟机内存的限制,NIO就使用了直接内存
内存设置
-Xms 初始堆大小
-Xmx 最大堆大小
-Xmn 最小堆大小
-XX:PermSize 方法区大小
-XX:MaxPermSize 方法区最大大小
-XX:NewSize 新生代大小
-XX:MaxNewSize新生代最大大小
虚拟机对象
对象的创建
1、遇到new指令时,首先在常量池中找到符号引用
2、检查这个符号引用的类是否被加载、解析初始化过,否则进行类加载
3、为对象分配内存
指针碰撞分配:内存规整,有指针作为分界符
空闲列表分配:从空闲列表中分配
堆是否规整根据不同的收集器的不同而不同
分配策略
小对象分配到新生代eden
存活的对象复制到surviver
大对象直接分配到老年代
from surviver :to surviver : eden为1:1:8
新生代 minor GC
full GC
4、进行初始化设置
对象的内存布局
对象头
包括对象的哈希吗、分代年龄、类型指针、锁指针、偏向id、偏向时间戳等
实例数据
真正的对象信息
对齐填充
占位符,确定对象大小是8的整数倍
对象的访问
句柄访问
直接指针访问
相关知识文档
jvm参数
0 条评论
下一页