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

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

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

Java虚拟机运行时数据区域

概括:

  • Java有Java编译器和Java虚拟机,编译器将Java源代码转换为.class文件,虚拟机加载并运行.class文件。Java 的开发遵循“一次编写到处乱跑”理念,它运行在 VM(虚拟机)上。

JVM启动流程:
《深入理解Java虚拟机总结一自动内存管理机制(一)》
JVM体系结构:
《深入理解Java虚拟机总结一自动内存管理机制(一)》
更详细的结构: (图片来源以及详细解释)
《深入理解Java虚拟机总结一自动内存管理机制(一)》

  • 运行时数据区:经过编译生成的字节码文件(class文件),由 class loader(类加载子系统)加载后交给执行引擎执行。在执行引擎执行的过程中产生的数据会存储在一块内存区域。这块内存区域就是运行时区域。

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

接下来就是各个运行时数据区的详细概况:
  • (一) 程序计数器:

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

  • (二) Java虚拟机栈

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

  • (三) 本地方法栈

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

  • (四) Java堆

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

  • (五) 方法区

《深入理解Java虚拟机总结一自动内存管理机制(一)》
《深入理解Java虚拟机总结一自动内存管理机制(一)》
《深入理解Java虚拟机总结一自动内存管理机制(一)》
关于元空间: 元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间和永久代之间最大的差别在于: 元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制。

  • (六)方法区中的常量池:

《深入理解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虚拟机总结一自动内存管理机制(一)》

  • (七) 直接内存(不是运行时数据区域的一部分):

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

HotSpot虚拟机对象探秘

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

对象的创建过程

1). 对象的内存分配

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

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

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

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

3). 初始化对象

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

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

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

对象的内存布局(结构)

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

对象的访问定位

  • 句柄访问
  • 直接指针

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

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/zxzxzx0119/article/details/82560737
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞