Javafx在绘制图像时增加内存使用量

时间:2016-12-30 11:41:54

标签: java memory javafx memory-leaks

我在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

1 个答案:

答案 0 :(得分:3)

Linux上的JavaFX中有很多关于内存泄漏的错误报告。 例如JDK-8156051JDK-8161997。 要验证您是否遇到此错误,请尝试使用-Dprism.order=sw运行您的程序,并查看错误是否仍然存在。