Ale*_*lex 3 java android memory-management out-of-memory
我的Android应用程序触发OutOfMemoryError,如下所示:
java.lang.OutOfMemoryError: Failed to allocate a 74649612 byte allocation with 1048576 free bytes and 63MB until OOM
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释每个值的含义(" 字节分配 "," 自由字节 "和" 直到OOM ")?这条消息对我来说有点混乱.
详细信息:据我所知:在我们得到OutOfMemoryError异常之前有63MB,我们尝试分配74649612字节,但是我们只有1048576个空闲字节.(如果我们有"1048576空闲字节",我们怎么会有"63MB直到OOM"?我们有63MB + 1048576个空闲字节完全可用,我们正在尝试分配更多,比如74649612字节?)
"字节分配"是指您尝试在单个块中分配的内存量.在这种情况下,即74649612字节.此分配请求大多数时间都会失败.
"可用字节数"是指在不扩展堆的情况下堆上可用空闲字节的数量.在这种情况下,即1048576字节.但请注意,这些"空闲字节"可能不在单个连续块中.通常,这个自由空间被分割成许多较小的块.
"直到OOM"表示您的堆可以扩展到超出其当前大小.每个进程都有一个基于设备特征的堆限制.在您的情况下,堆可以从其当前大小扩展63MB,直到堆大小限制.但是,即使这样也不足以为您提供一个与您请求的大小相同的连续空闲内存块.