【发布时间】:2017-02-14 15:33:14
【问题描述】:
有什么方法可以记录 Java 的本机内存使用情况,即直接记录本机内存或进程使用的总内存(例如,询问操作系统)?
我想在幕后的用户机器上运行它,所以 NativeMemoryTracking 命令行工具并不是最吸引人的选项。我已经记录了空闲/最大/总堆大小。
背景:我的软件的用户报告了一个异常(如下),我不知道为什么。我的程序确实使用了 SWIG 的本机代码,但它是一个简单的 API,我认为它没有内存泄漏,并且不在堆栈跟踪中(或在错误之前立即运行)。我的日志表明发生错误时有足够的堆空间可用。所以我真的不知道如何追踪它。
java.lang.OutOfMemoryError: null
at java.io.RandomAccessFile.writeBytes0(Native Method) ~[na:1.7.0_45]
at java.io.RandomAccessFile.writeBytes(Unknown Source) ~[na:1.7.0_45]
at java.io.RandomAccessFile.write(Unknown Source) ~[na:1.7.0_45]
错误发生在 Windows(7 或 10)(?)上,在 webstart 中,配置了以下参数:
<java href="http://java.sun.com/products/autodl/j2se" initial-heap-size="768m" java-vm-args="" max-heap-size="900m" version="1.7+"/>
【问题讨论】:
-
问题发生在什么操作系统上?你能确定机器的虚拟机设置是如何配置的吗?内存分配失败的原因有很多,如果没有这些数据,甚至很难确定可能的原因,更不用说实际原因了。
-
@AndrewHenle 我已将这些详细信息添加到帖子中。
标签: java memory java-native-interface swig