JVM简述

    • JDK&JRE&JVM
    • JVM运行时内存结构图
          • 方法区
          • 堆区
          • 栈区
          • 程序计数器
          • 本地方法栈
    • JVM 的主要组成部分及其作用

JDK&JRE&JVM

JVM简述_第1张图片

JVM就是java虚拟机,一台虚拟的机器,用来运行java代码
但并不是只有这台机器就可以的,java程序在运行时需要依赖系统的类库,那么加上这些类库,就会形成完整的运行环境,我们称为JRE
对于开发人员,我们还需要一些编写代码的各种编译工具,加上这些工具,就会形成我们的JDK,也就是java开发工具包

JVM运行时内存结构图

JVM简述_第2张图片
方法区和堆区是所有线程共享的
栈区、程序计数器、本地方法栈是线程独立的,也就是说每个线程在里面都有独立的区域,它们不共享

方法区

存储类的信息

堆区

新生代(伊甸区、幸存者区、幸存者区)、老年代

栈区

每个线程开辟独立栈,栈帧中包含局部变量表,操作数栈等等

程序计数器

使用地址对字节码指令

其实就是PC寄存器,通过它来记录程序运行的一条一条的指令,在内存里找到该指令,并执行,通过不断修改寄存器里面的内容,就可以定位不同的指令,找到该指令在内存里面的位置,并执行

本地方法栈

跟java栈类似,针对C等语言的本地方法栈

JVM 的主要组成部分及其作用

JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)Native Interface(本地接口)

  • Class loader( 类 装 载 ): 根 据 给 定 的 全 限 定 名 类 名 ( 如 : java.lang.Object)来装载class文件到Runtime data area中的methodarea。
  • Execution engine(执行引擎):执行classes中的指令。
  • Native Interface(本地接口):与native libraries交互,是其它编程语言交互的接口。
  • Runtime data area(运行时数据区域):这就是我们常说的JVM的内存。

作用:
首先,通过类加载器会把 Java 代码转换成字节码;

其次,运行时数据区再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行;

于是,需要特定的命令解析器执行引擎,将字节码翻译成底层系统指令,再交由 CPU 去执行;

最后,此过程中需要调用其他语言的本地库接口来实现整个程序的功能。

你可能感兴趣的:(jvm)