0

我有一个与 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 gigs ram 的手机上(所有其他应用程序都关闭)我总是在运行时使用少于 2 3 MB 的空闲堆是否有解决方法?

4

1 回答 1

1

设备 RAM 的大小并不重要,因为拥有 2 GB RAM 并不意味着您将获得 2GB 堆。

Google 在其建议中指定的最小堆大小为 16MB。你不会得到比这更小的堆。

largeHeap仅适用于 Android 3.0 及更高版本,并且不保证更大的堆大小。

要获得更大的堆,您无能为力,但您可以使用 NDK 重写您的应用程序,其中堆大小无关紧要,因为您在 dalvik VM 之外运行,因此可以使用(几乎)所有如果需要,设备的 RAM。

但是,以 10% 的可用堆空间运行也不错。

于 2013-03-27T01:27:26.470 回答