Update Java 虚拟机.md
This commit is contained in:
parent
58f11f78a8
commit
90e46ab379
@ -7,6 +7,8 @@
|
|||||||
* [方法区](#方法区)
|
* [方法区](#方法区)
|
||||||
* [运行时常量池](#运行时常量池)
|
* [运行时常量池](#运行时常量池)
|
||||||
* [直接内存](#直接内存)
|
* [直接内存](#直接内存)
|
||||||
|
* [类的创建过程](#类的创建过程)
|
||||||
|
* [对象的结构](#对象的结构)
|
||||||
* [二、垃圾收集](#二垃圾收集)
|
* [二、垃圾收集](#二垃圾收集)
|
||||||
* [判断一个对象是否可被回收](#判断一个对象是否可被回收)
|
* [判断一个对象是否可被回收](#判断一个对象是否可被回收)
|
||||||
* [引用类型](#引用类型)
|
* [引用类型](#引用类型)
|
||||||
@ -102,6 +104,28 @@ Class 文件中的常量池(编译器生成的各种字面量和符号引用
|
|||||||
|
|
||||||
这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。
|
这样能在一些场景中显著提高性能,因为避免了在 Java 堆和 Native 堆中来回复制数据。
|
||||||
|
|
||||||
|
## 对象的创建过程
|
||||||
|
|
||||||
|
[图解JAVA对象的创建过程](https://www.cnblogs.com/chenyangyao/p/5296807.html)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 对象的结构
|
||||||
|
|
||||||
|
对象包含 3 个部分:
|
||||||
|
1. Header(对象头):如下图所示;
|
||||||
|
2. InstanceData(实例数据):将等宽的类型放在一起;
|
||||||
|
3. Padding(对齐填充):Hotspot 虚拟机的内存管理系统要求对象的起始地址要是 8 个字节的整数倍,而对象头就是 8 个字节的整数倍。padding 是用来填充实例数据不足 8 个字节整数倍的部分,可以理解为占位符。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 对象的地址访问
|
||||||
|
|
||||||
|
1. 直接指针:对象的引用直接指向堆中的内存地址 (Hotspot 采用的方式);
|
||||||
|
2. 使用句柄:Java 堆中划分出一块内存作为句柄池,对象的引用指向句柄池。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
# 二、垃圾收集
|
# 二、垃圾收集
|
||||||
|
|
||||||
垃圾收集主要是针对堆和方法区进行。
|
垃圾收集主要是针对堆和方法区进行。
|
||||||
@ -138,7 +162,7 @@ public class ReferenceCountingGC {
|
|||||||
|
|
||||||
Java 虚拟机使用该算法来判断对象是否可被回收,在 Java 中 GC Roots 一般包含以下内容:
|
Java 虚拟机使用该算法来判断对象是否可被回收,在 Java 中 GC Roots 一般包含以下内容:
|
||||||
|
|
||||||
- 虚拟机栈中引用的对象
|
- 虚拟机栈 (局部变量表) 中引用的对象
|
||||||
- 本地方法栈中引用的对象
|
- 本地方法栈中引用的对象
|
||||||
- 方法区中类静态属性引用的对象
|
- 方法区中类静态属性引用的对象
|
||||||
- 方法区中的常量引用的对象
|
- 方法区中的常量引用的对象
|
||||||
|
Loading…
x
Reference in New Issue
Block a user