JVM内存区域

作者: littlefogcat | 来源:发表于2020-06-11 00:52 被阅读0次

JVM规范的内存区域:

五大区域
image.png

JVM Specification中规定的内存区域包括:程序计数器、Java栈、本地方法栈、方法区、堆。

1. 程序计数器

  • 记录了当前线程运行的字节码的行数。
  • 线程私有。

2. 栈

  • 线程私有,生命周期和线程相同。
  • 栈帧:入栈和出栈的基本单元。一个栈帧对应一个方法的调用,并随着方法的结束而消亡。它是一种数据结构,其中保存了方法运行的局部变量、操作数栈、动态连接、方法的返回地址。
  • 当线程调用一个Java方法,JVM会创建一个栈帧,并压入到栈中。当方法运行完毕,则将栈帧从栈中弹出。

3. 本地方法栈

  • 线程私有。
  • 和Java方法不同,调用native方法时,不会在栈中压入栈帧,而是通过动态连接直接调用本地方法。

4. 堆

  • 所有线程共享。
  • 所有对象实例和数组存放地。
  • GC。

5. 方法区

  • 线程共享。
  • 类信息、常量、静态变量、编译后代码。
  • JVM规范中的一个逻辑分类,在实际HotspotJVM中,根据JDK版本不同,实现也不尽相同。JDK6及以前对应永久代,JDK7中将常量和静态变量(移到了Class对象中)从永久代移到了堆中,而JDK8则彻底删除了永久代,增加了元空间。自此方法区虽然还是一个逻辑分区,但是实际实现已经是四分五裂。

相关文章

网友评论

    本文标题:JVM内存区域

    本文链接:https://www.haomeiwen.com/subject/idsozhtx.html