文档章节

【Java系统监控与优化系统系列】——1.3.3.1 运行时数据区

Albert-Liu
 Albert-Liu
发布于 2015/01/19 16:22
字数 1158
阅读 57
收藏 0

(1)概述

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁 

(2)运行时数据区包含的内容

程序计数器

概述

    当前线程所执行字节码的行号指示器

     执行Java方法时表示字节码指令的地址

     执行Native方法时,值为空

规定的异常

     Java虚拟机中唯一没有规定OutOfMemoryError情况的区域

是否线程私有

     线程私有

方法区

概述

    方法区中的数据主要对应于“类加载”过程中“加载”阶段:“将这个字节流所代表的静态存储结构转化为“方法区”的运行时数据结构”这个步骤

     可以处于物理上不连续的内存中,只要逻辑上连接即可,在实现时,既可实现成固定大小,也可以是扩展的

     在程序中通过Class对象的getName、isInterface等方法获取的信息,从来源于该区域

     该区域内存回收的目标主要是针对常量池回收和对类型卸载

内容

   类信息

    运行时常量池

        存储内容

             Class文件“常量池”中的信息,包括各种字面量和符号引用

             类加载的“解析阶段”由符号引用翻译出来的的直接引用

         特点

             运行时常量池相对于Class文件常量池的不同是具备动态性,也就是运行期也可能将新的常量放入池中,用的多的是String类的inter()方法

    静态变量

    即时编译器编译后的代码

是否线程私有

    所有线程共享

规定的异常

    OutOfMemmoryError

        如果堆中没有内存完成实例分配,并且堆也无法再扩展


运行时栈结构(虚拟机栈)

    概述

        每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程

        线程私有,生命周期与线程相同

        在编译程序代码时,栈帧中需要多大局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性之中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体的虚拟机实现

    栈桢内容

    是否线程私有

    规定的异常



本地方法栈

概述

与虚拟机栈的作用类似,区别在于为使用到的Native方法服务

虚拟机规范没有对本地方法栈的实现作强制规定,不同虚拟机可自由实现

Sun HotSpot直接把本地方法栈和虚拟机栈合二为一

规定的异常

StackOverflowError

线程请求的栈深度大于虚拟机所允许的深度

OutOfMemmoryError

如果虚拟机可以动态扩展,并且扩展时无法申请到足够的内存

概述

存入对象实例,几乎所有的对象实例都在这里分配内存

Java虚拟机所管理内存中最大的一块,虚拟机启动时创建

Java堆可以处于物理上不连续的内存中,只要逻辑上连接即可

在实现时,既可实现成固定大小,也可以是扩展的,主流虚拟机都按可扩展来实现(通过-Xmx和-Xms控制)

堆内容

从内存回收角度看

新生代(Eden)

老年代(Old)

逃逸区

S0

S1

从内存分配角度看

线程共享的Java堆中可能划分出多个线程私有的分配缓存区

是否线程私有

所有线程共享

规定的异常

OutOfMemmoryError

如果堆中没有内存完成实例分配,并且堆也无法再扩展


© 著作权归作者所有

Albert-Liu
粉丝 7
博文 19
码字总数 12128
作品 0
深圳
架构师
私信 提问
JVM规范系列第2章:Java虚拟机结构

本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现。 记住:JVM规范是一种高度抽象行为的描述,...

陈树义
2018/12/19
0
0
Java虚拟机基础——2JVM运行时数据区

Java虚拟机整体篇幅如下: Java虚拟机基础——1Java的内存模型 Java虚拟机基础——2JVM运行时数据区 Java虚拟机基础——3类加载机制 Java虚拟机基础——4内存回收机制 本篇文章主要讲解JVM运...

隔壁老李头
2018/10/03
0
0
【JVM系列】一步步解析java执行内幕

对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式。在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产...

java菜分享
03/02
21
0
JVM(二)Java虚拟机组成详解

导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心”,想忘记都难。 Java虚拟机(Java Virtual Machine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我们将具体...

王磊的博客
01/14
165
0
JVM的方法区和永久带是什么关系?

群里面有小伙伴问到这个问题,说在网上看了很多文章,但是还是没弄明白这俩是啥关系,下面我们就来详细的解释一下: 什么是方法区? 方法区(Method Area)是jvm规范里面的运行时数据区的一个...

若鱼1919
2018/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部