美文网首页
JVM运行时数据区概述

JVM运行时数据区概述

作者: 我是匿名 | 来源:发表于2019-06-10 20:15 被阅读0次
    JVM内存结构 (1).jpg

    组件说明:

    类装载子系统

    负责把编译好的class文件加载到内存,即是运行时数据区

    运行时数据区

    堆内存:

    所有线程共享,虚拟机启动时创建,用于存放对象实例,几乎所有的对象(包含常量池)都在堆上分配内存,当对象无法再该空间申请到内存时将抛出OutOfMemoryError异常。同时也是垃圾收集器管理的主要区域。可通过 -Xmx –Xms 参数来分别指定最大堆和最小堆

    方法区:

    所有线程共享,类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定义的方法的信息都保存在该区域,静态变量+常量+类信息(构造方法/接口定义)+运行时常量池都存在方法区中,虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。

    java栈:

    线程私有,即是每个线程都有自己的方法栈,java包含若干栈帧,一个栈帧对应线程调用的一个方法,根据调用顺序先后入栈。栈帧包含局部变量表,操作数栈,动态链接,方法出口等信息。当一个被调用方法执行完后,通过方法出口返回给调用方,然后该栈帧弹出Java栈,并销毁局部变量表等内容,释放空间。

    程序计数器:

    线程私有,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。

    本地方法栈:

    线程私有,登记native方法,在Execution Engine执行时加载本地方法库

    执行引擎

    负责执行Java指令
    垃圾收集器:
    负责监控运行数据区,收集无用对象,主要收集堆内存和方法区无用对象。

    示例程序执行流程

    1.main方法栈帧入栈,调用math方法,math方法栈帧入栈
    2.执行math方法指令
    3.执行结果返回给main方法
    4.继续执行main方法指令

    最后,欢迎指正交流

    相关文章

      网友评论

          本文标题:JVM运行时数据区概述

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