我正在学习在Eclipse中使用MAT的内存利用率。虽然我遇到了一个奇怪的问题。撇开繁重的应用程序不谈,我从最温和的“Hello World”应用程序开始。这是我在Nexus 5、ART runtime和Lollipop5.0.1上获得的堆统计数据。
ID:1
堆大小:25.429 MB
分配:15.257 MB
空闲:10.172 MB
%使用:60%
#对象:43487
我的堆转储给了我3个内存泄漏嫌疑犯:概述
"不能发布饼图,因为声誉低."
问题嫌疑人1
由“”加载的类“android.content.res.Resources”占用10166936(38.00%)字节。内存累积在由“”加载的“android.util.LongSparseArray[]的一个实例中。
关键词android.util.LongSparseArray[]android.content.res.资源
问题嫌疑犯2
由“”加载的209个“android.graphics.NinePatch”实例占用5679088(21.22%)字节。这些实例引用自“java.lang.Object[]”的一个实例,该实例由“”关键字java加载。lang.Object[]android。图样九匹
问题疑犯3
由“”加载的8个“java.lang.reflect.ArtMethod[]”实例占用3630376(13.57%)字节。最大的例子:•java。朗,反思一下。ArtMethod[62114]@0x70b19178-1888776(7.06%)字节JAVA朗,反思一下。ArtMethod[21798]@0x706f5a78-782800(2.93%)字节。•JAVA朗,反思一下。ArtMethod[24079]@0x70a9db88-546976(2.04%)字节。关键词java。朗,反思一下。艺术方法
这是一个简单的代码:
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);
}
}
问题
昨天我也面临着这个问题。在你的日志中,关键词是“NinePatch”。在我的例子中,原因是一个“假”阴影——带有阿尔法通道的微小图片,它会触发资源泄漏。对我来说,它的成本约为60mb泄漏内存。
在Lollipop中,默认运行时是ART,即Android运行时,它取代了旧Android版本中使用的旧Dalvik运行时(DRT)。在KitKat,谷歌发布了一个实验版的ART,以获得用户的反馈。在Dalvik中,使用了JIT(即时编译),这意味着当您打开应用程序时,DEX代码才会转换为目标代码。然而,在艺术中,dex代码在安装过程中转换为目标代码(即AOT提前编译)。与DEX代码相比,该目标代码的大小更大,因此ART需要比DRT更多的RAM。ART的优势在于,ART应用程序比DRT应用程序有更好的响应时间。
Android应用程序初学者有一些问题,应用程序无法打开。今晚才开始用它工作。eclipse中的代码上没有显示错误。就在我试图从模拟器运行它时,它意外地关闭了。 主要来源:包装com.example.solidshellsecurity; XML: 错误日志:
从中提取代码的类确实需要隐式转换和。那么,有没有一种方法可以在不明确转换的情况下防止这种行为呢?
我正在尝试创建一个用户登录页面,当我尝试注册时,我得到了这个错误。我想Json对象部分有问题。我尝试在论坛中搜索其他答案,但似乎都没有解决我的问题。请求你帮我解决这个问题。谢谢是提前的。 我的原木猫
我在将时间戳对象转换为joda的LocalTime时遇到问题。 参见以下示例: 我无法确定为什么“new LocalDate(t)”会导致“1111-11-17”。有人能帮我吗? 在使用joda time hibernate填充bean的LocalDate类型属性时,我注意到了这个“问题”。
问题内容: 我需要一种 从应用程序内部 请求堆转储 的方法 。 基本原理:当遇到特定的错误情况时,我想转储堆,以便可以看到内存中有什么内容。 但是我想使它自动化(例如,当我检测到某些特定情况发生时。或者当看门狗不再收到ping命令时;当某些测试失败时)。因此,我需要一种从应用程序本身内部转储堆的方法。我似乎无法通过MX bean的东西找到它。尽管MX Bean可以通过监视器和“可拥有的同步器”信息
我正在运行Apache Ignite应用程序。当我看到使用linux的内存使用时,我得到的使用内存为9.8GB。但是当我使用eclipse MAT进行堆转储时,它的大小只有大约1.8GB。为什么会这样?ignite中分配的默认堆内存为21 GB。我也没有做任何GC调优。