Chápem, že JVM interpretuje / JITsbytecodes; a že JVM poskytuje funkčnosť generovania kódu stroja (a dobu behu), ktorá je špecifická pre platformu, pre spustenie programu v aktuálnom kontexte.
Chcela by som pochopiť, aké možnosti ladenia generácie kódov sú dostupné v JVM. Narazil som https://docs.oracle.com/cd/E21764_01/web.1111/e13814/jvm_tuning.htm#PERFM167, ktoré sú vlastne len vlajkami na ladenie runtime JVM.
Mám záujem dozvedieť sa, či JVM umožňuje ladenie možností generovania kódu pre konkrétnu platformu, podobne ako gcc na x86 https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#x86-Options.
odpovede:
1 pre odpoveď č. 1Po prvé, vlajky JVM sú v podstateodlišné od príznakov optimalizácie GCC.Vlajky GCC ovplyvňujú kód vygenerovaný v čase kompilácie JVM možnosti (v rozsahu, v akom ovplyvňujú kompiláciu JIT vôbec) NIEKTORÝ vplyv na bytecode.
Existujú rôzne príznaky, ktoré ovplyvňujú natívny kód vysielaný kompilátorom JIT; napríklad:
- Na
-ea
možnosti určujú, či tvrdenia sú kontrolované. - Na
-server
voľba (čiastočne) určuje, kedy kód je kompilátor JIT, ktorý ovplyvňuje jeho optimalizácia.Na-Xcomp
možnosť robí to isté. - Na
-Xint
a-Xmixed
ovplyvniť, či kód je JIT zostavil vôbec.
Potom tam sú možnosti, ktoré špecificky zmeniť špecifické optimalizácia-súvisiace veci.Tieto zahŕňajú -XX:ObjectAlignmentInBytes
, -XX:CompressedOops
, -XX:AggressiveOpts
, -XX:AllocatePrefetch
možnosti, -XX:DoEscapeAnalysis
, -XX:Inline
možnosti, -XX:OptimizeStringConcat
, -XX:UseAES
Možnosti a -XX:UseSHA
možnosti.
Podrobnejší zoznam nájdete v dokumentácii Oracle pre svoju platformu.
Poznač si to:
- Všetky optimalizácia kódu JIT je platformovo závislé v tom zmysle, že optimzes kompilátor JIT pre hardvér, ktoré sú skutočne beží na.
- Niektoré z vyššie uvedených možností sú platformovo závislé (pozri dokumentáciu)
- Na
-X
a-XX
možnosti zmeniť medzi Java verzie. - Java programátori zvyčajne nechal platformy vyberte optimalizácia nastavenia.Na rozdiel od (povedzme) C alebo C , Java programy sú zvyčajne menej citlivé na optimalizáciu nastavenia1.
1 - na singel-závitové Java kódu, optimalizácia nastavenia by nemali zmeniť správanie programu.Multi-závitové kódu, správanie nesprávny Aplikácia môže meniť v dôsledku nedostatočné synchronizácie.