Ho un programma Java che richiede circa un'ora per essere eseguito. Mentre è in esecuzione, se cambio il codice sorgente e ricompilalo, ciò influirà sulla corsa precedente?
Ho un programma Java che richiede circa un'ora per essere eseguito. Mentre è in esecuzione, se cambio il codice sorgente e ricompilalo, ciò influirà sulla corsa precedente?
Se il "while it running" è un requisito, è necessario considerare il caricamento dinamico dei file di classe. I server delle applicazioni supportano questo tipo di struttura - dopo tutto, è come si effettua la ridistribuzione di un'applicazione senza arrestare e avviare il server.
Inizi a ottenere cose come Come ricaricare dinamicamente le classi quando i file di classe vengono modificati in WebSphere Portlet Factory e la corretta progettazione dell'applicazione (vedi Caricamento e ricaricamento della classe dinamica in Java ).
Il caricamento dinamico delle classi non è l'idea migliore, specialmente se eseguita frequentemente. Il motivo è che la classe stessa è caricata in permgen nella vm (questo dipende dalla jvm (si veda quando le classi in jar entrano nel permGen ) - ricaricare ripetutamente una classe significa che si perde la memoria delle classi non utilizzate. (Vedi Classloader leaks: la temuta eccezione" java.lang.OutOfMemoryError: PermGen space " - un po 'datata, ma comunque utile).
Questo presuppone che tu voglia caricarlo al volo. Se è "Non voglio fermarmi per un'ora mentre ricompongo" ci sono altre soluzioni.
Una build non dovrebbe richiedere un'ora per la compilazione se si modifica un file di classe.
Nei giorni precedenti, uno utilizzato make
per eseguire la compravendita parziale. Considera
$ ls
Makefile bar.c foo.c
$ make all
cc -c bar.c
cc -c foo.c
$ make all
make: Nothing to be done for 'all'.
$ touch bar.c
$ make all
cc -c bar.c
$ cat Makefile
all: bar.o foo.o
bar.o: bar.c
cc -c bar.c
foo.o: foo.c
cc -c foo.c
$
Compilerà solo le cose che sono cambiate. Se cambi un file, compila solo un file.
Quindi, crea solo la classe. di cui hai bisogno, o il .jar di cui hai bisogno, piuttosto che l'intero progetto. Se non è organizzato in quel modo, organizzalo in modo che tu possa compilare solo le parti di cui hai bisogno.
In questo modo, non avrai bisogno di un'ora per ricompilare tutto - solo un minuto per ricompilare ciò di cui hai bisogno.