JVM内存模型

各种溢出

StackOverflowError:无结束的递归操作引起,发生在JVM虚拟机栈。
OutOfMemoryError:堆,JVM虚拟机栈都有可能发生,其中堆最常见.

内存模型图

图片来源网络

在这里插入图片描述

  • 虚拟机栈:为虚拟机执行Java方法(也就是字节码)服务

  • 本地方法栈:为虚拟机使用到的Native方法服务;内存不足时,本地方法栈会拋出native heap OutOfMemory
    本地方法例子:System.currentTimeMillis()

  • Java堆(Java Heap):存储实例对象
    1、 设置堆的内存空间:-Xms256M 最小堆容量;-Xmx1024M 最大堆容量
    2、新生代:1个Eden区+ 2个Survivor区;-XX:MaxTenuringThreshold 配置计数器的值到达某个阈值的时 候,对象从新生代晋升至老年代;
    老年代:
    3、XX:+HeapDumpOnOutOfMemoryError 让JVM遇到OOM异常时能输出堆内信息
    4、垃圾回收主要发生地

  • 方法区(Non-Heap):存放已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
    1、对方法区的内存回收的主要目标是:对常量池的回收和对类型的卸载
    2、允许固定大小,也允许可扩展的大小,还允许不实现垃圾回收
    3、逻辑上属于堆
    4、也会抛出OutOfMemoryError
    5、编译时常量池,被加载后放入方法区的运行时常量池中;
    int age = 21;//age是一个变量,可以被赋值;21就是一个字面值常量,不能被赋值;
    int final pai = 3.14;//pai就是一个符号常量,一旦被赋值之后就不能被修改

  • Metaspace (元空间)(Java 1.8):类相关的元数据信息,其中字符串常量移至堆内存
    1、在本地内存中分配
    2、内存不足时,会抛出java.lang.OutOfMemoryError: PermGen space
    3、1.8之前的版本需要配置-XX:MaxPermSize= l280m,之后版本不需要配置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值