浅析Java堆和Java栈
方法区内存:一个
堆内存:一个
栈内存:一个线程一个
Java堆(存放对象本身)
1.堆内存用于存放由new创建的对象和数组
2.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理
3.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的
取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组
或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组
或者对象的引用变量。引用变量相当于为数组或者对象起的一个别名。
4. 成员变量中的实例对象是在堆内存的java对象内部存储。
5. 程序员不能直接操作堆内存,java中没有指针。
6. 给 引用.成员名 赋值,更改的是堆内存中student对象的数据
Java方法区内存
保存系统的类信息(字段,方法,常量池,静态域)
Java栈(存放基本数据类型和对象的引用)
1.java栈是一块线程私有的空间
2.局部变量表:用于保存函数的参数及局部变量
3.操作数栈:用于保存计算过程的中间结果,同时作为计算过程中的变量临时的存储空间。
4.方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈(例如main()) 。
5.局部变量在栈内存中存储。
举个栗子
public static void main (string[]args){
int i=10;
student s= new student();
}
1.new运算符的作用是创建对象,在JAM堆内存中开辟新的内存空间
2.栈内存(局部变量):存放s引用,保存对象的内存地址。
3.堆内存:new的对象在堆内存中存储,存放new student()对象。
4.方法去内存:在类加载的时候,class字节码代码片段被加载到内存空间中
特别注意:
仅供参考学习,转载请附上原文链接
分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请联系本人
谢谢配合
如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg