JVM 内存介绍

和jvm(Java Virtual Machine)相关的内存,一般分为栈区、堆区、方法区(永久区)等。

jvm内存.png

一、栈区

栈区是程序运行时,一个线程的私有空间;

  • 局部变量区:存放该线程运行时的局部变量
  • 操作数栈:局部变量数据声明先进入操作数栈,再压如入局部变量表,需要时再从局部变量表取出
  • 动态链接:全局变量被方法引用时,为了 动态连接使用
  • 方法出口:
    1. 正常退出,执行引擎遇到方法返回的字节码,将返回值传递给调用者
    2. 异常退出,遇到Exception,并且方法未捕捉异常,那么不会有任何返回值。

二、堆区

堆区是和java应用程序关系最密切的内存空间,几乎所有的对象和数组数据都存在其中。

  • 从内存回收角度,Java堆被分为新生代和老年代;这样划分的好处是为了更快的回收内存;
    新生代分为eden区、from和to区;
    对大多数情况下,对象首先分配到eden区,在一次新生代回收后(gc),如果对象还存活,就会进入from或者to区;之后每经过一次新生代回收,如果对象还存活则它的年龄就增加1,当对象达到一定的年龄(默认15)后,则进入老年代

  • 从内存分配角度,Java堆可以划分出线程私有的分配缓冲区TLAB(Thread Local Allocation Buffer);这样划分的好处是为了更快的分配内存。

三、方法区

方法区主要存放的是已被虚拟机加载的类信息、常量、静态变量、编译器编译后的代码等数据。GC在该区域出现的比较少;

堆、方法区是线程共享的,在Java虚拟机中只有一个堆、一个方法栈。并在JVM启动的时候就创建,JVM停止才销毁。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    DeepThinkAI2026阅读 2,818评论 2赞 26
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 43,052评论 11赞 349
  • 内存溢出和内存泄漏的区别 内存溢出:out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,...
    Aimerwhy阅读 837评论 0赞 1
  • 阳光下的泡沫, 是童年的回忆。 你一旦触碰, 它就裂了! 夏至未至时, 你的一个不经意, 唤醒了, 一场恰似完美的...
    和煦雪阅读 297评论 0赞 2
  • 崔竣请刘亚海查孙悦洋人口资料的时候,刘亚海并没有多问,对于这种有违警队纪律的事情,没人会轻易开口。崔竣只给了他名字...
    良仔lz阅读 201评论 0赞 0

友情链接更多精彩内容