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