2
の膨大な量を作成する私たちのユースケースの一つとExcerptTailerのreadDocument()APIは、あまりにも多くのゴミを作成していることに気づいたためベンチマーキングクロニクルキューよ! JFRは、プロセスが以下のスタックで約66%の時間を費やしていることを示しています。私が使用していクロニクルキューのバージョンは何クロニクルキューStoreTailer.next()ごみ
?
net.openhft:クロニクル・キュー:4.5.9
どのようにキューを作成するのですか?
queue = SingleChronicleQueueBuilder.binary(filename).build();
appender = queue.acquireAppender();
tailer = queue.createTailer();
//Snippet to read
tailer.readDocument(r -> {
//Reading some context here
});
どのくらいのゴミを作成していますか? 3分
で
ギガバイト11の周囲にスタックトレース
Stack Trace TLABs Total TLAB Size(bytes) Pressure(%)
byte[] java.lang.StringCoding$StringEncoder.encode(char[], int, int) 167 6,593,171,600 52.656
byte[] java.lang.StringCoding.encode(String, char[], int, int) 167 6,593,171,600 52.656
byte[] java.lang.String.getBytes(String) 167 6,593,171,600 52.656
String[] java.io.UnixFileSystem.list(File) 167 6,593,171,600 52.656
String[] java.io.File.list() 167 6,593,171,600 52.656
String[] net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.getList() 167 6,593,171,600 52.656
void net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.setFirstAndLastCycle() 167 6,593,171,600 52.656
int net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.firstCycle() 167 6,593,171,600 52.656
long net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.firstIndex() 167 6,593,171,600 52.656
boolean net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.next(boolean) 167 6,593,171,600 52.656
私は他に何をしようとしたのですか?
IはJitWatchを使用し、516バイト、150バイトから脱出分析のためのバイトコードサイズを増加させました。私はreadDocumentメソッドがJITコンパイルされていることに気づいた。
次の手順についてのご意見はありますか?
ありがとう、ピーター。それが私のやり方です。ところで、ソフトウェアの素晴らしい部分! – KodeWarrior
まだ謎に包まれていることの1つは、エスケープ分析によって変数が削除されなかった理由です。 – KodeWarrior
@KodeWarrior AFAIK配列はスタックに置かれず、たとえ配列されていても、ポインタが指し示すものはスタックに置かれないことがあります。 –