2015-8-26 学习自 http://www.aijava.cn/13472.html 更多详情
jvm是java virtual machine的缩写 也是一种规范 什么规范?利用java语言进行开发时所需要依赖和注意的规定。
我今天要讲的是SUN公司的java jvm。jvm对于java语言而言,是它的核心,也是java语言能够跨平台运行的核心依赖。
jvm在真实的操作系统中表现的作用更像是应用或是进程, jvm可以有多种实现,例如Oracle的JVM,HP的JVM和IBM的JVM,而在本文研究学习的则是使用最广泛的Oracle的HotSpot JVM(热点jvm?)。
JVM由四大部分组成:
1.我们最熟知的ClassLoader,类加载器,负责加载class文件
2.Execution Engine 执行引擎 也叫Interpreter,class文件被加载后,会把指令和数据信息放到内存中,Execution Engine的作用就是负责把这些命令解释给操作系统。
3.Native Interface是负责调用本地接口的。
4.Runtime Data Area是存放数据的,分为五部分:Stack, heap,Method Area,PC Register,Native Stack.
几乎所有的关于java内存方面的问题,都集中在这块。
Stack是java栈内存,栈的内存地址是不连续的,每个线程都拥有自己的栈。栈里面存储着的是StackFrame,其中又包括三类信息:局部变量,执行环境,操作数栈。
局部变量用来存储一个类的方法中所用到的局部变量。执行环境用来保存解析器对于字节码进行解释过程中需要的信息。操作数栈用于存储运算所要的操作数和结果。
Stack的大小有两种状态,一种是固定的,一种是动态的。
Heap是用来存放对象信息的,和Stack不同,Stack代表着一种运行时的状态。换句话说,栈是运行时单位,解决程序该如何执行的问题,而堆是存储的单位,解决数据存储的问题。
Heap是伴随着JVM的启动而创建,负责存储所有对象实例和数组的。堆的存储空间和栈一样是不需要连续的。‘
就这样吧。。