我是Android开发的初学者。目前我正在寻找一种在发生内存不足错误时自动转储内存的方法。我读到添加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/some/path 到你的jvm参数中,这样当它耗尽内存时,它就会转储堆。但我找不到在哪里设置。 有人知道吗?非常感谢。
最佳答案
您列出的标志适用于 Oracle VM,而不是 Dalvik。
没有等效的标志,但您可以实现类似的行为。 android.os.Debug.dumpHprofData()
方法会将当前堆转储写入您指定的文件。当与 Thread.setDefaultUncaughtExceptionHandler()
设置的 UncaughtExceptionHandler
结合使用时,您可以在任何线程中捕获 OOM 并自行处理报告。 (只是不要太得意忘形......毕竟你记不清了。)
您需要将处理程序链接到 Android 系统 - 另请参阅 Ideal way to set global uncaught exception Handler in Android .
A拼凑a quick example这会是什么样子。
关于java - 当 OOM 发生时,如何让 dalvik 转储整个应用程序堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16270833/