Skip to main content
 首页 » 编程设计

memory-management之Hello World Android 应用程序的意外堆转储

2024年11月01日16tuyile006

我正在使用 Eclipse 中的 MAT 学习内存利用率。虽然我遇到了一个奇怪的问题。撇开繁重的应用程序不谈,我从最温和的“Hello World”应用程序开始。这是我在 上获得的堆统计信息Nexus 5、ART 运行时、Lollipop 5.0.1。
编号 : 1
堆大小 : 25.429 MB
已分配 : 15.257 MB
免费 : 10.172 MB
% 使用 : 60%
# 对象 : 43487
我的堆转储给了我 3 个内存泄漏嫌疑人:
概述
“由于声誉低,无法发布饼图。”
问题嫌疑人1

The class "android.content.res.Resources", loaded by "", occupies 10,166,936 (38.00%) bytes. The memory is accumulated in one instance of "android.util.LongSparseArray[]" loaded by "".

Keywords android.util.LongSparseArray[] android.content.res.Resources


问题嫌疑人2

209 instances of "android.graphics.NinePatch", loaded by "" occupy 5,679,088 (21.22%) bytes. These instances are referenced from one instance of "java.lang.Object[]", loaded by "" Keywords java.lang.Object[] android.graphics.NinePatch


问题嫌疑人3

8 instances of "java.lang.reflect.ArtMethod[]", loaded by "" occupy 3,630,376 (13.57%) bytes. Biggest instances: •java.lang.reflect.ArtMethod[62114] @ 0x70b19178 - 1,888,776 (7.06%) bytes. •java.lang.reflect.ArtMethod[21798] @ 0x706f5a78 - 782,800 (2.93%) bytes. •java.lang.reflect.ArtMethod[24079] @ 0x70a9db88 - 546,976 (2.04%) bytes. Keywords java.lang.reflect.ArtMethod[]


这一切都是通过一个简单的代码:
import android.app.Activity; 
import android.os.Bundle; 
 
public class MainActivity extends Activity { 
 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
}
问题
  • 为什么是堆编号 很大。 ?
    另外作为附带说明,该应用程序在系统中消耗了 52 MB 的 RAM。
  • 的这209个实例在哪里? NinePatch 来了?我只是通过在 Eclipse 中执行“创建新项目”来创建项目?
  • 第一个资源泄漏嫌疑人,它在我对应用程序的分析中一直出现。真的是嫌疑人吗?
  • 什么是艺术方法?它是否必须与 ART 运行时有关?
  • 请您参考如下方法:

    在 Lollipop 中,默认运行时是 ART,即 Android 运行时,它取代了旧 Android 版本中使用的旧 Dalvik 运行时 (DRT)。
    在 KitKat 中,谷歌发布了一个实验版的 ART 来获取用户的反馈。
    在 Dalvik 中使用 JIT(即时编译),这意味着当您打开应用程序时,DEX 代码才被转换为目标代码。
    然而,在 ART 中,dex 代码在安装过程中被转换为目标代码(即 AOT 提前编译)。与 DEX 代码相比,此目标代码的大小更大,因此 ART 需要比 DRT 更多的 RAM。 ART 的优势在于 ART 应用程序比 DRT 应用程序具有更好的响应时间。