一、JVM启动流程
下面是我们最熟悉的HelloWorld 代码:
public class HelloWorld {
public static void main (String [] args)
{
System.out.println("HelloWorld!");
}
}
其在运行过程如下
通过javac编译HelloWorld.java生成HelloWorld.class,然后运行java Helloworld
执行程序。
图一 JVM运行程序启动过程
二、JVM基本机构
而JVM的主要结构如下所示:
图二 JVM基本结构
1、PC寄存器
每个线程拥有一个PC寄存器
在线程创建时 创建
指向下一条指令的地址
执行本地方法时,PC的值为undefined
2、方法区
保存装载的类信息
类型的常量池
字段,方法信息
方法字节码
通常和永久区(Perm)关联在一起
注:JDK6时,String等常量信息置于方法,JDK7时,已经移动到了堆
3、Java堆
和程序开发密切相关
应用系统对象都保存在Java堆中
所有线程共享Java堆
对分代GC来说,堆也是分代的
GC的主要工作区间
4、Java栈
线程私有
栈由一系列帧组成(因此Java栈也叫做帧栈)
帧保存一个方法的局部变量、操作数栈、常量池指针
每一次方法调用创建一个帧,并压栈
三、总结
掌握程序在JVM中启动流程及jVM基本机构是学习JVM的基础。