虚拟机简介

[返回JVM目录]

此文章为个人简易备忘录,请参考原著《深入了解java虚拟机》

JVM 简介

Java 虚拟机为所有物理机建立了一个统一的运行平台。在任何虚拟机上编译的程序能在任何虚拟机运行,虚拟层面隐藏了底层技术复杂性和操作系统差异性。

阅读更多

类加载

[返回JVM目录]

类加载子系统

由于class文件字节码开头有特定标识,加载子系统可识别。(排除无效文件)
加载器只负责文件加载,Execute engine 决定是否可运行。
字节码实际上是磁盘上的一个文件,要加载到内存当中
常量池在运行过程中加载到内存里就叫做运行时常量池

[返回JVM目录]

运行时数据区域

[返回JVM目录]

数据区

JVM在执行程序时会把内存分为不同的数据区。
各个区域用途不同,有的区域生命周期和进程相同,有的和线程相同。

程序计数器(program counter register)

拥有小块内存空间,显示当前程序字节码文件行号。字节码解释器可以修改此数值,以此选择下一条字节码指令。(循环,跳转,线程恢复等功能)
在JVM多线程中,每一个线程都会有一个独立计数器,确保线程切换后执行位置正确。该内存为线程私有内存,计数器互不影响。

线程执行Java method 时,计数器记录当前字节码位置。执行Naative时,计数器为undefind。此内存区不规定OutOfMemoryError。

虚拟机栈(VM stacks)

该内存也是线程私有,生命周期和线程相同。
虚拟机栈模拟了Java方法执行过程,即栈帧入栈出栈过程: 执行时创建一个栈帧(Stack Frame),储存局部变量,操作数栈,动态链接方法出口信息。

局部变量存储8种基本数据类型,对象引用 和 returnAddress(指向一个字节码指令地址)

本地方法栈

p63

[返回JVM目录]