美文网首页
每天一个知识点(5)--JVM-运行时数据区

每天一个知识点(5)--JVM-运行时数据区

作者: gigglesoso | 来源:发表于2021-05-16 11:24 被阅读0次

    在每天一个知识点(1)中介绍了虚拟机的组成上包含运行时数据区。
    Java虚拟机在执行Java程序的过程中,会将涉及的数据划分到不同的内存区域去管理,而这部分区域就是我们接下来要主要讲解的运行时数据区。
    运行时数据区在组成上又分为以下几部分:

    • 程序计数器:该区域占用内存很小,主要是存储当前线程执行的字节码行数,作用时当cpu在不同线程间切换时,保证切换回来后通过程序计数器接着之前继续运行。该区域是虚拟机中唯一没有规定oom的区域,该区域是线程私有的,一个线程会对应一个程序计数器。
    • 虚拟机栈:是线程私有内存,虚拟机栈描述的是java方法执行的内存模型。整个线程执行过程中,每个方法对应着虚拟机栈中的一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息,方法调用对应着一个栈帧的入栈,方法执行结束对应着一个栈帧的出栈。
    • 本地方法栈:和虚拟机栈功能上一致,区别是虚拟机栈为java方法服务,本地方法栈为native方法服务。
    • 堆:是线程共享的内存区域,创建的对象都存储在该区域,垃圾回收器作用在该区域。因此从GC的角度,该区域又分为老年代、年轻代,年轻代又分为Eden 区、From Survivor 区和 To Survivor 区。
    • 方法区:也被称为永久代,是线程共享的内存区域,主要是存储被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;该区域也有垃圾回收,回收目标是常量池和不再使用的类的卸载。

    相关文章

      网友评论

          本文标题:每天一个知识点(5)--JVM-运行时数据区

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