码迷,mamicode.com
首页 > 其他好文 > 详细

第二章:本机直接内存异常

时间:2019-03-29 01:11:55      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:申请   white   mem   hit   默认   dir   memory   文件中   直接   

DirectMemory容量可以同-XX:MaxDirectMemorySize指定,如果不指定,默认为Java堆最大值相同。
可以同通过反射获得Unsafe实例进行内存分配进行抛出异常。虽然可以使用DirectMemory分配内存也可以抛出内存异常,但是它抛出异常时并没有真正向操作系统申请分配内存,而是通过计算得知内存无法分配,于是手动抛出异常,真正申请分配内存的方法时unsafe.allocateMemory().
public class Test1 {
private static final int _1M = 1024 * 1024;
public static void main(final String[] args) {
Field field = Unsafe.class.getDeclaredFields()[0];
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
unsafe.allocateMemory(_1M)
}
}
 
DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看到明显的异常。如果发现OOM之后Dump文件很小,而程序中又直接或者间接使用了Nio,那就可以考虑检测一下是不是这方面的原因了。

第二章:本机直接内存异常

标签:申请   white   mem   hit   默认   dir   memory   文件中   直接   

原文地址:https://www.cnblogs.com/use-D/p/10618765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!