绘制图像时Javafx的内存使用量增加
Posted
技术标签:
【中文标题】绘制图像时Javafx的内存使用量增加【英文标题】:Javafx growing memory usage when drawing image 【发布时间】:2016-12-30 11:41:54 【问题描述】:我正在用 JavaFX 创建一个非常简单的围棋棋盘游戏。我偶然发现我的应用程序中的内存使用量增加了,在减少了所有不必要的内容之后,似乎即使是 minimal 示例也会导致巨大的内存增长超时,大约 50 到 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 行时不会出现问题,但这显然不是解决方案。
顺便说一句。我正在使用带有 OpenJDK 8 的 Arch Linux 64 位
【问题讨论】:
我不明白的是:您确定要怪 JavaFx 部分吗?你有没有做过任何类型的内存分析来确定你的内存用在了哪里? 你在上面看到的是整个程序。仅此而已,所以我不知道除了 JavaFx 是否还有其他不起作用的东西。 好吧,如果这真的是整个程序,那么您想添加缺少的部分来完成您的课程。 “几乎完成”仍然不是minimal reproducible example 现在我把里面的所有东西都插入了。 你的内存设置是什么? -Xmx ? 【参考方案1】:有大量关于 Linux 上 JavaFX 内存泄漏的错误报告。
例如JDK-8156051 或JDK-8161997。
要验证您是否遇到此错误,请尝试使用-Dprism.order=sw
运行您的程序并查看错误是否仍然存在。
【讨论】:
我的代码似乎也受到了这个错误的影响。我只是在绘制一个星域并滚动它。所以每秒大约绘制 10-20 个椭圆。在 Linux 上,这会在大约一分钟内将内存增加到 16GB 以上。在 Windows 上,这运行得非常好。设置-Dprism.order=sw
为我解决了这个问题。谢谢。 (我越来越偏执了^^)以上是关于绘制图像时Javafx的内存使用量增加的主要内容,如果未能解决你的问题,请参考以下文章