JAVA内存区域

2016-07-07  本文已影响21人  IAmWhoAmI
Paste_Image.png

运行时数据区

要讨论的就是:运行时数据区。一般,我们叫它java内存。

关于这个,普遍的图示是这样的:

Paste_Image.png

但是我觉得,应该画成:

Paste_Image.png
#方法区
  存储了
* 每个类的信息(包括类的名称、方法信息、字段信息)
* 静态变量
* 常量
* 编译器编译后的代码等
#堆
Java中的堆是用来存储对象本身的以及数组(当然,数组引用是存放在Java栈中的)。

堆是被所有线程共享的,在JVM中只有一个堆。

垃圾回收机制,就是搞这个的。
#个人观点

堆和方法区,其实都是真正存放了信息的内存区域。
真正存放信息的意思是,存放了有内容的数据,而不是指针或是引用等等。

#差别是:
方法区是给执行引擎用的。

(额,也可能不是执行引擎,可能是虚拟机自己用,
总之,是整个java的本身运行机制需要用到的信息,存在方法区。)

而堆中的数据是给线程用的。
(也就是我们业务逻辑关注的那部分数据。)

#java虚拟机栈

就是我们常说的栈。用于存储,函数调用,而导致需要存储的内容。

简单举个例子:
函数A(){
    函数B();
} 

从函数A 跳到函数B,
等函数B运行完成,需要回到函数B,
那么怎么回去,就是从栈头pop信息出来。
这个信息包括:各种数据信息:esp,dsp,pc 等等一系列的信息。
都是由于函数调用导致的信息。具体要看看操作系统。

#本地方法栈

本地方法栈与Java栈的作用和原理非常相似。
区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。
在JVM规范中,并没有对本地方法栈的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。
在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一。

上一篇下一篇

猜你喜欢

热点阅读