各フレームの MAC アドレスを抽出してフォーマットしながら、毎秒数千のパケットを処理する必要がある Android アプリに取り組んでいます。問題は、ガベージ コレクターが 1 秒間に何十回も実行されており、アプリが停止しているため、パケットが失われることです。新しいオブジェクトを作成することは可能な限り (私が思うに) 避けています。
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 の専門家への私の質問は、次のとおりです。上記のメソッドを書き直して、ガベージが作成されないようにする方法を教えてください。