java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)

java中栈内存与堆内存(JVM内存模型)

Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中、哪些存储在栈中。内存中的堆和栈到底是什么 详细讲述了程序在内存中的模型,从可执行文件(ELF)格式的编译介绍了堆和栈,主要是C/C++语言,讲的比较清楚,借鉴性比较强。

其实,对于java语言,编译后的文件是一个中间字节代码,操作系统不能直接执行,需要jvm解释执行。与C/C++对应起来,理解java的栈内存和堆内存,应该从jvm的内存模型入手(参考深入理解JVM-内存模型(jmm)和GC)。

一、Java内存模型

java程序内存的分配是在JVM虚拟机内存分配机制下完成。

java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

根据java虚拟机规范,java虚拟机管理的内存将分为下面五大区域。

076dca0a4387afd385e508422e2e4a37.png

1.程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器

你可能感兴趣的:(java中栈和堆都存哪些东西)