我在JavaFX中创建了一个非常简单的Go棋盘游戏。我偶然发现我的应用程序中的内存使用量不断增加,并且在减少了所有不必要的内容之后,似乎即使最小示例也会导致超时内存增长,其强度大约为<100> 100MB / s 。
以下是代码:
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Group root = new Group();
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 600, 600));
Canvas canvas = new Canvas(600, 600);
Image bg = new Image("resources/images/background2.jpg", 600, 600, false, false);
root.getChildren().add(canvas);
GraphicsContext gc = canvas.getGraphicsContext2D();
new AnimationTimer() {
@Override
public void handle(long l) {
gc.drawImage(bg, 0, 0, 600, 600, 0, 0, 600, 600);
}
}.start();
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
当我删除gc.drawImage行时,问题不会发生,但显然不是解决方案。
顺便说一下。我正在使用Arch Linux 64位和OpenJDK 8
答案 0 :(得分:3)
Linux上的JavaFX中有很多关于内存泄漏的错误报告。
例如JDK-8156051或JDK-8161997。
要验证您是否遇到此错误,请尝试使用-Dprism.order=sw
运行您的程序,并查看错误是否仍然存在。