java 压缩 内存溢出_Java生产环境调优—模拟一次内存溢出

当我们在工作中,遇到线上问题:内存溢出,如何解决呢?除了物理扩大内存以外,还可以从软件角度去定位问题之所在。

补充一下基础知识(这里以jdk8为例)

Java的内存模型,也可以称之为:运行时数据区(规范)

运行时数据区分为:堆、程序计数器、方法区、虚拟机栈、本地方法栈。

Java内存结构(实现)分为:堆区和非堆区。堆区分为Young区和Old区。非堆区即Metaspace,可分为CCS(压缩类空间)和CodeCache(native code存放的内存空间),当然这两块空间不一定存在,要看是否添加了相应的配置。Young区又分为Eden区和Surviver区,对象分配初期都在Eden区上,随着年龄的增加,进入Survivor区和Old区。Surviver区又分为S0和S1两块。S0和S1两块区域是等大的,不同时使用。对象在这两块区域上不断交换,每换一次岁数加一。Eden区和Survivor区的大小比例默认为8:2,因为很多对象的存活时间非常短,用朝生夕死来比喻刚好恰当,所以Eden区要大一些。

好了,我们通过代码来实机演示一下内存溢出的定位过程。

1、环境介绍:

springboot 2.1.3.RELEASE,添加Web依赖、IDEA开发工具、MemoryAnalyzerTool工具

2、实现思路:这里我们通过指定内存大小,然后不断的new对象到集合中,最终实现内存溢出的效果。

3、代码截图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值