2016-12-30 16 views
0

JavaFXで非常に単純なGoボードゲームを作成しています。私はアプリケーションでメモリ使用量が増えたことに気がつき、不要なものをすべて減らした後、の最小値の例でも、残業が巨額になりました。画像を描画するときのJavafxメモリ使用量の増加

は、ここでは、コードです:私はgc.drawImageラインを削除すると

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); 
} 
} 

問題は発生しませんが、それはないソリューション、明らかに、です。

Btw。私は、OpenJDK 8でArch Linux 64ビットを使用しています。

+0

私が理解していないこと:あなたはJavaFxの部分が責任があると確信していますか?あなたは、あなたの記憶がどこに費やされているのかを把握するために何らかの種類の記憶プロファイリングを行いましたか? – GhostCat

+0

上記の内容はプログラム全体です。それ以上のことはないので、動作していないJavaFx以外のものがあるかどうかはわかりません。 –

+1

それが実際にプログラム全体であれば、欠けている部分を追加してクラスを完成させたいと思っています。 "ほぼ完成"はまだありません[mcve] – GhostCat

答えて

3

Linux上のJavaFXにおけるメモリリークに関する多くのバグレポートがあります。 たとえば、JDK-8156051またはJDK-8161997です。 このバグが発生したかどうかを確認するには、-Dprism.order=swでプログラムを実行して、バグが継続するかどうかを確認してください。

+0

マイコードこのバグの影響を受けているようです。私は単にスターフィールドを描画し、それをスクロールしています。したがって、毎秒約10-20個の楕円が描かれます。 Linuxでは、約1分でメモリが16GBを超えるようになります。 Windowsでは、これは完全にうまく動作します。 '-Dprism.order = sw'を設定すると、これが修正されました。ありがとう。 (私は妄想になっていました^^) – showp1984

関連する問題