java的堆栈

来源:互联网 发布:长春大学教务处软件 编辑:程序博客网 时间:2024/04/30 08:07

JAVA虚拟机(JVM)的内存可分为:堆、栈和方法区。

堆区: 
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 
栈区: 
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 
方法区: 
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量


int[] A = {1,2,3}  int[] B = {4,5,6,7,8} 

这个数组中A/B是对象引用放在方法的栈内存中,数组本身放在堆区,当A=B赋值,把B的地址赋值给A,A也指向B{1,2,3}这个数组没有任何引用对象指向,垃圾回收就会把这个空间回收。

每个方法都有自己的栈空间。


参考:http://blog.sina.com.cn/s/blog_65ca444f01011q14.html

0 0