Sind Java-.class-Dateien erforderlich, nachdem eine Anwendung ausgeführt wurde?

8

Es fiel mir schwer, den Titel zu dieser Frage zu schreiben, aber hier ist meine Situation und was ich gefragt habe:

  • Ich habe ein Java-Projekt, das ich "ant test" zum Ausführen der Tests ausführen
  • Die Tests dauern ca. 10 Minuten
  • Kann ich mitten in der Durchführung dieser Tests ohne Folgen auf einen anderen Git-Zweig wechseln?
  • Ich möchte, dass die Tests gegen den ursprünglichen Code abgeschlossen werden, und erlaube mir, einfach an einem anderen Zweig zu arbeiten, während dies geschieht.

Ich vermute, die Wurzel meiner Frage ist: Sind .class-Dateien erforderlich, nachdem die Anwendung geladen und ausgeführt wurde? Sind die Klassen nur im Speicher gespeichert, und ich brauche die Dateien nicht auf der Dateisystem mehr? Oder greift es immer noch auf das Dateisystem zu / liest es?

Jede Einsicht oder besseres Verständnis dessen, was Java für eine laufende Anwendung benötigt, wird geschätzt.

    
Sean Adkinson 07.03.2013, 20:58
quelle

5 Antworten

6

Klassen werden bei Bedarf geladen. Der Klassenlader versucht nicht, eine Klasse zu laden, bis auf diese Klasse verwiesen wurde. Daher würde das Entfernen von Klassendateien aus dem Klassenpfad in der Mitte eines Laufs mit ziemlicher Sicherheit zu Fehlern führen.

    
Mark Peters 07.03.2013, 21:01
quelle
3

Wenn Sie die .java-Dateien, die Sie von Git erhalten, nicht zu demselben Speicherort kompilieren, während der Test ausgeführt wird, haben Sie kein Problem mit den .class-Dateien - unabhängig davon, wie die IDE die Klassen lädt .

    
ddmps 07.03.2013 21:00
quelle
0

Im Standard (ich meine sun / oracle) JVM, sobald eine Klasse geladen ist, bleibt sie im Speicher, bis der jvm heruntergefahren wird, aber sie kann noch nicht geladen werden, da Klassen bei Bedarf geladen werden.

    
Grim 07.03.2013 21:02
quelle
0

Wenn alle Dateien in den Speicher geladen wurden, dann wäre das nicht nötig ... aber wie kann man dann sicherstellen, dass alle Klassen in den Speicher geladen wurden ... also würden Sie Klassen-Dateien im Klassenpfad benötigen

    
Vineet Verma 07.03.2013 21:02
quelle
0

Nun, ich denke, Sie müssen einen Schritt zurück machen und die Lösung überdenken.

Sie haben geschrieben, dass Sie Integrationstests durchführen. Und als Teil des Tests wechseln Sie die Quellen, die getestet werden. Wenn Sie dies tun, werden Sie nutzlose Testdaten erzeugen, weil Sie nicht sicher sein können, was wirklich ausgeführt wurde.

Wenn Sie zwei verschiedene vrsion / branches Ihrer Software testen wollen, aktivieren Sie einfach zwei Testläufe und vergleichen Sie die Ergebnisse.

Sie können nur sicher sein, dass eine * .class Datei geladen ist, wenn Sie sie benutzt haben. Nach dem Laden der Klassendatei verbleibt sie im Speicher der JVM. Vielleicht wird es entladen, wenn es für einige Zeit unbenutzt ist und der GEM-Raum knapp wird (aber ich glaube nicht).

    
Christian Kuetbach 07.03.2013 21:11
quelle

Tags und Links