我在KDE上使用64位Linux機器(8GB RAM)作爲我的IDE。我也在使用Oracle的JDK。我用JavaFX製作了一個小動畫,還有一些網頁上的照片讓地球繞着太陽轉動。每當我運行它時,動畫都能正常工作,但它會穩定地吃掉我電腦上的所有RAM,直到一切凍結。這通常不到5分鐘。JVM消耗40行代碼中的所有RAM
package Practice;
/**
* For some reason, this code gobbles up memory, and freezes computers
*/
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class BasicAnimation extends Application {
public BasicAnimation() {
// TODO Auto-generated constructor stub
}
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Orbit");
Group root = new Group();
Scene scene = new Scene(root);
primaryStage.setScene(scene);
Canvas canvas = new Canvas(512,512);
root.getChildren().add(canvas);
GraphicsContext gc = canvas.getGraphicsContext2D();
Image earth = new Image(getClass().getResourceAsStream("earth.png"), 25.0, 25.0 ,false, false);
Image sun = new Image(getClass().getResourceAsStream("sun.jpg"), 50.0, 50.0, false, false);
Image space = new Image(getClass().getResourceAsStream("space.jpg"));
final long startNanoTime = System.nanoTime();
new AnimationTimer() {
public void handle(long currentNanoTime) {
double t = (currentNanoTime - startNanoTime)/1000000000.0 ;
double x = 232 + 128 * Math.cos(t);
double y = 232 + 128 * Math.sin(t);
//background image clears canvas
gc.drawImage(space, 0, 0);
gc.drawImage(earth, x, y);
gc.drawImage(sun, 196, 196);
}
}.start();
primaryStage.show();
}
}
我設置了-Xms512m,-Xmx512m和-Xss512m。是否有什麼我做錯了,可能會導致這種情況,你能解釋爲什麼會發生或如何避免它?
如果我的問題有問題,請告訴我。
編輯:增加了更多的信息
地球圖像是2356x2356,我將它設置爲在程序25x25px。太陽圖像是750x750,我在程序中將它設置爲50x50。空間圖像爲1920x1080,背景爲512x512像素。
指向圖像
孫:https://www.thesun.co.uk/wp-content/uploads/2016/06/download.jpg?w=750&strip=all
地球:https://openclipart.org/image/2400px/svg_to_png/218125/3d-Earth-Globe.png
空間:http://www.gunnars.com/wp-content/uploads/2014/08/Space.jpg
我猜的一個很好的例子'gc.drawImage'是罪魁禍首 –
什麼是你的圖像的尺寸? – TameHog
請參閱[Java FX動畫示例](http://docs.oracle.com/javafx/2/get_started/animation.htm) –