资讯专栏INFORMATION COLUMN

JVM-1 运行时数据区域

kaka / 1687人阅读

摘要:局部变量表所需内存空间在编译期确定,方法运行期间,不改变局部变量表大小。位和占用两个局部变量空间,其余类型占用一个空间。直接内存不是虚拟机运行时数据区的逻辑组成部分,中对象,作为直接内存的引用进行操作,减少和堆上来回复制数据。

虚拟机栈 JVM stack

线程私有

Java方法执行的内存模型,每个方法对应栈帧stack frame,方法调用过程,对应着入栈与出栈;

栈帧存储,局部变量表,操作数栈,动态链接,方法出口等。

局部变量表: Java 8种基本类型,reference类型,returnAddress类型。

局部变量表所需内存空间在编译期确定,方法运行期间,不改变局部变量表大小。

64位 long和double 占用两个 局部变量空间slot,其余类型占用一个空间。

错误:

stackoverflow error, 线程请求栈超过VM允许范围。

OutOfMemoryError, 栈动态扩展失败,无法申请到足够内存。

本地方法栈 NativeMethodStack

为Native方法服务

可以多种语言实现

StackOverflowError 和 OutOfMemoryError

堆 Heap

JVM 规范规定,Heap处于不连续的内存空间中,只要逻辑上连续即可。

线程共享,JVM启动时创建,对象实例和数组都在堆上分配。

多个线程私有的Heap区域, Thread Local Allocation Buffer (TLAB)

TLAB在Eden区,目的,减少线程共享。

分为年轻代 Young Generation 和 老年代 Old Generation,比例 1:2;

年轻代分为 :Eden区 和 两个Survivor区, 比例: 8:1:1;

年轻代GC采用复制算法

老年代GC采用 mark sweep 和 mark compact

控制参数: -Xms -Xmx

抛出 OutOfMemory Error

方法区 Method Area

Java 7 永久代 Permanent Generation;

JVM规范描述的Heap的一个逻辑部分;

线程共享;

存储VM 加载的类信息,常量,静态变量。 即时编译器编译后的代码等。

方法区主要回收 常量和无用的类。

Java 8 元空间 Metaspace 。

运行时常量池

Java8 移到Heap中,

class 文件中 constant pool table;

存放 各种字面量和符号引用,具备动态性,申请不到空间会抛出 OutOfMemoryError,

参数: -XX:MaxPermSize

String.intern() 可以将新的String常量放入池中。

直接内存 Direct Memory

不是虚拟机运行时数据区的逻辑组成部分,

NIO中 DirectByteBuffer对象, 作为直接内存的引用进行操作,减少Heap和Native堆上来回复制数据。

程序计数器 Program Counter Register

线程私有,

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

无OutOfMemoryError的区域。

参考资料:

《深入理解Java虚拟机》

《Java性能权威指南》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76375.html

相关文章

  • 一次apk打开报内存溢出错误,故写下内存溢出的各种原因和解决方法

    摘要:第六类内存溢出溢出关键字这类错误一般是由于地址空间不够而导致。原转载:https://blog.csdn.net/cp_panda_5/article/details/79613870   正文内容: 对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么多大多数在解决OOM的情况,于此,本文就只阐述这个内容,携带一些分析和理解和部分扩展内容,也就是JVM宕机中的一些问题,OK,下...

    littlelightss 评论0 收藏0
  • 学习JVM是如何从入门到放弃的?

    摘要:而字节码运行在之上,所以不用关心字节码是在哪个操作系统编译的,只要符合规范,那么,这个字节码文件就是可运行的。好处防止内存中出现多份同样的字节码安全性角度特别说明类加载器在成功加载某个类之后,会把得到的类的实例缓存起来。 前言 只有光头才能变强 JVM在准备面试的时候就有看了,一直没时间写笔记。现在到了一家公司实习,闲的时候就写写,刷刷JVM博客,刷刷电子书。 学习JVM的目的也很简单...

    Joyven 评论0 收藏0
  • 同样是做后端的,为什么你同学年薪80万,你20多万?

    摘要:然而偶尔的一次聚会,你听说和自己一起出道的同学早已经年薪万,而自己却囊中羞涩。这个时候,你可能会怀疑自己的能力,也痛恨为什么当初自己没有好好复习。 作为一个 Java 程序员,我们深知水平的深浅决定你的收入高低,月工资下到七八千,上到十几万都是很正常的事情。许多人的现状是平时总是陷在业务开发...

    邹强 评论0 收藏0
  • 麻了,都是科班出身的,学弟月薪却是我的3倍。

    摘要:可现在五年过去了,他想跳槽却鲜有人问津。最可气的是比他晚一年毕业的学弟,勤勤恳恳在一家中型互联网企业干了年,现在已经跳槽到了阿里,月薪是我这个同学的倍。 我有个同学大学毕业,因为却少工作经验,又不愿意去正经的互联网企业做实习生,他嫌工资太低,于是进了家外包公司,那时候感觉待遇还可以。可现在五...

    wangzy2019 评论0 收藏0
  • 作为一名Java程序员,因为偷偷接私活被...

    摘要:接私活对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。 接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少...

    Aomine 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<