project/jvm/JVM内存模型JMM.md

28 lines
1.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

大对象,新生代存储不下的对象,分配担保直接到老年代。
1. 年龄超过15
2. 相同年龄超过50%
3. 动态年龄分配,不同年龄特别多。
4. 内存担保,新生代垃圾回收无法完成,直接放入老年代。 **在GC前还会进行一次判断如果要分配的内存>=Eden区大小的一半那么会直接把要分配的内存放入老年代中。否则才会进入担保机制。**
TLAB的全称是Thread Local Allocation Buffer即线程本地分配缓存区这是一个线程专用的内存分配区域。
java -XX:+PrintCommandLineFlags -version
什么样的对象要被GC
判断回收算法
- 引用计数法,相互引用,循环引用
- 可达性分析GCroot本地变量表引用对象用来关联对象关系、方法区中的静态变量和常量虚拟机栈中本地变量表局部变量static成员常量引用本地方法栈中变量类加载器Thread
- 不可达对象finalize可以挽回一次防止回收。
- 本地方法栈中JNI引用的对象
### 对象头内存分配
![](img\对象头描述.png)
![](img\对象头信息分布.png)
![](img\锁描述.png)