-
Bug
-
Resolution: Fixed
-
P3
-
fx2.1
-
Win7 Pro, JDK 7, JavaFX2.1
When creating a new Scene() and replacing a previous Scene on the Stage with this new Scene the old scene is not getting garbage collected.
This small app below gives me an OutOfMemory exception after pressing the "Create New" button 3-4 times. For testing i set: -Xms10m -Xmx16m
There is no reference anymore to the previous scene. Why does GC not remove the unfererenced objects ? In the profiler I see the Heap growing.
[code]
import java.util.Random;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class TestFX extends Application {
Stage pStage;
Random randomGenerator = new Random();
@Override
public void start(Stage stage) throws Exception {
pStage = stage;
Platform.runLater(new Runnable() {
public void run() {
StackPane stack = new StackPane();
stack.setPrefWidth( 640);
stack.setPrefHeight( 480);
stack.setAlignment( Pos.TOP_LEFT);
for (int i=0; i<100;i++){
Button but = new Button("Button " + i);
int randomX = randomGenerator.nextInt( 620);
int randomY = randomGenerator.nextInt( 470);
but.setTranslateX( randomX);
but.setTranslateY( randomY);
stack.getChildren().add( but);
}
Button makeNewButton = new Button("Make new");
makeNewButton.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
makeNewButton.setOnAction( new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
try {
start( pStage);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
BorderPane border = new BorderPane();
border.setTop( makeNewButton);
border.setCenter( stack);
Scene scene = new Scene( border, 640, 480, Color.WHITESMOKE);
pStage.setScene( scene);
pStage.show();
}
});
}
public static void main(String[] args) throws Exception{
Application.launch(args);
}
}
[/code]
This small app below gives me an OutOfMemory exception after pressing the "Create New" button 3-4 times. For testing i set: -Xms10m -Xmx16m
There is no reference anymore to the previous scene. Why does GC not remove the unfererenced objects ? In the profiler I see the Heap growing.
[code]
import java.util.Random;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class TestFX extends Application {
Stage pStage;
Random randomGenerator = new Random();
@Override
public void start(Stage stage) throws Exception {
pStage = stage;
Platform.runLater(new Runnable() {
public void run() {
StackPane stack = new StackPane();
stack.setPrefWidth( 640);
stack.setPrefHeight( 480);
stack.setAlignment( Pos.TOP_LEFT);
for (int i=0; i<100;i++){
Button but = new Button("Button " + i);
int randomX = randomGenerator.nextInt( 620);
int randomY = randomGenerator.nextInt( 470);
but.setTranslateX( randomX);
but.setTranslateY( randomY);
stack.getChildren().add( but);
}
Button makeNewButton = new Button("Make new");
makeNewButton.setStyle("-fx-font: 22 arial; -fx-base: #b6e7c9;");
makeNewButton.setOnAction( new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
try {
start( pStage);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
BorderPane border = new BorderPane();
border.setTop( makeNewButton);
border.setCenter( stack);
Scene scene = new Scene( border, 640, 480, Color.WHITESMOKE);
pStage.setScene( scene);
pStage.show();
}
});
}
public static void main(String[] args) throws Exception{
Application.launch(args);
}
}
[/code]
- duplicates
-
JDK-8126415 Memory Leak in Scene
- Closed
- relates to
-
JDK-8126415 Memory Leak in Scene
- Closed