对象放在堆
虚拟机栈, 运行java 本地方法, 运行本地方法
--------------------------------------------
方法区: class, 常量 , static
-XX:Metaspacesize
-XX:MaxMetaspacesize
----------------------------------------------------
每一个方法是一个栈针, 执行完了, 出栈, 线程执行完了
局部变量, 放在堆, 因为它只能被对象使用
直接内存, unsafe,
-Xss //栈
相互引用的垃圾case: 引用计数法无法回收 => 根可达 (可达性分析)
处理OOM:
查问题:
jps查java进程
jinfo查参数
-XX:printGC
jinfo只能修改manageable的参数
Top
按大写H, 查看问题进程的线程
jstack排查线程
nid是问题线程
排查出GC疯狂工作, 然后继续排查如何造成的GC工作
jmap -histo //查看对象占用存储情况
复制算法: 只复制非垃圾对象, 到另一块空间, 因为大部分对象都是瞬间废弃, 复制一次可能只复制2%. 复制之后, 原空间格式化
回收老年区用fullGC 不仅回收堆,
年轻态 GC