use*_*919 5 java android garbage-collection
我正在开发一个Android应用程序,它需要每秒处理数千个数据包,同时提取和格式化每个帧的MAC地址.问题是垃圾收集器每秒运行十几次并拖延我的应用程序,这反过来让我错过了数据包.我避免创建新对象(我认为)可能.
我在DDMS中使用了分配跟踪器,并确定要清理的99%的垃圾来自以下方法.这是我正在使用的代码:
void parseMac() {
hex_sb.setLength(0);
for (hex_counter = 0; hex_counter < 6; hex_counter++) {
hex_sb.append(String.format("%02X", parser_packet_bytes[parser_skip + hex_counter]));
if (!(hex_counter == 5)) {
hex_sb.append(":");
}
}
formatted_mac = hex_sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
hex_sb是一个StringBuilder,可以重用.hex_counter是MAC地址中的字节数(字节来自parser_packet_bytes,byte []).如果它不是MAC的最后一个字节,请附加":"以进行正确的格式化.formatted_mac是一个类范围的String,用于存储格式化的MAC.根据分配跟踪器,唯一的问题是使用String.format的行.
我对StackOverflow专家的问题是:如何重写上述方法,以便创建更少(最好没有)垃圾?
每个新的 MAC 都需要一个新的 String,你无法帮助它,因为 String 是不可变的。至于 StringBuilder 操作,它不会创建任何垃圾,因为 StringBuilder 将在 setLength(0) 和追加上重用相同的 char 数组,它只会更改当前位置。唯一有帮助的是直接使用 StringBuilder,而不将其转换为 String(如果可能的话)。
归档时间: |
|
查看次数: |
674 次 |
最近记录: |