gpt4 book ai didi

java - GC_FOR_ALLOC 因为调用静态方法?

转载 作者:行者123 更新时间:2023-11-30 09:13:53 24 4
gpt4 key购买 nike

我有几百个

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com