メモリ リークを引き起こすサンプル アプリケーションを作成しました。
問題は、シーンを「リロード」する必要があることです。それぞれ 1 つのボタン (ButtonBar と ButtonFoo) を持つ 2 つのシーン (Bar と Foo) がある場合、ボタンは現在のシーンを変更して新しいシーンを作成します。ButtonBar と ButtonFoo を 5 分間 (またはそれ以下) クリックし続けると、その単純なプログラムのメモリ消費量がどんどん増えていきます。
Bar.java
public class Bar implements Initializable {
@FXML
private Label label;
@FXML
private void toFoo(ActionEvent event) {
try {
Button button = (Button) event.getSource();
Parent root = FXMLLoader.load(getClass().getResource("Foo.fxml"));
Stage currentStage = (Stage) button.getScene().getWindow();
currentStage.setScene(new Scene(root));
} catch (IOException ex) {
Logger.getLogger(Bar.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Foo.java は、de fxml のロードを変更するのと同じです。
fxml にはボタンが 1 つだけ含まれています。
<Button id="buttonBar" layoutX="126" layoutY="90" text="Bar!" onAction="#toFoo" fx:id="buttonBar" />
本当のメモリリークの問題はありますか? これを行う別の方法を知っている人はいますか?このアプリが存続し、サービスのように永遠に変化を続けることを望んでいます。ありがとう