gpt4 book ai didi

java - 关闭 JavaFX Stage 后如何释放内存?

转载 作者:IT王子 更新时间:2023-10-28 23:35:43 27 4
gpt4 key购买 nike

我正在创建一个 JavaFx 应用程序,当我单击一个按钮时,它将在新的 stage 中打开一个表。但我的问题是,当我关闭该表的 stage 时,应用程序没有释放内存。 javaFX有什么问题吗?还是我必须做点别的?

我尝试在该阶段结束时将所有内容设置为空,但内存仍然没有释放。

table 台闭幕式:

TableView tableView;

Stage myStage;

this.myStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
TableController.this.myStage.close();
tableView.getItems().clear();
tableView.getColumns().clear();
tableView = null;
TableController.this.myStage = null;
System.gc();
}
});

我创建了一个名为 replaceScene 的方法来使用 fxml 文件为舞台加载场景。它将返回它的 Controller 并将场景设置到舞台中。

 public static Initializable replaceScene(String fXml, Stage mystage) {
InputStream in = null;
try {
FXMLLoader loader = new FXMLLoader();
in = Utility.class.getResourceAsStream(fXml);
loader.setLocation(Utility.class.getResource(fXml));
loader.setBuilderFactory(new JavaFXBuilderFactory());
AnchorPane page;
try {
page = (AnchorPane) loader.load(in);
} finally {
in.close();
}
Scene scene = new Scene(page);
mystage.setScene(scene);
return loader.getController();
} catch (Exception ex) {
return null;
}
}

我首先为 fxml 文件获取 StreamObject (java.io.InputStream),然后将此 streamObject 传递给 FxmlLoader 以加载页面,

in = Utility.class.getResourceAsStream(fXml);

我在 in 输入流对象中获取 sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream 对象

最佳答案

内存管理和 JavaFX 没有什么特别之处。如果达到定义的内存限制,GC 将运行。设置 object = null 后它不会运行。即使调用 System.gc() 也不意味着 GC 会运行。来自 Javadoc :

Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse.

要确定您是否在某处发生内存泄漏,您可以使用 VisualVM例如查看您的应用程序是否(以及为什么)内存不足。

关于java - 关闭 JavaFX Stage 后如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15086311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com