Come posso ottenere un feedback sull'eventualità che l'analisi di escape abbia influito sul mio codice o no?

6

Un problema che ho con l'ottimizzazione del compilatore è che in realtà non so mai cosa faccia il compilatore (o in questo caso specifico Jit) con il mio codice. Quindi c'è qualche possibilità per me di sapere se una particolare ottimizzazione del compilatore è avvenuta o no? Voglio solo essere sicuro che alcuni oggetti (i vettori matematici) sono creati nello stack e non nello heap.

    
posta Arne 30.06.2011 - 13:48
fonte

3 risposte

5

Vedi il Q & A correlato qui che suggerisce di poter scaricare un JDK di debug e utilizzare le opzioni della riga di comando: -XX: + UnlockDiagnosticVMOptions -XX: + PrintEscapeAnalysis -XX: + PrintEliminateAllocations

per stampare gli eventi dell'analisi di fuga mentre accadono.

    
risposta data 14.01.2013 - 17:02
fonte
3

La risposta breve è che non puoi.

Se i tuoi vettori sono creati o meno su uno stack o sull'heap non è determinato da JIT, è una proprietà della JVM che sta eseguendo la tua applicazione.

La specifica JVM ha sezioni che descrivono gli stack e l'heap . La sezione sugli stack dice

Because the Java virtual machine stack is never manipulated directly except to push and pop frames, frames may be heap allocated.

    
risposta data 13.01.2012 - 23:27
fonte
1

Con un compilatore tradizionale di solito è possibile osservare il linguaggio assembly emesso e determinare se alcune ottimizzazioni sono state o meno effettuate (non completamente, poiché potrebbero verificarsi più ottimizzazioni che producono lo stesso codice, ma quello che stai cercando è l'effetto, non la causa). Per le JIT, non tanto, a meno che non si abbia uno "chiacchierone" che emette un messaggio di log o di traccia quando esegue le sue ottimizzazioni. So che con alcune JVM puoi vedere se i metodi specifici sono stati JITted, ma non quando o perché (anche se spesso i criteri utilizzati dal JIT sono documentati).

    
risposta data 14.01.2013 - 17:35
fonte

Leggi altre domande sui tag