美文网首页
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方法指令

最后,欢迎指正交流

相关文章

  • Java进阶 - JVM 内存管理机制探秘

    内容概述 JVM 运行时数据区概述 JVM 对象分配、布局与访问过程 GC机制与内存分配策略 主要以 HotSpo...

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • JVM之内存结构

    JVM总体概述 JVM总体上是由类装载子系统(ClassLoader)、运行时数据区、执行引擎、内存回收这四个部分...

  • JVM

    JVM总体概述 JVM总体上是由类装载子系统(ClassLoader)、运行时数据区、执行引擎、内存回收这四个部分...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • jvm(六)堆

    概述 一个进程对应一个jvm实例,一个jvm实例对应一个运行时数据区,只存在一个堆内存。 java堆区是在jvm启...

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

  • jvm内存模型及GC记录

    在jvm中有一块非常重要的区域,就是jvm运行时数据区。今天对该区域做下总结和记录: 在讨论jvm运行时数据区前,...

网友评论

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

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