首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java运用java heap外(堆外)内存导致的内存泄露

2012-09-15 
java使用java heap外(堆外)内存导致的内存泄露java可以通过?java.nio.ByteBuffer.allocateDirect(capacity

java使用java heap外(堆外)内存导致的内存泄露

java可以通过?java.nio.ByteBuffer.allocateDirect(capacity) 直接使用non java heap(java堆外)的内存 。

?

一.使用目的:

1。开辟数据缓冲区

2。可以突破jvm内存限制,操作更多的物理内存(不同的jvm实现不一样,sun jvm会被限制,但能增加jvm能够操纵的一倍内存,而jrockit基本上可以将物理内存全部耗光)

?

二.使用问题:

通过ByteBuffer.allocateDirect()使用的内存不能够通过jvm相关内存工具:VisualVM等查看heap的内存占用,所以内存泄露也较难查找。

?

三. 测试如下:

?

?

?

打印结果:

?

?

Heap内存分配

java运用java heap外(堆外)内存导致的内存泄露

?

?

实际java进程内存占用:

java运用java heap外(堆外)内存导致的内存泄露

?

?

通过VisualVM可以发现,java heap根本没有使用,但java进程的物理内存已经使用400MB+

?

四.测试结论:

?

1. 使用ByteBuffer.allocateDirect()分配出去的内存无法通过Heap查看

2.?ByteBuffer.allocateDirect()分配的内容可以被GC回收,但泄露的话较难查找

?

?

?

热点排行