Jvm运行时内存解析
一、jvm的概念
在了解jvm的概念之前,我们先来了解java平台的逻辑结构,图片来自《深入java虚拟机》
从图中我们可以看到jdk包含了jre,java语言和java开发工具和Api,jre包含了java运行的基础类库和java虚拟机,java虚拟机支撑着java程序的运行。
jvm(java virtual machine)翻译为java虚拟机,从字面上来理解,jvm就是一个虚拟的机器,其实类似于一个操作系统,通过软件去虚拟出一个虚拟机,帮助我们管理计算机的内存和调用计算机的硬件等等。而jvm就是java程序运行时的虚拟机,在java程序运行时,jvm将java字节码文件转换成当前物理机认识的机器语言并且管理程序运行时候的内存,执行当前程序的代码,调用相关的硬件,从而得到程序运行的结果。
二、java程序的工作原理。
java程序源文件(.java)由java编译工具编译成.class文件,jvm中的类加载器读取.class中的字节码内容,并执行其中的字节码指令,在此期间,jvm还兼顾着管理java程序的运行内存,通过操作系统来调用相关硬件。
三、jvm运行时内存分布
jvm的运行过程中将java程序运行时数据区分为以下几个部分:
(1)程序计数器:存储虚拟机字节码执行的地址
(2)java虚拟机栈:java方法运行时的局部变量表,操作数栈,方法出口等
(3)本地方法栈:类似于java虚拟机栈,运行Native本地方法时存储局部变量表,操作数栈,方法出口等
(4)方法区:存放程序的常量,静态变量,类加载后的信息,即时编译器编译后的代码。
(5)java堆:是虚拟机中最大的一块内存,用于存放对象实例
(6)运行时常量池:方法区的一部分,存放程序运行时的常量和符号引用。