JVM - OOM

本文探讨了Java中常见的几种Out Of Memory (OOM)问题,包括堆空间不足、直接内存溢出、线程过多导致的内存消耗以及GC效率低下。针对这些问题,文章提供了相应的处理方式,如调整JVM参数、优化内存分配和监控GC行为,同时强调了内存泄露对引发OOM的影响,并预告了内存泄露分析的后续内容。
摘要由CSDN通过智能技术生成

既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。

OOM(内存溢出)是一个让人很头疼的问题,出现 OOM 的问题有很多,下面就 OOM 可能出现的原因进行介绍。

1、堆空间太小

用以下参数启动 jvm
-Xms20m -Xmx20m

public class OOMTest {
   
    public static void main(String[] args) {
   
        Byte[] bs = new Byte[1024 * 1024 * 30];
    }
}

最大堆、初始化堆均为 20m,程序创建了 30m 的数组,直接 OOM。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
1.1、处理方式
  1. 调大-Xmx 的值
  2. 通过内存分析工具,找出占用内存较多的对象

2、直接内存溢出

直接内存属于堆外内存,是直接向操作系统申请内存空间。
直接内存申请速度一般小于堆内存的申请速度,但是访问速度会比堆内存的访问速度快。
直接内存并没有完全的归 GC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.何为内存模块 (Memory Module)? 内存模块是指一个印刷电路板表面上有镶嵌数个记忆体芯片chips,而这内存芯片通常是DRAM芯片,但近来系统设计也有使用快取隐藏式芯片镶嵌在内存模块上内存模块是安装在PC 的主机板上的专用插槽(Slot)上镶嵌在Module上DRAM芯片(chips)的数量和个别芯片(chips)的容量,是决定内存模块的设计的主要因素。 2.什么是Parity? 早先所使用的存储器数据检错方式是Parity Check,其是以每8比特增加1比特的方式进行检错。因此若是具备Parity的存储器,其数据宽度将比非parity的存储器为大。不过若以 Parity的检错方式看,其多出的奇偶位事实上只用于分辨奇数或偶数个比特数。这种方式仅能得知是某一位发生错误,并无法确定是哪一个位置发生错误,而且无法运用在双数位的检错上。 3.什么是ECC? ECC是另一种更为进步的存储器数据检错机制。其工作的方式与Parity不同,并不是采用单一比特的方式来进行检错,而是采用数据块(block)概念与复杂的演算方法来修正数据。因此不仅能检测多位比特错误,还能进行修正单一比特的错误。 4.SPD的作用是什么? 为Serial Presence Detect 的缩写,它是烧录在EEPROM内的码,以往开机时BIOS必须侦测memory,但有了SPD就不必再去作侦测的动作,而由BIOS直接读取 SPD取得内存的相关资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值