浅析Java堆,Java方法区内存,Java栈

浅析Java堆和Java栈

  • Java堆(存放对象本身)
  • 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

你可能感兴趣的:(Java入门篇)