文档章节

jvm运行时数据区

汪林
 汪林
发布于 2014/06/16 15:47
字数 810
阅读 94
收藏 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
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
JVM的方法区和永久带是什么关系?

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

若鱼1919
07/26
0
0
《深入理解Java虚拟机》之Java虚拟机内存结构(1)

这个是很重要的一个基础认识。 java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区。 Java虚拟机栈,本地方法栈和程...

lixiyuan
2014/04/10
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
19分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部