六、MetaspaceJDK 1.8 之前会出现 Permgen space,该错误表示永久代(Permanent Generation)已用满,通常是因为加载的 class 数目太多或体积太大 。随着 1.8 中永久代的取消,就不会出现这种异常了 。
Metaspace 是方法区在 HotSpot 中的实现,它与永久代最大的区别在于,元空间并不在虚拟机内存中而是使用本地内存,但是本地内存也有打满的时候,所以也会有异常 。
6.1 写个 bug/** * JVM Options: -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m */public class MetaspaceOOMDemo { public static void main(String[] args) { while (true) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(MetaspaceOOMDemo.class); enhancer.setUseCache(false); enhancer.setCallback((MethodInterceptor) (o, method, objects, methodProxy) -> { //动态代理创建对象 return methodProxy.invokeSuper(o, objects); }); enhancer.create(); } }}
借助 Spring 的 GCLib 实现动态创建对象
Exception in thread "main" org.springframework.cglib.core.CodeGenerationException: java.lang.OutOfMemoryError-->Metaspace
6.2 解决方案方法区溢出也是一种常见的内存溢出异常,在经常运行时生成大量动态类的应用场景中,就应该特别关注这些类的回收情况 。这类场景除了上边的 GCLib 字节码增强和动态语言外,常见的还有,大量 JSP 或动态产生 JSP 文件的应用(远古时代的传统软件行业可能会有)、基于 OSGi 的应用(即使同一个类文件,被不同的加载器加载也会视为不同的类)等 。
方法区在 JDK8 中一般不太容易产生,HotSpot 提供了一些参数来设置元空间,可以起到预防作用
- -XX:MaxMetaspaceSize 设置元空间最大值,默认是 -1,表示不限制(还是要受本地内存大小限制的)
- -XX:MetaspaceSize 指定元空间的初始空间大小,以字节为单位,达到该值就会触发 GC 进行类型卸载,同时收集器会对该值进行调整
- -XX:MinMetaspaceFreeRatio 在 GC 之后控制最小的元空间剩余容量的百分比,可减少因元空间不足导致的垃圾收集频率,类似的还有 MaxMetaspaceFreeRatio
public static void main(String[] args) { int[] arr = new int[Integer.MAX_VALUE];}
这个比较简单,建个超级大数组就会出现 OOM,不多说了Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
JVM 限制了数组的最大长度,该错误表示程序请求创建的数组超过最大长度限制 。JVM 在为数组分配内存前,会检查要分配的数据结构在系统中是否可寻址,通常为 Integer.MAX_VALUE-2 。
此类问题比较罕见,通常需要检查代码,确认业务是否需要创建如此大的数组,是否可以拆分为多个块,分批执行 。
八、Out of swap space启动 Java 应用程序会分配有限的内存 。此限制是通过-Xmx和其他类似的启动参数指定的 。
在 JVM 请求的总内存大于可用物理内存的情况下,操作系统开始将内容从内存换出到硬盘驱动器 。
文章插图
该错误表示所有可用的虚拟内存已被耗尽 。虚拟内存(Virtual Memory)由物理内存(Physical Memory)和交换空间(Swap Space)两部分组成 。
这种错误没见过~~~
文章插图
九、Kill process or sacrifice child操作系统是建立在流程概念之上的 。这些进程由几个内核作业负责,其中一个名为“ Out of memory Killer”,它会在可用内存极低的情况下“杀死”(kill)某些进程 。OOM Killer 会对所有进程进行打分,然后将评分较低的进程“杀死”,具体的评分规则可以参考 Surviving the Linux OOM Killer 。
推荐阅读
- 产品风险评估报告怎么写 淘宝店铺风险分析
- 再见HTML ! 用纯Python就能写一个漂亮的网页
- 纯CSS实现轮播图
- 假设你的文案压根没人看
- 如何写出转化率高的爆款文案
- 写在最美的季节,送给径山的冬日散文诗
- 分析2.5万篇博客后,来看看后端程序员每天都在写什么
- 淘宝卖家给买家的好评怎么写 淘宝店铺好评怎么写
- 淘宝申诉说明范例 淘宝侵权申诉内容怎么写
- Ubuntu18.04部署django3.x