Alcune routine intensive della CPU diventano notevolmente più lente quando vengono eseguite attraverso un debugger. Perchè è questo?Perché il codice Java rallenta nel debugger?
Attualmente sto usando solo IntelliJ per eseguire il codice in esecuzione in JBoss. Quando avvio JBoss, utilizzo queste opzioni:
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=256m -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n %JAVA_OPTS%
C'è un modo per accelerare l'esecuzione? O per accelerare certe esecuzioni di metodi che non ho bisogno di passare?
Aggiornamento: Sembra se non scavalcare/nelle routine di CPU intensive (vale a dire: Basta eseguire fino un punto di interruzione impostato subito dopo la routine), quindi il tempo di esecuzione è come se non in un debugger.
Grazie. Puoi approfondire questo processo di ottimizzazione? –
La maggior parte delle macchine virtuali non legge un bytecode, esegue l'istruzione equivalente e ripete. È troppo lento. Ciò che invece fanno è prendere il bytecode nel suo complesso, convertirlo in codice nativo equivalente e quindi eseguire il codice nativo. Se stai usando un debugger (e quindi dicendo che potresti scavalcarlo a un certo punto), stai ponendo dei vincoli piuttosto pesanti su ciò che può effettivamente essere fatto. –