Jon*_*han 2 java random-access
我在java中使用RandomAccessFile.我有内存泄漏问题.我已将代码简化为以下内容:
public static void main(String[] args) throws IOException, InterruptedException
{
RandomAccessFile r = new RandomAccessFile(new File("test.dat"), "rw");
r.write(new byte[150000000], 0, 150000000);
r.getFD().sync();
r.close();
r = null;
while (true) { Thread.sleep(1000); }
}
Run Code Online (Sandbox Code Playgroud)
执行此代码后(并为GC提供足够的时间),报告的应用程序内存使用量略高于150MB.
我错过了什么?还是Java应该受到责备?
GC只会使内存可用于JVM.GC释放的内存不会自动返回给操作系统.JVM通常非常不愿意将内存返回给操作系统,因为它可能很快就会再次需要它,并且从操作系统获取内存是一项相对昂贵的操作.
要查看正在使用和免费的堆内存百分比,可以使用Visual VM.如果你想在JVM内存急切地回到OS铁道部,您可以使用了Oracle JVM的调整参数,特别是-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |