2016-12-30 104 views
0

我在JavaFX中创建了一个相当简单的Go棋盘游戏。我偶然发现在我的应用程序中增加了内存使用量,并且在减少了不必要的部分之后,似乎即使是最后的例子也会导致超时的大量内存增长,其大约为012到30MB/s的的Javafx在绘制图像时增加内存使用量

下面的代码:

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线不会出现问题,但是这显然不是一个解决方案。

Btw。我在OpenJDK 8上使用Arch Linux 64位版本

+0

我不明白:你确定JavaFx的部分是责怪?你有没有做过任何类型的记忆分析来确定你的记忆力在哪里? – GhostCat

+0

你上面看到的是整个程序。除此之外没有什么比这更重要的了,所以我不知道除了JavaFx之外,是否还有其他的东西没有用。 –

+1

好吧,如果那真的是整个程序,那么你想添加缺少的部分来完成你的课程。 “几乎完整”仍然不是[mcve] – GhostCat

回答

3

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

+0

我的代码似乎也受到这个错误的影响。我只是画一个明星领域并滚动它。所以每秒钟绘制10-20个椭圆。在Linux上,这会在一分钟内将内存增加到16GB以上。在Windows上,这运行得很好。设置'-Dprism.order = sw'为我解决了这个问题。谢谢。 (我越来越偏执^^) – showp1984

相关问题