JVM结构原理

文章目录

  • 概览
  • 参考

概览

JVM结构原理_第1张图片
1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中(把类加载至方法区)。

2.执行引擎:负责执行class文件中包含的字节码指令

3.内存区(也叫运行时数据区)

是在JVM运行的时候操作所分配的内存区。运行时内存区主要可以划分为5个区域,如图:
JVM结构原理_第2张图片

  • 1.方法区(Method Area):用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆),所以大家不要搞混淆了。方法区还包含一个运行时常量池。

  • 2.java堆(Heap):存储java实例或者对象的地方。这块是GC的主要区域(后面解释)。从存储的内容我们可以很容易知道,方法区和堆是被所有java线程共享的。

  • 3.java栈(Stack):java栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的java栈。在这个java栈中又会包含多个栈帧,每运行一个方法就创建一个栈帧,用于存储局部变量表、操作栈、方法返回值等。每一个方法从调用直至执行完成的过程,就对应一个栈帧在java栈中入栈到出栈的过程。所以java栈是现成私有的。

    【深入理解java虚拟机v3】代码清单2-4 、2-5虚拟机栈和本地方法栈测试
    java虚拟机-栈帧

  • 4.程序计数器(PC Register):用于保存当前线程执行的内存地址。由于JVM程序是多线程执行的(线程轮流切换),所以为了保证线程切换回来后,还能恢复到原先状态,就需要一个独立的计数器,记录之前中断的地方,可见程序计数器也是线程私有的。

    参见 【深入理解java虚拟机v3 】 2.2.1 程序计数器

  • 5.本地方法栈(Native Method Stack):和java栈的作用差不多,只不过是为JVM使用到的native方法服务的。

4.本地方法接口:主要是调用C或C++实现的本地方法及返回结果。

参考

JVM结构原理

你可能感兴趣的:(jvm,jdk,jvm结构)