运行时数据区(runtime data area)

jvm定义了几个运行时数据区,这些运行时数据区存储的数据,供开发者的应用或者jvm本身使用。按线程共享与否可以分为线程间共享和线程间独立。

线程间独立的运行时数据区

线程间独立的区域随线程的创建而创建,随线程销毁而销毁。线程独立的区域内存储的数据只有该线程能够访问,对其他线程是不可见的。

程序计数器寄存器(pc Register)

每个线程都有自己的pc(程序计数器)register(寄存器)。在任意时点上,jvm中的线程只能执行一个类的一个方法,称为该线程的当前方法。程序计数器持有其所属线程的当前方法的JVM指令地址。

虚拟机栈(JVM Stack)

每个线程都有自己的虚拟机栈,其结构和通常所说的栈结构基本一样。虚拟机栈存储局部变量、计算结果、参与方法的调用和返回。虚拟机栈的存储单元是栈帧(frames)。虚拟机栈的基本操作就是栈帧的入栈和出栈,jvm规范中不要求其内存空间必须是连续的空间。 
虚拟机栈涉及下面两个异常条件: 
+ 如果线程需要的栈空间超过了允许的最大值(比如指定了栈的最大值),将抛出 StackOverflowError 
+ 如果需要扩充虚拟机栈,或者初始化虚拟机栈时,没有更多内存可用,将抛出 OutOfMemoryError

本地方方栈(native method stack)

每个线程都有自己的本地方法栈,主要是给(native)本地方法使用。 
本地方方栈的异常条件和虚拟机栈相同

线程间共享的内存区域

堆(heap)

堆是在虚拟机启动的时候创建的,我们通过new 操作符创建的所有对象都存在堆中,堆中的数据对所有线程都是可见的。堆也是我们常说的垃圾收集器的主要管理对象。 
堆涉及的异常条件: 
+ 当需要创建新的对象而堆内存不足时,将抛出OutOfMemoryError

方法区(method area)

方法区和堆一样都是在jvm启动时创建的,其数据对所有线程都是可见的。 
方法去存储数据: 
+ 每个类的源信息(meta data of class),比如类名、父类、实现的接口、访问修饰符等等 
+ 运行时常量池(runtime constant pool) 
+ 成员变量的信息 
+ 方法的信息 
+ 方法和构造方法的字节码 
+ 类、实例、接口初始化专用方法 
jvm规范对于方法区没有太多硬性的规定。逻辑上方法区是堆的一部分,但是jvm规范不强制要求方法区的实现位置(可以在堆内也可以在堆外),也不强制要求对方法区进行垃圾回收和内存整理/压缩(compact)以及字节码的管理策略。方法区使用的内存空间也可以不是连续的内存空间。

运行时常量池(runtime constant pool)

每个类或接口的运行时常量池在该类或接口由JVM创建时创建,其数据存储在方法区中。 
运行时常量池是方法区中、甚至是整个运行时数据区中最重要的部分,因此通常都单独介绍 
运行时常量池是每个类或者接口在编译后的字节码文件中的常量池表(constant_pool table)的运行时表述,作用类似于有些语言的符号表(symbol table)。 
包含内容: 
+ 编译时可以确定的方法中数值的字面值 
+ 只有在运行时才能确定的成员变量的引用 
+ 其它 
运行时常量池的异常条件: 
如果创建类(class)或接口时,没有足够的内存创建运行时常量池,将抛出OutOfMemoryError

jvm内存模型(运行时数据区)的更多相关文章

  1. 1、JVM 内存模型+运行时数据区+JVM参数

    JMM(内存模型)  1.’主内存+每个线程有自己的内存 JVM运行时数据区 包含:1.程序计算器(每个线程自带):2.JAVA-STACK(每个线程自带):3.本地方法stack:4.堆:5.方法区 ...

  2. JVM内存结构——运行时数据区

    在Java虚拟机规范中将Java运行时数据划分为6种,分别为: PC寄存器(程序计数器) Java栈 堆 方法区 运行时常量池 本地方法栈 一.PC寄存器(程序计数器) PC寄存器(Program C ...

  3. JVM 内存区域 (运行时数据区域)

    JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...

  4. JVM学习笔记-运行时数据区

    不同于C,C++程序,Java程序的内存管理工作由Java虚拟机(JVM)接管,这减低了java程序员的负担,但如果出现内存泄露与溢出问题如报OutOfMemory,StackOverFlow异常错误 ...

  5. JVM三部曲之运行时数据区 (第一部)

    在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 1.运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量( ...

  6. java内存区域----运行时数据区

    Java虚拟机的内存区域也叫做java运行时数据区,共分为五个部分:程序计数器,方法区,本地方法栈,虚拟机栈和堆.方法区和堆是线程之间所共有的,程序计数器,本地方法栈,虚拟机栈是线程私有的.其中虚拟机 ...

  7. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  8. JVM之Java运行时数据区(线程隔离区)

    来源 JVM会在会在执行Java程序过程中把所管理的内存划分为若干区域,主要包括程序计数器(Program Counter Register),虚拟机栈(VM Stack),本地方法栈(Native ...

  9. JVM之Java运行时数据区(线程共享区)

    JVM运行时区域各线程共享的区域包括堆区和方法区. 堆区 堆区最最主要的功能是存储对象实例[上篇也提到过],因此Java垃圾回收的主要战场就是在堆区,因此也有称为GC堆区.如果堆区的内存不够会出现Ou ...

随机推荐

  1. Linux系统(X32)安装Oracle11g完整安装图文教程另附基本操作

    一.修改操作系统核心参数 在Root用户下执行以下步骤: )修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/limi ...

  2. 四则运算《《《《SQL出题

    设计思路: 这次要用数据库存储题目,我想到的是用SQL server数据库,用dataGridView控件读取数据. 具体实现: DBCon.cs 1 using System; 2 using Sy ...

  3. beat冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  4. golang type

    参考链接 https://blog.csdn.net/tzs919/article/details/53571632 type是golang中非常重要的关键字,常见的就是定义结构体,但是其功能远不止是 ...

  5. WPF自学入门(十二)WPF MVVM模式提取函数

    我们平时在写代码时为了不重复写代码,会进行复制代码或者写通用方法.今天我们就来把上传做的函数提取成为通用的方法调用.把上次写的函数提取为两个主要的文件:ObserableObject和RelayCom ...

  6. datatables 排序 如何禁止

    $.extend( true, $.fn.dataTable.defaults, {     "searching": false,     "ordering" ...

  7. 软工网络15团队作业8——Beta阶段项目总结

    1.新成员 姓名 风格 擅长 角色 宣言 李家俊 乱写 都有所涉猎 测试 混就完事了 丁树乐 潇洒 与人沟通 测试 与其临渊羡鱼,不如退而结网 2.是否需要更换团队的PM 不需要 3.下一阶段需要改进 ...

  8. vue中的数据双向绑定

    学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...

  9. JS单例模式在工作中的使用

    为了尽可能的减少全局变量的污染,在写js的时候可以采用单例模式,形式如下: 比如有一个js叫demo.js,那么我们可以在js里这样写: var demo = {} 这样做的目的是将整个js当成一个对 ...

  10. JavaWeb基础【1】—— Tomcat

    此笔记是学习黑马程序员JavaWeb系列视频的课堂笔记. 感谢黑马程序员. 一.Tomcat概述 Tomcat服务器由Apache提供,开源免费.由于Sun和其他公司参与到了Tomcat的开发中,所以 ...