当我的程序启动时,有一个关于等待更新的消息。该信息以单独的方法显示。因此,垃圾收集器应该删除此方法中的所有内容。但是Profiler(我使用NetBeans 8.1)告诉我,所有与Label相连的对象仍然存在(javax.swing对象)。如何删除与Label和Label本身连接的所有对象以清理内存(RAM)?
这些不必要的对象,例如: javax.swing.text.GapContent,javax.swing.text.html.parser.Parser和包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();
}
}
有一个Profiler的屏幕截图:http://fastpic.ru/view/73/2016/0401/0aa1bc957c73dd026ce5add133f1da5c.png.html
当我们使用javafx时,我们对舞台的情况相同。
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();
}
有一个Profiler的屏幕截图:http://fastpic.ru/view/76/2016/0401/80a3297ac660458a0feb327f74e18b01.png.html
答案 0 :(得分:0)
垃圾收集不容易预测,我不会转发某些对象将被删除的事实。
为什么要强制将这些对象从堆中删除?