在Java中加载和缓存图像的最佳方法是什么?
我收集了1000多张16×16像素的图片,这些图片是我用Java制作的游戏所需要的 在不耗尽JVM可用内存的情况下,存储磁贴的最佳方法是什么 我认为产生1000多个BuffereImage可能不明智在Java中加载和缓存图像的最佳方法是什么?,java,performance,image,caching,storage,Java,Performance,Image,Caching,Storage,我收集了1000多张16×16像素的图片,这些图片是我用Java制作的游戏所需要的 在不耗尽JVM可用内存的情况下,存储磁贴的最佳方法是什么 我认为产生1000多个BuffereImage可能不明智 保持图像处于就绪状态的主要目的是加载地图,这将基于地图文件动态生成。我不认为缓冲1000多个图像是最佳选择,因为它会消耗大量内存。可能最好实现不同的逻辑,如仅缓冲最常用的图像,如100左右(仅使用随机数,但您需要计算出频繁使用的图像的数量),如果缓存的图像超过这些图像,请在需要时加载它们。您尝试过吗
保持图像处于就绪状态的主要目的是加载地图,这将基于地图文件动态生成。我不认为缓冲1000多个图像是最佳选择,因为它会消耗大量内存。可能最好实现不同的逻辑,如仅缓冲最常用的图像,如100左右(仅使用随机数,但您需要计算出频繁使用的图像的数量),如果缓存的图像超过这些图像,请在需要时加载它们。您尝试过吗?如果每个像素有4个字节,16 x 16 x 4 x 1000大约是1Mb+开销。那已经不多了。如果您负担不起,那么可以创建更大的图像,加载这些图像,然后根据需要提取瓷砖。首先,加载所有这些图像真的是个问题吗。16×16像素的1000幅图像为256000像素。即使每个像素使用4个字节,也只会产生1 MB的图像数据,这并不多 如果您真的想/需要减少加载到内存中的图像数量,则只能将地图所需的可视分幅/图像加载到内存中,然后再加载一些以提高游戏的响应能力 例如,如果您的游戏显示
n
bym
tiles的地图,您可以将n+2
bym+2
tiles加载到内存中,或以视觉方式表示(其中*是可见的tiles,+额外加载的tiles加载到内存中):
当用户移动地图时,您将删除对不再需要的分幅的引用,并开始加载新分幅。由于内存中保留了一个磁贴,因此移动地图应该仍然非常顺利。当然,如果你的分幅很小,或者移动地图速度很快,你可以增加你使用的额外分幅的数量
+++++++++++
+*********+
+*********+
+*********+
+++++++++++