我正在开发一个 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();
}
hex_sb 是一个 StringBuilder,可以重用。hex_counter 是 MAC 地址中的字节数(字节来自 parser_packet_bytes,一个 byte[])。如果它不是 MAC 的最后一个字节,则附加一个“:”以进行正确格式化。formatted_mac 是一个类范围的字符串,用于存储格式化的 MAC。根据分配跟踪器,唯一的问题是使用 String.format 的行。
我对 StackOverflow 专家的问题是:如何重写上述方法以减少(最好没有)垃圾的产生?