深入理解Java虚拟机总结一自动内存管理机制(一)
程序员文章站
2022-07-12 20:09:31
...
深入理解Java虚拟机总结一自动内存管理机制(一)
- 运行时数据区域
- HotSpot虚拟机对象探秘
运行时数据区域
总体的内存区的划分:
划分线程共享和线程独占和线程共享的原因:
接下来就是各个运行时数据区的详细概况:
1).程序计数器:
2).Java虚拟机栈
3). 本地方法栈
4).Java堆
5). 方法区
6). 方法区中的常量池:
public class StringTest {
public static void main(String[] args) {
String s1 = "abc"; //字节码常量
String s2 = "abc";
System.out.println(s1 == s2); // true
String s3 = new String("abc"); //false
System.out.println(s1 == s3);
System.out.println(s1 == s3.intern()); //true 运行时常量
}
}
上面的代码的内存分配如下:
- 7). 直接内存(不是运行时数据区域的一部分):
HotSpot虚拟机对象探秘
- 对象的创建过程
- 对象的内存布局(结构)
- 对象的访问定位
对象的创建过程
1). 对象的内存分配
虚拟机在堆中分配内存有两种方式:
- 指针碰撞
- 空闲列表
2). 线程安全问题
3). 初始化对象
5). 调用对象的构造方法< init >
对象的内存布局(结构)
对象的访问定位
- 句柄访问
- 直接指针
句柄访问:
直接指针:
各自的优势: