我们提供安全,免费的手游软件下载!
OOM是Out Of Memory的缩写,指的是内存溢出错误。在程序发生OOM时,要定位导致异常的代码是相当困难的,尤其是需要检查OOM发生的原因,了解各种OOM情况下可能出现的异常信息,并结合异常堆栈、heapDump文件、JVM分析工具和业务代码来判断具体是哪些代码导致的OOM。本文将测试并记录以下几种OOM情况。
在Idea上进行测试时,需要了解如何设置虚拟机参数(VM options)。
单击main方法的启动图标,选择修改运行配置
打开Add VM options,将JVM参数填在图示VM options处
Java堆是用来存储对象实例的,当不断创建对象并且保证对象不被GC回收时,当对象占用的内存达到了最大堆内存限制,无法再申请到新的内存空间时,就会导致OOM。在代码中,可以通过设置参数-XX:+HeapDumpOnOutOfMemoryError来打印OOM发生时的堆内存状态。执行结果如下:
通过String.intern()方法将字符串添加到常量池中。代码如下:
在JVM规范中,栈有虚拟机栈和本地方法栈之分。但在实际的实现中,HotSpot虚拟机是没有区分虚拟机栈和本地方法栈的。所以对于HotSpot来说,-Xoss(设置本地方法栈大小)参数是无效的,栈容量只能通过-Xss参数设置。测试代码如下:
方法区存放的是类的信息,所以在运行时不断创建类就行。代码如下:
通过-XX:MaxDirectMemorySize=10M参数设置能申请的DirectMemory大小。测试代码如下:
热门资讯