所以我为日期创建了自己的类对象(DMY.java),当我尝试对列表进行排序时,内存使用量从20,000k变为近700,000k。我把它缩小到导致记忆通过屋顶的排序方法。它在方法中实例化了一些对象,所以我认为这就是占用所有内存的东西。但有人认为他们可以帮助我优化它以减少使用内存吗?这是代码:
public static ArrayList<String> sortListByDate(ArrayList<String> list)
{
DMY currDate = null;
DMY oldDate1 = null;
DMY oldDate2 = null;
ArrayList<String> temp = new ArrayList<String>();
for(int x = 0; x < list.size(); x++) {
currDate = new DMY(Regex.matchPattern(list.get(x), "\\d+[-]\\d+[-]\\d+ \\d+[:]\\d+[:]\\d+").trim(), false);
if(temp.size() == 0) {
temp.add(list.get(x));
} else if(temp.size() == 1) {
oldDate1 = new DMY(Regex.matchPattern(temp.get(0), "\\d+[-]\\d+[-]\\d+ \\d+[:]\\d+[:]\\d+").trim(), false);
if(currDate.compareToFull(oldDate1) == -1) {
temp.add(0, list.get(x));
} else {
temp.add(list.get(x));
}
} else {
for(int y = 0; y < temp.size(); y++) {
if(!(x + 1 < temp.size())) {
temp.add(list.get(x));
} else {
oldDate1 = new DMY(Regex.matchPattern(temp.get(x), "\\d+[-]\\d+[-]\\d+ \\d+[:]\\d+[:]\\d+").trim(), false);
oldDate2 = new DMY(Regex.matchPattern(temp.get(x + 1), "\\d+[-]\\d+[-]\\d+ \\d+[:]\\d+[:]\\d+").trim(), false);
if(currDate.compareToFull(oldDate1) == 1 && currDate.compareToFull(oldDate2) == -1) {
temp.add(x + 1, list.get(x));
}
}
}
}
}
return temp;
}
基本上,如果排序列表的大小为0,只需将该行添加到新列表中即可。如果排序列表的大小为1,请查看新日期是在该日期之前还是之后,然后相应地将其添加到排序列表中。否则,只需循环遍历列表中的每个值,并查看下两行的日期是否比当前行更新或更旧。然后相应地添加它。
正如您所看到的,有很多对象和很多循环。原始列表是包含日期的字符串列表。该方法的作用是使用正则表达式获取日期,然后将其与列表中的其他日期进行比较。由于某种原因,它使用了大量内存,我需要减少它。有什么想法吗?
答案 0 :(得分:0)