这将是我在这里的第一篇文章,所以欢迎任何建议。
内存量增加的问题在于这段代码
private void drawChart(Canvas canvas) {
GraphicsContext gc = canvas.getGraphicsContext2D();
Img i = getRecentImage(); // it contains byte[] source (png format). Img is my own class
Image i = new Image(new ByteArrayInputStream(i.getImageBytes()););
gc.drawImage(i, 0, 0);
}
现在发生了什么。一段时间后,在加载了数百张这些图像(它们每个未压缩的100KB)之后,程序崩溃并出现了内存错误。
当我添加
gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
之前
gc.drawImage(i, 0, 0);
一切正常。
这段代码的问题是我不明白为什么清除区域(使其空白)不会造成内存泄漏。 drawImage()方法是否在某处保留对我的对象(byte []数组)的引用,直到它们被gc.clearRect()或...清除?我以为我只是复制粘贴byte []缓冲区,所以我一直在相同的gc内存上运行。