JVM内存结构浅谈

Java程序的运行过程:

1, 编译器将源代码编译成.class文件(对于虚拟机来说并不关心class文件的来源是什么,只要他符合java class文件的规则,就可以在jvm中运行,使用其它语言将其编译成class文件也是可以在jvm中运行的)

2,
ClassLoad(类加载器)将.class文件加载到内存

3,   Execution Engine(执行引擎)解释命令,提交到操作系统

4,  若是需要调用其它语言的函数则由Native Method Interface(本地方法接口)完成,首先会在native method stack(本地方法栈)中登记函数,执行引擎执行是加载native libraries(本地方法库)



 

ClassLoad(类装载器):加载类文件到内存,并且只加载符合格式的class文件,并不负责是否能够运行

 

 

Runtime Data Area

Programme Counter Resister:每当启动一个线程时,都会为这个新线程创建一个自己的  pc寄存器。

 

Java Stack:Java栈是线程私有的。每当启动一个线程时,.Java虚拟机都会为他分配一个Java栈。以帧为单位进行压栈或者出栈。当线程调用Java方法时,虚拟机则压入一个新的栈政到该线程的Java栈中。当方法返回时,这个栈帧被从Java栈中弹出并被抛弃。其存储局部变量、操作栈、动态链接、方法出口。

 

Native Method Stack:本地方法栈则是为虚拟机使用的Native方法服务。某个虚拟机实现的本地方法接口是使用c连接模型的话,那么它的本地方法栈就是c栈

 

Heap:堆是Java虚拟机所管理的内存中最大的一块,Java堆是被所有的线程共享的一块内存区域,在虚拟机启动时创建。所有的对象实例都要以及数组都要在堆上分配,同时堆也是Java虚拟机主要管理的区域

 

Method Area:类加载器加载class文件到内存时,虚拟机会提取其中的类型信息,并将这些信息存储到方法区。方法区用于存储已被虚拟机加载的类信息、常量静态变量等数据。由所有的线程贡献方法区。

 

Execution Engine:执行引擎也叫解释器,负责解释命令,提交操作系统执行。

猜你喜欢

转载自raidyue.iteye.com/blog/1871740