【问题标题】:JavaFX image loading memory leak?JavaFX图像加载内存泄漏?
【发布时间】:2017-01-27 03:58:33
【问题描述】:

我正在尝试为“手势绘图”构建一个应用程序,它基本上只是按设定的时间间隔显示图像的幻灯片。我注意到,每当我加载一个例如小于 1MB 的新图像时,我的应用程序的内存使用量就会增加超过 20MB,每次加载一个新图像。

我尝试了两种方法,第一种是使用自定义“ImagePane” - 为了能够使用窗口调整图像大小 - 将给定图像加载到其样式表 (-fx-background-image) 中,以及第二个是使用setImage() 方法的常规 ImageView。在这两种情况下,我都注意到内存显着增加。

现在我的问题是:这是正常行为、已知的内存泄漏还是我做错了什么?如有必要,我可以提供整个代码,不过目前这只是一个很大的原型混乱......

【问题讨论】:

  • 您是否将图像 file 大小与显示图像所需的内存进行比较?这些是完全不同的东西。
  • 嗯,我知道它们是,但我仍然不明白为什么每次加载 800kb 2000x3000 图像时,RAM 使用量会增加超过 20MB。
  • 2000x3000 = 600 万像素。每个像素由 4 个字节表示(红色、绿色、蓝色和 alpha 各一个)。 4 字节 x 600 万像素 = 2400 万字节。对我来说似乎很有意义。
  • 是的,但为什么它一直加起来?
  • 因为您不断加载更多图像?我真的不明白你认为问题是什么。

标签: java image javafx


【解决方案1】:

这是正常行为。加载新图像时,每个像素将消耗大约 4 个字节。只要您不意外保留对不再使用的图像的引用,它们就会以正常方式进行垃圾收集。您几乎无法控制垃圾收集器何时回收内存,您应该将其留给 JVM。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多