Es gibt eine Meldung über das Warten auf Updates, wenn mein Programm gestartet wird. Diese Nachricht wird in einer separaten Methode angezeigt. Also sollte alles innerhalb dieser Methode von Garbage Collector entfernt werden. Aber Profiler (ich benutze NetBeans 8.1) zeigt mir, dass alle Objekte, die mit einem Label aus einer separaten Methode verbunden sind, noch existieren (javax.swing Objekte). Wie kann ich alle Objekte entfernen, die mit dem Label und dem Label selbst verbunden sind, um ein Memory (RAM) zu löschen?Garbage Collection entfernt lokale Variable nicht
Diese unnötigen Objekte, zum Beispiel: javax.swing.text.GapContent, javax.swing.text.html.parser.Parser und alle anderen Objekte aus dem Paket javax.swing
package example;
import java.io.IOException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Example extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
showMsgCheckUpdate();
System.gc();
StackPane root = new StackPane();
root.getChildren().add(new Button("Say 'Hello World'"));
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
private void showMsgCheckUpdate() throws IOException {
java.awt.Dimension size = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
javax.swing.JWindow message = new javax.swing.JWindow();
javax.swing.JLabel l = new javax.swing.JLabel("<html><H1>Идет проверка наличия обновлений...</html>");
message.add(l);
message.setOpacity(0.9f);
message.pack();
message.setBounds(size.width/2 - message.getWidth()/2, size.height/2 - message.getHeight()/2, message.getWidth(), message.getHeight());
message.setVisible(true);
// Тут проверка обновления
message.setVisible(false);
message.dispose();
}
}
a Es ist Profilers Screenshot: http://fastpic.ru/view/73/2016/0401/0aa1bc957c73dd026ce5add133f1da5c.png.html
Wir haben die gleiche Situation mit einer Bühne, wenn wir javafx verwenden.
private void showMsgCheckUpdate() throws IOException {
Label l = new Label("Идет проверка наличия обновлений...");
Stage stage = new Stage();
Scene scene = new Scene(l);
scene.getStylesheets().add("");
stage.setScene(scene);
stage.show();
// Тут проверка обновления
stage.close();
}
gibt es einen Screenshot der Profiler: http://fastpic.ru/view/76/2016/0401/80a3297ac660458a0feb327f74e18b01.png.html
Ich muss mein Gedächtnis reinigen, denn diese App isst zu viel, und dies ist eines der Probleme - lebende Objekte nach dem Löschen. – Tereshka
@Tereshka Es gibt keine Möglichkeit, den Garbage Collector zum Entfernen dieser Objekte zu zwingen. Es wird sie entfernen, wenn in der jungen oder alten Generation nicht genug Speicher vorhanden ist (und das Objekt nicht benutzt wird, also genauso wie in Ihrem Fall). Haben Sie versucht, die Liste der Objekte nach dem Minor des vollständigen GC zu sehen? –
@Tereshka Auch den Aufruf von System.gc() ist sinnlos, Java wird GC aufrufen, wenn es nötig ist, nicht wenn wir es erzwingen. –