Wie vermeide ich, dass die Freigabe während des Debuggens mit Java 11 nur für Bootloader-Klassen unterstützt wird, weil der Bootstrap-Klassenpfad angehängt wurde?


78

Kürzlich bin ich auf Java 11 umgestiegen und habe angefangen, meine App zu debuggen. Diese Meldung wurde angezeigt:

OpenJDK 64-Bit-Server-VM-Warnung: Die Freigabe wird nur für Bootloader-Klassen unterstützt, da der Bootstrap-Klassenpfad angehängt wurde

Ich habe nur dieses Commit und Ticket gefunden , aber es sagt mir nicht viel.

Muss ich mir darüber Sorgen machen?


5
Sie versuchen, -Xbootclasspath / a und CDS (oder AppCDS) gleichzeitig zu verwenden. Können Sie mit -Xshare: off ausführen, um CDS zu deaktivieren?
Alan Bateman

1
Nur eine Vermutung (da ich etwas Ähnliches gesehen habe), verwenden Sie eine IDE, die das tut, worauf Alan hingewiesen hat, ohne dass Sie sich dessen überhaupt bewusst sind? Ist das IntelliJ?
Naman

1
Ja, das ist IntelliJ
Dmitriy Dumanskiy

13
Gleiches Problem in IntelliJ IDEA mit Java 12.
Turbanoff

4
Dies passierte mir direkt nach dem Wechsel zu Java 12, ich lief mit -Xshare: off und es funktionierte auch gut, aber was genau macht das? Könnte es etwas verhindern, das ich in Zukunft brauche, oder etwas Schlimmes könnte passieren?
Zarez

Antworten:


104

Ich hatte dieses Problem auch nach der Installation, jdk-12.0.1_windows-x64_bin.zipals ich versuchte, den Debugger mit IntelliJ IDEA zu verwenden. Ich habe eine Fehlermeldung erhalten ( Warnung zu Java HotSpot (TM) 64-Bit-Server-VM: Die Freigabe wird nur für Bootloader-Klassen unterstützt, da der Bootstrap-Klassenpfad angehängt wurde ). Ich fand auch, dass ich in Setting nach Async suchte und das Kontrollkästchen Instrumenting Agent deaktivierte. Hat für mich gearbeitet! ASYNC-Einstellungen


10
Bevor Sie dies deaktivieren, lesen Sie die Funktion "Async Stack Traces", um festzustellen, ob sie für Sie möglicherweise nicht nützlich ist: jetbrains.com/help/idea/async-stacktraces.html
Samuel,

1
Kurz gesagt: Wenn ein übergeordneter Thread einen untergeordneten Thread oder Prozess startet (bestimmte 'Erfassungspunkte'), wird ein Thread-Dump erstellt. Wenn Sie den untergeordneten Thread unterbrechen, stammt ein Teil seiner Stapelverfolgung vom übergeordneten Thread.
Mark Jeronimus

15

Ich hatte dieses Problem nach der Installation von Java12, als ich versuchte, den Debugger mit Intellij Idea zu verwenden. Die Lösung, die ich gefunden habe, bestand darin, Einstellungen vorzunehmen und nach Async zu suchen und das Kontrollkästchen Instrumenting Agent zu deaktivieren.


7

Sie können diese Warnung ignorieren. Dies bedeutet lediglich, dass die gemeinsame Nutzung von Klassendaten für Klassen deaktiviert ist, die nicht vom Bootstrap-Klassenladeprogramm geladen wurden.

Durch Verbessern der Startzeiten […] mit Datenfreigabe für Anwendungsklassen :

Die JVM lädt einige der JDK-Klassen mit dem Bootstrap-Klassenladeprogramm und den Rest mit dem Systemklassenladeprogramm, nimmt jedoch alle in ihr Standardarchiv auf. Wenn IntelliJ Ihr Projekt ausführt, weist es die JVM an, Code mit dem Bootstrap-Klassenladeprogramm zu laden, indem an diesen Klassenpfad angehängt wird (zweiter Teil der Nachricht). Dies bedeutet, dass der Teil des Archivs, der vom Systemklassenlader geladene Klassen enthält, möglicherweise ungültig ist und die JVM die Freigabe teilweise deaktiviert (erster Teil der Nachricht).

Sie könnten die gemeinsame Nutzung von Klassendaten mit vollständig deaktivieren -Xshare:off, aber Sie würden etwas an Leistung verlieren.


6

Bei mir trat das Problem nur auf, wenn ich in Docker ausgeführt wurde und einen Java-Befehlszeilenagenten wie den DataDog APM-Agenten ( -javaagent:/dd-java-agent.jar) verwendete. Als ich in meiner JDK11-Laufzeitumgebung (ohne den Agenten) lief, erhielt ich keine Warnungen.


3

Gehen Sie für das Dialogfeld Intellij IDE -> Einstellungen / Einstellungen (Strg + Alt + S) zu Erstellen | Ausführung | Bereitstellung | Debugger | Async -> Deaktivieren Sie Instrumenting Agent



0

Heute habe ich die gleiche Frage gefunden wie Sie. Situation: Debuggen, während kein Haltepunkt festgelegt ist Lösung: Legen Sie mindestens einen Haltepunkt fest, bevor Sie auf die Schaltfläche "Debuggen" klicken!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.