JVM简介

一、JVM原理

image

java编译器只要面向JVM,生成JVM能理解的字节码文件,Java源文件经过编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。

二、JVM运行时数据区

  • 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程私有的
  • 虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程私有的
  • 堆是用来存储对象示例以及数组值的区域,堆中对象需要等待GC回收,是线程共享的
  • 方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。 在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
  • 运行时常量池 存放类的固定的常量信息、方法和Field的引用信息等,其空间从方法区中分配
  • 本地方法栈 JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
内存结构 作用 多线程
程序计数器 用于指示当前线程所执行的字节码执行到了第几行 线程私有的
虚拟机栈 JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址 线程私有的
存储对象示例以及数组值的区域 线程共享的
方法区 存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等 线程共享的
运行时常量池 存放类的固定的常量信息、方法和Field的引用信息等,其空间从方法区中分配
本地方法栈 JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
原文地址:https://www.cnblogs.com/mingyi123/p/9383870.html