2016-06-29 56 views
9

La mia applicazione genera codice Java durante il runtime e la compila utilizzando l'API JavaCompiler. Alcuni dei file generati possono essere piuttosto grandi - fino a poche centinaia di migliaia di righe. Lo trovo quando eseguo il comando javac sul codice generato nella riga di comando, o in alternativa se utilizzo un'applicazione che fa solo la compilazione tramite l'API JavaCompiler, posso compilare molti di questi file (~ 500), anche se essi sono molto grandi, in meno di due minuti. Tuttavia, se chiamo l'API tramite la mia applicazione quando è in esecuzione su un server Tomcat, il tempo di compilazione viene eseguito al massimo di dodici minuti (!!!).JavaCompiler API - compilazione lenta durante l'esecuzione in tomcat

Apprezzerei qualsiasi suggerimento su come migliorare le prestazioni della compilation.

Grazie!

+0

non riesco a mettere il dito su esattamente perché, ma quando sono passato di utilizzare il compilatore di default del sistema attraverso un chiamata a 'ToolProvider.getSystemJavaCompiler();' ma invece ha usato il compilatore JDT di Eclipse, le cose sono aumentate significativamente. Una risposta sarà felicemente accettata come risposta. – Jewels

+0

un'ipotesi sarebbe Eclipse ha un compilatore incrementale quindi non sta facendo una build pulita ogni volta. Questo potrebbe essere sbagliato però. Inoltre non risponde alla domanda principale –

+0

dall'esaminare jvm con jvisualvm, sembra che javac esegua l'intera compilazione in un singolo thread, mentre EclipseCompiler avvia molti thread per compilare i file '.java'. – Jewels

risposta

1

tenta di impostare la priorità del thread al valore più alto (il pool di thread o filo):

setPriority(Thread.MAX_PRIORITY);