博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM-1 运行时数据区域
阅读量:5884 次
发布时间:2019-06-19

本文共 1226 字,大约阅读时间需要 4 分钟。

clipboard.png

虚拟机栈 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性能权威指南》

转载地址:http://erlix.baihongyu.com/

你可能感兴趣的文章
SSM框架——使用MyBatis Generator自动创建代码
查看>>
java数据库操作:JDBC的操作
查看>>
35佳以字体为核心的优秀网页设计作品
查看>>
基于OpenCV的形态学开源库 V0.2
查看>>
在ubuntu下安装和配置vsftpd
查看>>
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>
关于spring mybateis 定义resultType="java.util.HashMap"
查看>>
程序员怎么留住健康?
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>
Silverlight5 无法切换输入法,无法输入中文的原因及解决初探
查看>>
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>