GC_EXTERNAL_ALLOCfreed與GC_EXPLICITfreed是什麼?
前面Free的記憶體是VM中java使用的記憶體,external是指VM中通過JNI中Native的類中的malloc分配出的記憶體,例如Bitmap和一些Cursor都是這麼分配的。
在Davilk中,給一個程式分配的記憶體根據機型廠商的不同,而不同,現在的大部分的是32M了,而在VM內部會把這些記憶體分成java使用的記憶體和 Native使用的記憶體,它們之間是不能共享的,就是說當你的Native記憶體用完了,現在Java又有空閒的記憶體,這時Native會重新像VM申請,而不是直接使用java的。
例如上邊的例子
free 3411K/6663K和external 24870K/26260K
如果這時需要建立一個2M的
Bitmap
,Native現有記憶體26260-24870=1390K<2048k,因此他就會向Vm申請記憶體,雖然java空閒的記憶體是
6663-3411=3252>2048,但這部分記憶體Native是不能使用。
但是你現在去申請2M的Native記憶體,VM會告訴你無法分配的,因為現在已使用的記憶體已經接近峰值了32M(26260+6663=32923 ),所以現在就會成force close 報OOM。
所以現在我們要檢查我們的native記憶體的使用情況來避免OOM。
本文轉自java豆子部落格園部落格,原文連結:http://www.cnblogs.com/error404/archive/2011/09/28/2194708.html,如需轉載請自行聯絡原作者
相關文章
- 什麼是透明屏,其工作原理與優勢是什麼
- 系統呼叫與庫函式是什麼,區別是什麼函式
- 什麼是Cookie、令牌與JWT?CookieJWT
- 什麼是python?與PHP有什麼區別?PythonPHP
- python是什麼?與spyder有什麼聯絡?Python
- Session是什麼?它與Cookie有什麼區別?SessionCookie
- 什麼是cookie,什麼是sessionCookieSession
- 什麼是DNS,什麼是HostsDNS
- 什麼是模式? 什麼是框架?模式框架
- 這是什麼這是什麼
- 原生IP是什麼?與其他IP有什麼區別?
- 什麼是微服務架構?什麼是服務註冊與發現微服務架構
- 什麼是滲透測試?與安全測試的區別是什麼?
- 什麼是WebAuthn、FIDO 是什麼?Web
- ITIL是什麼意思?ITIL是什麼?
- 什麼是跨域,什麼是同源跨域
- 什麼是IPFS?IPFS與區塊鏈有什麼關係區塊鏈
- 面試官:Kafka是什麼,它有什麼特性與使用場景?面試Kafka
- 面試官:ElasticSearch是什麼,它有什麼特性與使用場景?面試Elasticsearch
- 面試官:RocketMQ是什麼,它有什麼特性與使用場景?面試MQ
- 共享儲存是什麼意思?與DRBD有什麼區別?
- 面試官:Zookeeper是什麼,它有什麼特性與使用場景?面試
- 為什麼遊戲與列車是天作之合?遊戲
- SCRM與CRM的區別是什麼?
- 什麼是AI、機器學習與深度學習?AI機器學習深度學習
- 什麼是 AI、機器學習與深度學習?AI機器學習深度學習
- DDD與DCI的區別是什麼?
- 什麼是.NET平臺、什麼是c#、什麼是ASP.NET。C#ASP.NET
- ftp是什麼,ftp是什麼東西?FTP
- Java是什麼_Java是做什麼的?Java
- 什麼是正向代理?什麼是反向代理?
- NLA是什麼?NLA的原理是什麼?
- ###什麼是Linux核心###什麼是MMULinux
- 【Linux】Docker主要優勢是什麼?與虛擬機器區別是什麼?LinuxDocker虛擬機
- 2G與3G是什麼?有什麼區別?
- 雲桌面是什麼意思?與堡壘機有什麼區別?
- 容器雲是什麼意思?與堡壘機有什麼區別?
- CSRF與SSRF是什麼?它們之間有什麼區別?