文档章节

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虚拟机基础——2JVM运行时数据区

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

隔壁老李头
10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
今天
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部