我在KDE上使用64位
linux机器(8GB内存),
Eclipse作为我的IDE.我也在使用Oracle的JDK.我使用JavaFX制作了一个小动画,并在网上制作了一些图片,以围绕太阳旋转地球.每当我运行它,动画正常工作,但它会稳定地吃掉我电脑上的所有RAM,直到一切都冻结.这通常不到5分钟.
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.有没有什么我做错了可能导致这种情况,你能解释为什么会发生这种情况或者如何避免它?
如果我的问题有问题,请告诉我.
编辑:添加了更多信息
地球图像是2356×2356,我在程序中将其设置为25x25px.太阳图像是750×750,我在程序中将其设置为50×50.空间图像为1920×1080,背景为512×512像素.
图像链接
太阳: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
最佳答案 我的代码中看不出任何错误.它可能不是在JavaFX中执行此操作的最佳方式,但它对我来说看起来非常有效,不应该占用任何内存.特别是当你说你和Luke的其他代码有同样的问题我怀疑有一些Linux bug.您是否尝试在其他操作系统上运行程序?如果您提供图片链接,其他人也可以尝试.
此链接可能与您的问题有关:
javafx-unexplainable-leaks-memory-on-linux
测试
我在Mac上运行你的程序,没有内存泄漏,几乎没有CPU使用,正如我所料.