C'è una stima che dice quanto JSR-292 avrà un impatto sulle prestazioni di Groovy?Quanto farà JSR-292 (invokedynamic) alle prestazioni di Groovy?
risposta
invokedynamic è una storia complicata in realtà, dal momento che le caratteristiche di prestazione cambiano tutto il tempo in JDK7. Durante il porting di Groovy a indy sono diventato davvero, molto vicino a Java, circa il fattore 1.5. Ma devo usare catchExceptionGuard, che riduce le prestazioni a qualcosa di simile al fattore 3-4. Dobbiamo ancora studiare i modi per evitare di dover usare quella guardia. Forse dovremo rompere qualche codice esistente in Groovy 2.2 per quello. Ad ogni modo, non ho bisogno della protezione per il fallback invokeMethod come menzionato sopra. È per GroovyRuntimeExceptions possibilmente contenente altre eccezioni, che devo scartare o fare altre cose con. Quindi la prestazione teorica possibile sembra essere tra Java e metà della velocità di Java per i metodi esistenti. L'esecuzione delle chiamate su invokeMethod è una storia completamente diversa.
Se è necessario altro, utilizzare @CompileStatic in Groovy 2.0.
Io non credo che ci sia ancora un punto di riferimento, e fino a quando qualcuno compie Possiamo solo immaginare ...
Si possono trovare this post in questa materia interessante.
Sarebbe circa 10-50 volte più veloce in generale.
Puoi tornare indietro? con alcuni riferimenti o prove? –
Ciao, Ho aggiunto il collegamento. Si basa sulla mia esperienza personale nella creazione di un compilatore Groovy su JSR-292. E in fondo, è una stima (come la domanda ha chiesto anche la stima;) – chanwit
Davvero fuorviante. In realtà ho avuto un rallentamento di 5x con indy abilitato. – Renato
io non sono sicuro di quanto è applicabile a Groovy. Se ricordo bene, Groovy ha alcuni fallback (ad esempio il metodo invokeMethod). Non è possibile usare semplicemente il fallback con invokedynamic, penso.
Tuttavia, ci sono alcuni modi:
- intercettare l'eccezione che viene generata quando il metodo non viene trovato. Sfortunatamente, è probabilmente necessario analizzare lo stacktrace, perché non si può essere sicuri da dove viene generato. Questo può essere un rallentamento significativo quando si chiama un metodo non esistente, indipendentemente dal fatto che sia gestito dal callback invokeMethod.
- Guarda Groovy ++. Ti consente di utilizzare la digitazione statica se soddisfi alcuni vincoli. In tal caso, è possibile consentire di passare a una "modalità dinamica rigorosa", che non consente questi fallback.
- 1. Modifica dello stile di codifica dovuto alle prestazioni del GC di Android, quanto è lontano?
- 2. Prestazioni di app per PhoneGap rispetto alle prestazioni delle app native
- 3. Prestazioni del CALayer rispetto alle prestazioni di UIImageView
- 4. UPDATE rispetto alle prestazioni INSERTO
- 5. Strategia di registrazione rispetto alle prestazioni
- 6. Utilizzare invokedynamic per implementare più dispacciamenti
- 7. L'audio farà terminare AVCaptureSession
- 8. In che modo Groovy aggiunge nuovi metodi alle classi Java?
- 9. UICollectionView Problemi relativi alle prestazioni su performBatchUpdates
- 10. Prestazioni relative alle prestazioni durante l'apertura ripetuta di una finestra di dialogo nel wpf
- 11. Problemi relativi alle prestazioni Javascript di Internet Explorer
- 12. Accesso alle informazioni sullo schema del database da Groovy
- 13. Prestazioni del gioco su tela HTML5 rispetto alle alternative
- 14. Quanto è buono NVCC alle ottimizzazioni del codice?
- 15. Per quanto riguarda le prestazioni, quanto è buona la libreria Guava?
- 16. Prestazioni di accesso alle proprietà big-O Javascript
- 17. div farà slideDown ma non sarà slideUp
- 18. Hibernate può essere utilizzato in applicazioni sensibili alle prestazioni?
- 19. jQuery ajax non farà richieste HTTPS
- 20. Collezioni Java rispetto alle prestazioni del database in memoria
- 21. Pulizia della struttura OO rispetto alle prestazioni SQL
- 22. Domande relative alle prestazioni per la dipendenza dalla cache SQL
- 23. Istruzioni preparate da MySQL rispetto alle prestazioni delle query semplici
- 24. GPU rispetto alle prestazioni della CPU per algoritmi comuni
- 25. Il ciclo basato su intervalli è favorevole alle prestazioni?
- 26. Quanto performante è StackFrame?
- 27. grails 2/groovy 2/JDK7: come trarne i benefici?
- 28. Quanto sono lenti i socket TCP rispetto alle pipe denominate su Windows per localhost IPC?
- 29. Abbiamo bisogno di importare React o solo {Component, PropTypes} farà?
- 30. cosa è cambiato rispetto alle proprietà di classe groovy dopo il libro GINA?
Sembra che ci sia ancora una lunga strada da percorrere per il codice Groovy per ottenere determinati benefici dalle prestazioni invokedynamic. Il mio algoritmo genetico eseguito 5 volte più lento con abilitato invokedynamic, e l'ho testato con Java 1.8.0 e Groovy 2.2.1! Puoi provare da solo, clonare questo: https://github.com/renatoathaydes/MachineLearning ed eseguire test 'com.athaydes.ml.algorithms.LinearGPTest :: testNonTrivialPrograms'. Funziona normalmente in 4 secondi, ma con groovy-indy e invokedynamic, funziona in almeno 25 secondi. – Renato
Un altro post che mostrava anche indy può effettivamente rallentare il tuo codice Groovy: http://derjan.io/blog/2012/08/08/first-steps-with-groovys-invokedynamic-support/ – Renato