文档章节

jvm运行时数据区

汪林
 汪林
发布于 2014/06/16 15:47
字数 810
阅读 95
收藏 5

    sun jdk遵循JVM规范,它将内存空间划分为方法区,堆,本地方法栈,pc寄存器,jvm方法栈等5个部分。

方法区

    1.方法区中主要存放加载类的信息,比如类的名称,修饰符,类中的静态变量,final类型的常量,字段信息,方法信息等。

    2.方法区是线程共享的。

    3.方法区对应内存中的Permanet Generation,又称为持久代,默认最小为16M,最大为64M,可以通过-XX:PermSize 及 --XX:MaxPermSize来指定大小。

    1.堆一般都用来存放对象的实例,比如Person p = new Person();后面的new person()这个对象实例就会在堆内存里分配空间。在32位操作系统上堆内存最大为2G,而在64位操作系统上没有限制。

    2.堆内存也是线程共享的。

    3.堆内存可以通过-Xms和-Xmx来指定,前者为初始化堆内存的大小,后者为最大堆内存的大小。默认情况下初始化堆内存-Xms为物理内存的1/64但小于1G,最大堆内存-Xmx为物理内存的的1/4但小于1G,当堆内存空闲空间小于40%时,jvm则会把堆内存增大到-Xmx配置的参数,而当堆内存空闲空间大于70%时,jvm则会把堆内存减到-Xms配置的参数,这个百分比可以通过-XX:MaxHeepFreeRatio=来指定。在现实业务场景中,为了避免堆内存频繁的调整大小,通常将-Xms和-Xmx的值设置为一样。

    4.堆内存分为新生代和旧生代,其中,新生代分为一个Eden Space区和两个大小相同的Survivor Space区,可以通过-Xmn来指定新生代的大小,大部分的新建的对象都会在新生代中分配内存,但是如果新建的对象特别大的话,则可以直接让新建的大对象在旧生代中分配内存,可以通过-XX:PretenureSizeThreshold(单位为字节)设置的参数来决定究竟都多大的对象才算是大对象,另外旧生代还存放新生代中多次垃圾回收后仍然存活的对象。

本地方法栈

    1.适用于供 native方法使用的内存空间。

    2.线程私有。

jvm方法栈

    1.jvm方法栈里面存放了很多栈帧,栈帧由局部变量数组,操作数栈,常量引用组成。当类中的一个方法从被调用到调用完毕都完成了一次压栈到弹栈的过程。

    2.线程私有。

     3.jvm方法栈空间不足的时候则会抛出StackOverflowError,sun jdk中我们可以通过-Xss来指定jvm栈的大小。

pc计数器

    1.用于记录每个线程执行到哪个地方了,比如A线程执行到某一个方法的时候,cpu切换到了B线程,一会之后又切回A线程,切回之后我要知道我上次执行到哪里了啊,这时,就可以去找pc计数器,它那里有记录。

    2.线程私有


© 著作权归作者所有

共有 人打赏支持
汪林
粉丝 7
博文 19
码字总数 8847
作品 0
海淀
程序员
私信 提问
加载中

评论(1)

路小磊
路小磊
赞~
JVM 运行时数据区简介及堆与栈的区别

理解JVM运行时的数据区是Java编程中的进阶部分。我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机制,...

大数据之路
2015/08/02
0
1
JVM的方法区和永久带是什么关系?

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

若鱼1919
07/26
0
0
001. 深入JVM学习—Java运行流程

Java运行流程图 2. Java运行时数据区 3. Java虚拟机栈 栈内存是线程私有的,其生命周期和线程相同; 虚拟机栈描述的是Java方法执行的内存模型:执行一个方法时会产生一个栈帧随后将其保存到栈...

影狼
06/22
0
0
Java虚拟机运行时数据区结构

本文部分参考自《Java虚拟机规范(Java SE 7版)》的中译本和周志明的《深入理解Java虚拟机》,另加个人理解。原书对Java虚拟机运行时数据区描述只有6页,同时参考其他网络网资料,个人能力所...

foodon
2014/12/09
0
4
Java虚拟机基础——2JVM运行时数据区

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

隔壁老李头
10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS账户如何工作,我们如何获取eos账号?

EOS账户的工作方式是什么?帐户是存储在区块链中的人类可读名称。它可以由个人或一群人拥有,具体的取决于权限配置。需要一个帐户来将交易转移或推送到区块链。——EOSIO Wiki EOS账户如何工...

笔阁
11分钟前
0
0
iOS面试之@property

https://juejin.im/post/5c105c7ce51d4562d138086f @property介绍 相信做过iOS开发的同学都使用过@property,@property翻译过来是属性。在定义一个类时,常常会有多个@property,有了@proper...

壹峰
12分钟前
0
0
[springBoot系列]--springBoot注解大全

一、注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加......

Jack088
26分钟前
7
0
tomcat编译超过64k大小的jsp文件报错原因

  今天遇到一个问题,首先是在tomcat中间件上跑的web项目,一个jsp文件,因为代码行数实在是太多了,更新了几个版本之后编译报错了,页面打开都是报500的错误,500的报错,知道http协议返回...

SEOwhywhy
48分钟前
5
0
flutter http 请求客户端

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0...

渣渣曦
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部