在我的java GUI应用程序中,我有一些需要重复扩展的组件,我使用以下代码执行此操作:
Image newImage = myimage.getScaledInstance(width, height, Image.SCALE_REPLICATE);
ImageIcon newIcon = new ImageIcon(newImage);
this.setIcon(newIcon);
this.setSize(width,height);
//increment width, height
一开始这个工作正常,但经过多次迭代(几百次)后,新的ImageIcon()构造函数基于一些简单的时间检查花费了过多的时间(大约1秒)。其余的代码很快。
为什么在多次迭代后会发生这种情况,如何在迭代次数增加时使其停止减速? (在后台线程中加载图像将不起作用,因为加载图像不是恒定时间操作。)
答案 0 :(得分:2)
看看The Perils of Image.getScaledInstance()。这可能不是问题,但在尝试替代方案之前你不会知道。
答案 1 :(得分:0)
我记得之前的Q / A是图像加载导致内存问题的地方。我认为你需要追求这是一个内存泄漏的理论:
通过在启用GC日志记录的情况下运行JVM来确认这是问题,并查看日志消息与观察到的减速之间是否存在某种关联。 (以这种或那种方式确认需要一分钟左右。)
使用您最喜爱的内存分析器尝试追踪泄漏。