美文网首页
JVM 内存介绍

JVM 内存介绍

作者: 真海ice | 来源:发表于2018-02-27 17:14 被阅读0次

    和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停止才销毁。

    相关文章

      网友评论

          本文标题:JVM 内存介绍

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