我有一个与arduino通信的应用程序,它运行一个netty实例来控制arduino。问题是我没有内存耗尽,但根据adb logcat,使用堆大小的总堆大小太低我总是在%10左右免费所以任何对netty服务器的请求都会触发gc,此时我得到一堆的,
D/dalvikvm( 2862): WAIT_FOR_CONCURRENT_GC blocked 189ms
即使是没有做任何事情的简单请求(至少是我)也会在gc暂停时失去至少一秒钟。我有
android:largeHeap="true"
在我的清单中设置,模拟器设备的VM堆为512 MB,但它没有分配在该数字附近的任何地方(它分配大约10MB)。我没有内存泄漏,因为10%的空闲是稳定的,它会达到+/- 2-3%。即使在手机上有2个ram(所有其他应用程序都已关闭),我总是运行少于2 3 MB的可用堆是否有解决方法?
答案 0 :(得分:1)
设备RAM的大小并不重要,因为拥有2 GB RAM并不意味着你将获得2GB的堆。
Google在其推荐中指定的最小堆大小为16MB。你不会得到比这更小的堆。
largeHeap
仅适用于Android 3.0及更高版本,并且不保证更大的堆大小。
你没有太多可以做更大的堆,但你可以使用NDK重写你的应用程序,其中堆大小无关紧要,因为你在dalvik VM之外运行,因此可以使用(几乎)如果需要,所有设备的RAM。
但是,运行10%的堆空间并不错。