Próbuję wykonać niektóre testy porównawcze maszyn JVM działających na różnych platformach sprzętowych i OS. Stworzyłem algorytm do ćwiczenia części JVM, którą jestem zainteresowany i zamierzam uruchomić ten algorytm wiele razy, aby znaleźć przyzwoitą średnią.Chętne ładowanie klasy java
Kiedy uruchomić benchmark, uważam, że pierwszy bieg jest znacznie dłuższa niż kolejnych seriach:
132ms
86ms
77ms
89ms
72ms
Podejrzewam, że klasy są ładowane leniwie, kładąc duży narzut na pierwszym biegu. Chociaż jest to rzeczywiście funkcja, która, jak zakładam, jest unikalna dla każdej maszyny JVM, nie interesuje mnie ona w tym momencie.
Czy istnieje standardowa opcja lub właściwość wiersza polecenia, aby szybko załadować klasy? czy ktoś ma jakieś inne teorie?
Nie jestem w stanie tego uzyskać, skompiluje kod dalej. proszę o rozwinięcie tego i dlaczego tylko po 10000 razy uruchomionych, można uzyskać odpowiednie wyniki dla mikro-testu porównawczego (średnia wyjściowa) –
Domyślnym "progiem kompilatora" jest 10000. patrz '-XX: CompileThreshold = 10000' Może to oznaczać Kod nie jest w pełni zoptymalizowany, dopóki nie zostanie uruchomiony 10.000 i możesz zignorować te przebiegi, aby uzyskać najlepsze wyniki. W każdym razie sugeruję wykonanie testu przez co najmniej 2-10 sekund. –
w tym przypadku, jeśli podam -XX: CompileThreshold = 10, to dobrze jest przetestować go dla pętli 10000 (tak, wiem, że będzie działać tylko dla niektórych millisecs) –