2016-12-30 35 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

相關問題