Fil*_*lva 9 java android garbage-collection jvm java-8
最近我们的 Android 应用程序一直在关闭,而没有报告任何崩溃。
在查看系统转储日志后,我们查明了发生这种情况时总是出现的常见日志。
不幸的是,我们没有任何步骤来重现它,因为它发生在应用程序的随机点,但我们想知道是否有人知道可能是此类问题的根本原因。
显然,当垃圾收集器开始正常运行时,它试图释放比注册为已分配的更多的本机字节。
我们在使用三星 Tab A (2016) T585 平板电脑的 Android 7 和 8.1 上发生了这种情况,这是我们目前支持的版本。
这是系统日志的摘录:
06-06 11:53:27.243 3954 3965 I art : Background partial concurrent mark sweep GC freed 189192(8MB) AllocSpace objects, 25(7MB) LOS objects, 40% free, 13MB/22MB, paused 1.940ms total 126.255ms
06-06 11:53:27.244 3954 3962 W System.err: java.lang.Error: Cleaner terminated abnormally
06-06 11:53:27.246 3954 3962 W System.err: at sun.misc.Cleaner$1.run(Cleaner.java:147)
06-06 11:53:27.246 3954 3962 W System.err: at sun.misc.Cleaner$1.run(Cleaner.java:145)
06-06 11:53:27.247 3954 3962 W System.err: at java.security.AccessController.doPrivileged(AccessController.java:41)
06-06 11:53:27.247 3954 3962 W System.err: at sun.misc.Cleaner.clean(Cleaner.java:144)
06-06 11:53:27.247 3954 3962 W System.err: at java.lang.ref.ReferenceQueue.enqueueLocked(ReferenceQueue.java:75)
06-06 11:53:27.247 3954 3962 W System.err: at java.lang.ref.ReferenceQueue.enqueuePending(ReferenceQueue.java:243)
06-06 11:53:27.247 3954 3962 W System.err: at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:160)
06-06 11:53:27.247 3954 3962 W System.err: at java.lang.Thread.run(Thread.java:762)
06-06 11:53:27.247 3954 3962 W System.err: Caused by: java.lang.RuntimeException: Attempted to free 98 native bytes with only 91 native bytes registered as allocated
06-06 11:53:27.247 3954 3962 W System.err: at dalvik.system.VMRuntime.registerNativeFree(Native Method)
06-06 11:53:27.247 3954 3962 W System.err: at libcore.util.NativeAllocationRegistry.registerNativeFree(NativeAllocationRegistry.java:223)
06-06 11:53:27.247 3954 3962 W System.err: at libcore.util.NativeAllocationRegistry.-wrap0(NativeAllocationRegistry.java)
06-06 11:53:27.247 3954 3962 W System.err: at libcore.util.NativeAllocationRegistry$CleanerThunk.run(NativeAllocationRegistry.java:196)
06-06 11:53:27.247 3954 3962 W System.err: at sun.misc.Cleaner.clean(Cleaner.java:142)
06-06 11:53:27.247 3954 3962 W System.err: ... 4 more
Run Code Online (Sandbox Code Playgroud)
我也决定创建一个Google 错误报告。