2013-06-28 14 views
6

Czy Java JIT kompiluje bajt z tą samą optymalizacją przy każdym uruchomieniu na tym samym komputerze?Czy Java JIT kompiluje bajtek deterministycznie - te same optymalizacje dla każdego uruchomienia na tym samym komputerze?

Czy uwzględnia ona czynniki dynamiczne, takie jak użycie procesora w danej chwili, czy te same optymalizacje będą stosowane za każdym razem, niezależnie od czynników tymczasowych?

+0

Który kompilator Java JIT? – SLaks

+1

Chciałbym wiedzieć dla HotSpot – selig

+0

Jeśli program ma losowość i jedno uruchomienie wywołania metody A, a inny uruchamia wywołania metody B, to nie, nie otrzymasz tych samych optymalizacji. –

Odpowiedz

4

Nie, optymalizacje są niedeterministyczne. Nawet jeśli uruchomisz dokładnie ten sam, jednomodułowy, w pełni deterministyczny program, sampler używany przez JIT do określenia, które metody optymalizacji mogą wybrać inny zestaw.

Inną rzeczą, która może zmienić wygenerowany kod maszyny, są rzeczywiste lokalizacje pamięci pewnych stałych, do których odnosi się kod. JIT może wydawać instrukcje maszynowe, które mają bezpośredni dostęp do tych miejsc pamięci, co powoduje dodatkowe różnice między kodem maszynowym w różnych przejściach.

Badacze używający urządzenia Jikes RVM rozwiązali ten problem w swoich testach porównawczych za pomocą funkcji o nazwie Compiler Replay.

Powiązane problemy