美文网首页程序员
简体字、冯|大话JVM内存模型

简体字、冯|大话JVM内存模型

作者: 简体字冯同学 | 来源:发表于2018-06-13 20:17 被阅读103次

    撸代码有段时间了,对虚拟机一直是一知半解。这段时间有点飘,就想着静下来夯实下基础。话不多说,看官随我往下。

    JVM内存模型.jpg

    图有点丑哈,画图是为了自己记起来方便,可以随时看。

    运行时数据区

    java虚拟机内存结构,包含方法区、堆、虚拟机栈、本地方法栈、程序计数器。
    这五大模块可划分为两部分线程共享区、线程独享区。

    1)线程共享区

    堆、方法区。被所有线程共享。

    存储几乎所有对象,GC活动的主要场所。
    几乎所有对象 :因为在jdk7开始加入了栈上分配(对于无逃逸对象尽可能的保存在虚拟机栈中),这样能及时回收这部分对象,并且为GC减负。分为:
    新生代:Eden、From Survior、To Survior;老年代。

    方法区
    存储类的元信息、静态变量、常量(常量池)等(主要存储class的组成信息包括成员类、方法等相关信息)。

    2)线程独享区

    虚拟机栈、本地方法栈、程序计数器

    虚拟机栈
    每个线程都会拥有自己的虚拟机栈。
    每个虚拟机栈中包含N多个栈帧(可以理解一个栈帧对应一个方法)。
    相应的栈帧的内容便是方法中对应的信息:局部变量表、操作数栈、动态链接、方法出口信息。
    本地方法栈
    功能、结构上与 虚拟机栈相似。Java虚拟机栈用来管理Java函数调用,本地方法栈用来管理本地方法的调用。
    程序计数器
    存储当前线程正在执行的字节码的行号指示器。用来控制分支、循环、跳转、异常处理、线程恢复等逻辑运算。

    是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError的内存区

    直接内存

    是一块额外的内存区,不包含在虚拟机内存之内,但是虚拟机可以操作该区域。具体看图中直接内存中文字部分。

    此文只作概要,具体细节关注后续。

    相关文章

      网友评论

        本文标题:简体字、冯|大话JVM内存模型

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