首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JVM中堆跟栈的描述

2012-10-26 
JVM中堆和栈的描述JVM specification对JVM内存的描述:?主要包括两个子系统和两个组件: Class loader(类装

JVM中堆和栈的描述

JVM specification对JVM内存的描述:

?

主要包括两个子系统和两个组件: Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系统;Runtime data area (运行时数据区域)组件, Native interface(本地接口)组件。?
???? Class loader子系统的作用 :根据给定的全限定名类名(如 java.lang.Object)来装载class文件的内容到 Runtime data area中的method area(方法区域)。Javsa程序员可以extends java.lang.ClassLoader类来写自己的Class loader。?
????? Execution engine子系统的作用 :执行classes中的指令。任何JVM specification实现(JDK)的核心是Execution engine, 换句话说:Sun 的JDK 和IBM的JDK好坏主要取决于他们各自实现Execution engine的好坏。每个运行中的线程都有一个Execution engine的实例。

? Native interface组件 :与native libraries交互,是其它编程语言交互的接口。

?????Runtime data area组件 : 这个组件就是JVM中的内存。

???? Runtime data area 主要包括五个部分:Heap (堆), Method Area(方法区域), Java Stack(java的栈), Program Counter(程序计数器), Native method stack(本地方法栈)。Heap(堆) 和Method Area是被所有线程的共享使用的;而Java stack, Program counter 和Native method stack是以线程为粒度的,每个线程独自拥有。

?

Java栈

Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放。

Java堆

Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。

?

举例说明

简单的说其实 栈(stack) 就是存放变量引用的一个地方, 堆(heap) 就是存放实际对象的地方. 也就是比如: int i = 7;? 这个 其实是存在栈里边的。内容为 i = 7。

?Apple app = new Apple();? 这个 app 是在栈里边的 他对应的是一个内存地址也在堆里边, 而这个内存地址对应的是堆里边存放 Apple 实例的地址。

String s = "Hello World!";? 这个其实是存在另外一块静态代码区。

?

总体来说:? 栈--主要存放引用 和基本数据类型。

??????????? 堆--用来存放 new 出来的对象实例。

热点排行