JVM结构
Java8 JVM内存结构
基本结构与之前类似,只是Java8取消了之前的“永久代”,取而代之的是“元空间”——Metaspace,两者本质是一样的。“永久代”使用的是JVM的堆内存,而“元空间”是直接使用的本机物理内存。
简单来说就是栈管运行,而堆管存储
GC Roots
如果判断一个对象可以被回收?
引用计数算法
维护一个计数器,如果有对该对象的引用,计数器+1,反之-1。无法解决循环引用的问题。
可达性分析算法
从一组名为“GC Roots”的根节点对象出发,向下遍历。那些没有被遍历到、与GC Roots形成通路的对象,会被标记为“回收”。
哪些对象可以作为GC Roots?
- 虚拟机栈(栈帧中的局部变量)中引用的对象。
- 本地方法栈(native)中引用的对象。
- 方法区中常量引用的对象。
- 方法区中类静态属性引用的对象。
JVM参数
JVM 三种类型参数
标配参数
比如-version
、-help
、-showversion
等,几乎不会改变。
X参数
用得不多,比如-Xint
,解释执行模式;-Xcomp
,编译模式;-Xmixed
,开启混合模式(默认)。
XX参数
重要,用于JVM调优。
JVM XX参数
布尔类型
公式:-XX:+某个属性
、-XX:-某个属性
,开启或关闭某个功能。
比如-XX:+PrintGCDetails
,开启GC详细信息。
KV键值类型
公式:-XX:属性key=值value
。比如-XX:Metaspace=128m
、
-XX:MaxTenuringThreshold=15
。
JVM Xms/Xmx参数
-Xms
和-Xmx
十分常见&#