【JVM】Demo实战总结(一)

文章目录

  • 是什么?
    • 基本结构
      • 运行时数据区
        • 1.程序计数器
        • 2.虚拟机栈
        • 3.本地方法栈
        • 4.Java堆
        • 5.方法区

是什么?

 JVM(java virtual machine),它是运行java字节码的虚拟机。包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。它是运行在操作系统之上的。

基本结构

JVM主要有三个主要的子系统构成,包括类加载子系统、运行时数据区、执行引擎。如下图显示
【JVM】Demo实战总结(一)_第1张图片

运行时数据区

 JVM内存区域主要分为线程私有的【程序计数器、虚拟机栈、本地方法栈】和线程公有【方法区、Heap】。结构图如下:
【JVM】Demo实战总结(一)_第2张图片
:线程私有数据区域生命周期是跟随者线程共存亡,不需要垃圾器回收;而线程公有的是根据虚拟机的启动/关闭而创建/销毁的。

1.程序计数器

 它是当前线程所执行的字节码的行号指示器,存储程序下一个执行的字节码。是线程私有的。如果是正在执行java方法的话,计数器记录的是虚拟机字节码指令的地址,如果还是Native,然后就是空。

2.虚拟机栈

 是描述的java方法执行的内存模型,每个方法在知识性的同时都会创建一个栈帧,然后用来存储局部变量表、动态了解、操作数栈、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机入栈中到出栈的过程。

【JVM】Demo实战总结(一)_第3张图片

3.本地方法栈

 类似于虚拟机栈。他们的区别只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈是为虚拟机使用的Native服务。

4.Java堆

 虚拟机启动时自动分配创建,用于存放对象的实例,然后几乎所有对象,都是在堆上分配内存,同样也是垃圾回收主要的区域。
【JVM】Demo实战总结(一)_第4张图片

5.方法区

  包括存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等数据。成为堆的一个逻辑部分,所以别名也成非堆;

你可能感兴趣的:(JVM)