4-JVM
2023-03-28 15:37:36 0 举报
AI智能生成
JVM学习笔记
作者其他创作
大纲/内容
CPU缓存结构图
方式1:总线锁BusLock
图示
MESI协议
伪共享问题
缓存行填充
缓存行
方式2:实现各种各样的缓存一致性协议+总线锁
CPU层次
线程数据缓存一致性
乱序执行
合并写技术 WriteCombineBuffer
问题
内存屏障 Store Load
Lock指令
CPU方案
内存屏障
JVM层级
指令重排序
premain方法
打包
启动
javaAgent
Hotspot
TaobaoVM
LiQuidVM
azul zing
JVM的具体实现
混合模式:-Xmixed
纯解释 -Xint
纯编译 -Xcomp
JVM的编译模式
minor_version
major_version
ConstantPool
<clinit>
<init>
_store_x
_load_x
invokeStatic
invokeVirtual
invokeSpecial
invokeInterface
invokeDynamic
invoke_xxx
Method Code
字节码解释
一段代码
Class文件格式
基础知识
BootStrap
Extension
App
继承ClassLoader 重写 findClass 方法
继承ClassLoader 重写 loadClass 方法
Custom
分层加载
获取某个类的加载器
ClassLoader 双亲委派机制
Loading
verification
prepare
solution
Lingking
Initializing
类的加载三大过程
MethodArea
Heap
PC
local variables
Operand Stack
Dynamic Linking
Return Address
栈帧 frame
Stack
NativeMethodStack
结构图
JVM的Runtime Data Area
Loading Linking Initializing
申请一块内存空间
成员变量赋默认值
成员变量赋初始值
执行构造函数语句
执行构造函数
对象创建的步骤
指针压缩模式
子主题
标记描述,包括hashcode信息,锁信息,GC标记。(属于对象头信息 默认8字节)
markword
指向 类.class 的地址。 记录这个对象属于哪个class。(属于对象头信息 默认4字节)
class pointer
记录成员变量的地址。如果有一个int类型成员变量,占4字节
instance data
对齐8字节。64位系统,整个类的所占字节数需要被8字节整除
padding
结构
JOL工具
获取对象的大小
对象在内存中的结构
JVM中的对象
2 大对象直接分配到老年代
1 尝试栈存储
2 线程本地区域分配 TLAB
垃圾回收年龄不够到 survivor 区
垃圾回收年龄到达 进入老年代
eden区存储
对象的内存分配
eden区
年轻代 Yong
MinorGC或者叫YGC
老年代 Old
MajorGC或者FullGC
堆内存的划分
方式1 refrence_count 对象头记录被引用次数。
方式2 rooting search 跟可达算法
找到垃圾
1. Mark-Sweep 标记清除
2. Mark-Compress 标记压缩
3. Copying 复制算法
清理垃圾
GC 算法思路
Serial Copy算法
SerialOld MC算法
-XX:+UseSerialGC。
单线程串行回收 Serial+SerialOld
ParallbelScavenge Copy算法
ParallbelOld MC算法
-XX:+UseParallelGC 和 -XX:+UseParallelOldGC
-XX:PretenureSizeThreshold
多线程并行回收 PS+PO
ParNew
初始标记 initial mark
并发标记 concurrent mark:
重新标记 remark
并发清理 concurrent sweep
四个阶段
碎片问题
浮动垃圾问题
ConcurrentMapSweep
SerialOld
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
并发清理 ParNew+CMS+SerialOld
region
Rset(Remember Set)
CSet(Collection Set)
Card Table
基本概念
黑,灰,白
方法1(CMS使用):Incremental update
方法2(G1使用):SATB snapshot at a begining。
解决漏标问题
三色标记法
-XX:+UseG1GC
-XX:InitiatingHeapOccupancyPercent=45
-XX:+G1HeapRegionSize
调优参数
G1收集器 逻辑分代
颜色指针
ZGC
常用的垃圾收集器组合
STW(Stop The World )
Garbage Collection
日志参数
-XX:+PrintFlagsFinal 打印最终系统参数列表
-Xms -Xms 最小堆和最大堆,建议设置为同样的值
其他
JVM参数
无压测不调优
案例1
案例2
预调优
垃圾收集器的选定
堆大小设置
GC日志信息配置
常规操作
案例2 CPU飙高
案例3 内存飙高
优化JVM慢,卡顿
OOM
调优大方向
top -Hp 【24108】 查看该进程下的子线程
top命令查看占资源的进程
jps 列出java相关进程
jinfo[pid] 查看配置参数
jstack 【24108】 打印线程栈信息。
jmap, jmap -histo 3898 |head -20 观察堆内存中的 类的对象数量,和大小。
java -XX:+HeapDumpOnOutOfMemoryError
优化步骤
jprofiler 收费工具
Arthas 免费工具
JVisualVM JDK自带 分析java -XX:+HeapDumpOnOutOfMemoryError文件
JConsole JDK自带 分析java -XX:+HeapDumpOnOutOfMemoryError文件
监测工具
JVM调优和分析
JVM
0 条评论
回复 删除
下一页