欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深入理解Java虚拟机总结一自动内存管理机制(一)

程序员文章站 2022-07-12 20:09:31
...

深入理解Java虚拟机总结一自动内存管理机制(一)

  • 运行时数据区域
  • HotSpot虚拟机对象探秘

运行时数据区域

总体的内存区的划分:
深入理解Java虚拟机总结一自动内存管理机制(一)
划分线程共享和线程独占和线程共享的原因:
深入理解Java虚拟机总结一自动内存管理机制(一)

接下来就是各个运行时数据区的详细概况:

  • 1).程序计数器:
    深入理解Java虚拟机总结一自动内存管理机制(一)

  • 2).Java虚拟机栈
    深入理解Java虚拟机总结一自动内存管理机制(一)
    深入理解Java虚拟机总结一自动内存管理机制(一)
    深入理解Java虚拟机总结一自动内存管理机制(一)

  • 3). 本地方法栈
    深入理解Java虚拟机总结一自动内存管理机制(一)

  • 4).Java堆
    深入理解Java虚拟机总结一自动内存管理机制(一)

  • 5). 方法区
    深入理解Java虚拟机总结一自动内存管理机制(一)
    深入理解Java虚拟机总结一自动内存管理机制(一)

  • 6). 方法区中的常量池:
    深入理解Java虚拟机总结一自动内存管理机制(一)

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   运行时常量

    }
}

上面的代码的内存分配如下:
深入理解Java虚拟机总结一自动内存管理机制(一)

  • 7). 直接内存(不是运行时数据区域的一部分):
    深入理解Java虚拟机总结一自动内存管理机制(一)

HotSpot虚拟机对象探秘

  • 对象的创建过程
  • 对象的内存布局(结构)
  • 对象的访问定位

对象的创建过程

1). 对象的内存分配

深入理解Java虚拟机总结一自动内存管理机制(一)

虚拟机在堆中分配内存有两种方式:

  • 指针碰撞
    深入理解Java虚拟机总结一自动内存管理机制(一)
  • 空闲列表
    深入理解Java虚拟机总结一自动内存管理机制(一)
2). 线程安全问题

深入理解Java虚拟机总结一自动内存管理机制(一)

3). 初始化对象

深入理解Java虚拟机总结一自动内存管理机制(一)

5). 调用对象的构造方法< init >

深入理解Java虚拟机总结一自动内存管理机制(一)

对象的内存布局(结构)

深入理解Java虚拟机总结一自动内存管理机制(一)

对象的访问定位

  • 句柄访问
  • 直接指针

句柄访问:
深入理解Java虚拟机总结一自动内存管理机制(一)
直接指针:
深入理解Java虚拟机总结一自动内存管理机制(一)
各自的优势:
深入理解Java虚拟机总结一自动内存管理机制(一)