显示图像时内存消耗增加50 MB

时间:2013-02-15 06:13:10

标签: java swing javafx-2

我有一个JavaFX应用程序(Swing用户输入也可能有帮助),这基本上就是Image Gallery。它会监视文件夹,只要添加了任何图像,图像就会显示在屏幕上。

随着更多图像的添加,应用程序内存消耗量也越来越大。在分析时,我观察到在添加Image(大小为1.3 MB)时,内存消耗增加了大约50 MB。包含Image的类是一个包含ImageView的简单Image。 有没有人有类似的经历? Windows& S的行为相同MAC

PS:我知道这里的任何代码都会有所帮助,但没有什么可以展示的。正如我所说,有一个ImageView列表,其中包含Image。 ImageView列表绑定到另一个Listl1。在检测到图像时,图像被添加到l1,因此被添加到屏幕上显示的实际列表中

编辑:

我刚试了一个示例代码。我观察到,在它加载的每个Iamge上(在这种情况下为2.3 MB),每个内存增加12 MB:

package side;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ScrollBar;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Test extends Application {

public static void main(String... args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    ScrollBar bar = new ScrollBar();
    bar.setOrientation(Orientation.VERTICAL);


    final VBox box = new VBox();
    Group root = new Group();
    root.getChildren().addAll(box, bar);
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.setTitle("Layout Sample");
    primaryStage.show();


    for (int ik = 0; ik < 6; ik++) {
        System.out.println("1");
        ImageView i = new ImageView();
        InputStream is = new FileInputStream(new File("C:\\Users\\Jatin\\Documents\\BarcodeNew\\w.png"));
        Image im = new Image(is);
        i.setImage(im);
        box.getChildren().add(i);
        is.close();
    }

    //r.close();


}

}

1 个答案:

答案 0 :(得分:1)

发现了两个问题:

  1. 我没有关闭我的流。
  2. 来自this
  3.   

    请记住,PNG图像的文件大小和内存中未压缩图像的内存消耗量是非常不同的。

    在指定Image的大小时,一切正常。