java的内存解析

java内存解析

对象内存解析

内容选自尚硅谷
在这里插入图片描述
如图所示,先在栈空间创建地址,该地址直接指向堆空间的变量,而堆空间才是真正存放变量的地方,栈空间仅存放地址,变量名不同,在JVM看来,会分配不同地栈空间,来存放两个不同的变量名,但两个变量名存放的是相同的地址,指向堆空间的同一处地方.

对象数组的内存解析

在这里插入图片描述
可见,当创建了一个对象数组,数组名在栈空间中,但各个数组对象却在堆空间,虽然数组内仍然存放的是地址,但是这一次区别于创建单个对象的地方在于,单个对象的对象名在栈空间中,存放指向堆空间的地址,对象数组内元素的对象名,即stus[i],在堆空间中,也存放指向其余堆空间的地址.

JVM的内存结构

在这里插入图片描述
图示为JVM的内存结构,java源代码编译后(javac)会生成class后缀的字节码文件,.class文件一般存放在bin文件夹内,源在代码至于src文件夹内,决定某个变量在堆还是在栈,这一步是在运行(java)时决定的而不是在编译时决定的.编译完成后仅仅是硬盘内的某个文件,运行时才把字节码文件对应的类加载到内存当中,这才去分配内存空间.

JVM内存结构有极点需要注意的地方
1.虚拟机栈即为平时提到的栈结构;局部变量一般存放在栈结构中.
2.堆存放我们new出来的结构,比如数组,对象,甚至是对象数组.
ps:对象的属性加载到堆空间中
3.方法区存放类的方法.

猜你喜欢

转载自blog.csdn.net/Meloneating/article/details/112971855