1

我有一个 dalvik 正在运行的实例:

/system/bin/dalvikvm ... -Xmx100m ...

memmap 看起来像:

b01f6000-b05b7000 rwxp 00000000 00:04 4635       /dev/ashmem/dalvik-heap (deleted)
b05b7000-b65f6000 ---p 003c1000 00:04 4635       /dev/ashmem/dalvik-heap (deleted)

但是因为 GC 一直在运行,所以我收到了很多这样的消息:

<dalvikvm> GC_CONCURRENT freed 1880K, 52% free 1882K/3843K, paused 5ms+9ms
<dalvikvm> GC_CONCURRENT freed 1882K, 52% free 1881K/3843K, paused 5ms+9ms
<dalvikvm> GC_CONCURRENT freed 1881K, 52% free 1881K/3843K, paused 6ms+9ms
<dalvikvm> GC_CONCURRENT freed 1880K, 52% free 1882K/3843K, paused 5ms+8ms
<dalvikvm> GC_CONCURRENT freed 1882K, 52% free 1881K/3843K, paused 6ms+9ms
<dalvikvm> GC_CONCURRENT freed 1880K, 52% free 1882K/3843K, paused 5ms+9ms
<dalvikvm> GC_CONCURRENT freed 1882K, 52% free 1881K/3843K, paused 6ms+9ms

有大量可用内存:

MemFree:          496056 kB

我想知道的是为什么堆没有增长更多它似乎停留在 4MB...?

顺便说一句,我确实需要100MB,实际上这只是一个小的起点......

谢谢

4

2 回答 2

3

Dalvik VM 的策略是使堆大小尽可能小。由于它每次收集时都会释放 1.8MB,因此它可能为自己感到自豪。

如果您看到大量此类消息,则仅表示您正在分配和丢弃大量内存,并且活动是正常的。您可以做的任何事情来减少内存流失都会有所帮助。

于 2013-10-24T01:04:50.217 回答
0

不知道 Dalvik,但一个普通的 JVM 可以通过配置-Xmx100M吃 100 MB。IIUYC 你有足够的可用内存,所以不需要运行 GC。OTOH,GC 工作效率很高,因此无需申请更多内存。由于手机是相当受限的设备,Dalvik 运行保守并不让我感到惊讶。

这个问题显示了如何增长堆。

于 2013-10-23T22:08:36.520 回答