Jvm内存区域 - 《深入理解Java虚拟机》ch02笔记

一、JVM运行时内存区

1. 程序计数器

Java虚拟机规范唯一不会发生OOM的区域


2. Java虚拟机栈

提供Java方法执行的内存模型,就是“栈帧”,方法的执行就是栈帧在虚拟机栈中的入栈与出栈过程。此区域是线程私有的,直白的说就是每个线程有自己的虚拟机栈,互不影响。可能会抛出StackOverflowError或OutOfMemoryError。


本地方法栈

和Java虚拟机栈几乎完全相同的功能,只是用于执行非Java的native代码,Java虚拟机规范没有规定实现方式,所以对于HotSpot虚拟机来说,Java虚拟机栈和本地方法栈是同一块区域。


内存配置:Java虚拟机栈和本地方法栈分别通过-Xss和-Xoss配置


3. Java堆

是JVM内存管理最大的一块,是所有线程共享的,且可扩展(-Xms和-Xmx控制)。对象在此区域分配,为了GC,一般再次划分为老年代与新生代。


内存配置:-Xms和-Xmx


4. 方法区

方法区和Java堆一样,是线程共享的。用于存储,类信息、常量、静态变量等,也需要进行GC。在HotSpot虚拟机来说,使用永久代方式实现内存回收,这样就能够按照Java堆的方式回收方法区内存。但是这种方式会被渐渐取代,JEP-122,而且在JDK1.7中的JVM中,已经将常量池从此区域移除。


运行时常量池

是方法区的一部分,用于存储Class中的常量池信息,是动态的,不一定在编译时产生,运行期间也可能将新的常量放入到常量池中,如:调用String类的intern()方法


内存配置:-XX:PermSize和-XX:MaxPermSize


二、直接内存

JDK1.4 中NIO(New Input/Output)可以使用Native函数库分配额外的内存,这样在某些场景能显著提高性能。分配内存时需要考虑此区域的内存需求,而且也可能出现OOM。


内存配置:-XX:MaxDirectMemorySize指定,不指定默认和Java堆最大值(-Xmx指定)相同



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值