- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几百个
12-26 10:28:42.383: D/dalvikvm(3341): GC_FOR_ALLOC freed 1122K, 18% free 5834K/7112K, paused 57ms, total 57ms
因为我调用了数百次的静态方法(有时会递归调用)。在这种方法中,我有 ArrayList<HashMap<String,String>>
如何减少内存使用量?
方法调用:
public static ArrayList<HashMap<String, String>> getTimetableGroupsByType( String typeId ) throws IOException
{
ArrayList<HashMap<String, String>> timetableItems = new ArrayList<HashMap<String, String>>();
Document doc = Jsoup.connect("https://plan.polsl.pl/left_menu.php?type=" + typeId).get();
Elements lists = doc.getElementsByTag("ul");
for(Element list : lists){
for( Element item : list.getElementsByTag("li")){
HashMap<String, String> timetableItem = new HashMap<String, String>();
timetableItem.put("name", item.text());
timetableItem.put("id_type", typeId);
if( ! item.id().equals(""))
{
//Log.d("ATS4Handler", item.id() );
timetableItem.put("id", item.id());
timetableItem.put("expansible_group", "true");
timetableItems.add(timetableItem);
timetableItems.addAll( getTimeTableItemsByGroups( typeId, item.id() ) );
}
else{
String[] itemHref = item.getElementsByTag("a").first().attr("href").split("=");
Matcher m = Pattern.compile("([a-zA-Z]+)=([0-9]+)").matcher( item.getElementsByTag("a").first().attr("href") );
HashMap<String, String> link = new HashMap<String, String>();
while (m.find())
link.put(m.group().split("=")[0], m.group().split("=")[1]);
timetableItem.put("typeId", typeId);
timetableItem.put("id", link.get("id").toString() );
timetableItem.put("expansible_group", "false");
timetableItems.add(timetableItem);
}
}
}
return timetableItems;
}
最佳答案
如果我没有正确阅读您的代码,您正在使用 HashMap
实例来表示代表时间表项目的“记录”。 HashMap 是一种(相对)昂贵的数据结构,它使用(相对)大量的空间。相反,您应该编写和使用具有 5 个字段的自定义类。这将(可能)节省您用于表示项目数据结构的 spave 的 2/3。
另一个问题是您的“链接”HashMap
似乎完全没有必要。相反,您可以将与键“id”关联的值保存在一个简单的字符串变量中。这样做可以大大降低对象分配率。
但是,最大的内存消耗者可能是您从 JSoup 获取的 Document
对象。理想情况下,您不必创建代表您正在解析的整个文档的 Document
对象。遗憾的是,JSoup 不支持基于事件的解析。
关于java - GC_FOR_ALLOC 因为调用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20787465/
我有几百个 12-26 10:28:42.383: D/dalvikvm(3341): GC_FOR_ALLOC freed 1122K, 18% free 5834K/7112K, paused 5
我从 dalvikvm 获得了太多的 GC_FOR_ALLOC。我从 REST 服务获取 XML:在一个 Activity 中,我以编程方式(我)解析了大约 100 行,在另一个 Activity 中
当我启动此线程时,我的 Android 应用程序崩溃了。 这个线程应该重启手机。当我启动它时,它不会重新启动手机,并且我在日志中有以下文本: 08-25 09:12:00.946 26029-2681
我在一秒钟内多次从 ip 网络摄像头下载图像,并使用 setImageBitmap 将其分配给 ImageView 对象。 try {
我的 Libgdx Android 游戏遇到了一些问题。当我更改屏幕时,动画在新屏幕创建后立即开始。它在桌面上运行得非常好且流畅,但是当我在 Android 设备上运行它时,创建新屏幕时会出现延迟,并
我的应用程序导致这些可怕的 GC_FOR_ALLOC 在特定位置(方法)多次发生: 12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed
https://developer.android.com/tools/debugging/debugging-memory.html指的是 GC_FOR_MALLOC,我在日志中没有看到它。它根本不
在我的应用程序日志上运行 logcat 时,我看到很多 GC_FOR_ALLOC 而没有 GC_CONCURRENT 消息。我知道我有内存泄漏,但在堆栈和其他站点的任何地方,logcat 消息都有很多
我的日志猫中有无穷无尽的 GC_FOR_ALLOC,如下所示: 32ms, total 32ms 07-01 12:23:28.946 14905-14905/com.dodosocial.lowo
我想知道是否有任何优化可以用来提高在屏幕上绘制大量位图时的速度。 我使用 Canvas ,在初始化时加载所有资源,并在需要更新位图时使用 createBitmap。我在 Galaxy Note 3 上
我目前正在调查我的 Android 应用程序的垃圾收集问题,我很想知道 GC_FOR_ALLOC 是否表明存在比其他 GC 消息(例如 GC_CONCURRENT)更大的问题。 据我了解,GC_CON
我有一个 GridView ,里面有一些图像。有时当我滚动时,GC_FOR_ALLOC 或堆会增加,我不知道为什么。我使用了一种方法来加载最小化的图像。 我可以使用 Picasso 或 ViewHol
这是运行代码时加载的默认 Activity 。当我单击“创建新帐户”链接时,屏幕变为空白,并且开始出现 GC_FOR_ALLOC 日志消息。切换到下一个 Activity (创建新帐户页面)时似乎出现
我正在使用 OSMdroid 库开发离线 mapView。我的 tilesource 加载了瓷砖,但呈现稳定退出。但事实是在我的日志消息中,我不断收到此错误: GC_FOR_ALLOC 释放 6346
我是一名优秀的程序员,十分优秀!