Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中加载和缓存图像的最佳方法是什么?_Java_Performance_Image_Caching_Storage - Fatal编程技术网

在Java中加载和缓存图像的最佳方法是什么?

在Java中加载和缓存图像的最佳方法是什么?,java,performance,image,caching,storage,Java,Performance,Image,Caching,Storage,我收集了1000多张16×16像素的图片,这些图片是我用Java制作的游戏所需要的 在不耗尽JVM可用内存的情况下,存储磁贴的最佳方法是什么 我认为产生1000多个BuffereImage可能不明智 保持图像处于就绪状态的主要目的是加载地图,这将基于地图文件动态生成。我不认为缓冲1000多个图像是最佳选择,因为它会消耗大量内存。可能最好实现不同的逻辑,如仅缓冲最常用的图像,如100左右(仅使用随机数,但您需要计算出频繁使用的图像的数量),如果缓存的图像超过这些图像,请在需要时加载它们。您尝试过吗

我收集了1000多张16×16像素的图片,这些图片是我用Java制作的游戏所需要的

在不耗尽JVM可用内存的情况下,存储磁贴的最佳方法是什么

我认为产生1000多个BuffereImage可能不明智


保持图像处于就绪状态的主要目的是加载地图,这将基于地图文件动态生成。

我不认为缓冲1000多个图像是最佳选择,因为它会消耗大量内存。可能最好实现不同的逻辑,如仅缓冲最常用的图像,如100左右(仅使用随机数,但您需要计算出频繁使用的图像的数量),如果缓存的图像超过这些图像,请在需要时加载它们。

您尝试过吗?如果每个像素有4个字节,16 x 16 x 4 x 1000大约是1Mb+开销。那已经不多了。如果您负担不起,那么可以创建更大的图像,加载这些图像,然后根据需要提取瓷砖。

首先,加载所有这些图像真的是个问题吗。16×16像素的1000幅图像为256000像素。即使每个像素使用4个字节,也只会产生1 MB的图像数据,这并不多

如果您真的想/需要减少加载到内存中的图像数量,则只能将地图所需的可视分幅/图像加载到内存中,然后再加载一些以提高游戏的响应能力

例如,如果您的游戏显示
n
by
m
tiles的地图,您可以将
n+2
by
m+2
tiles加载到内存中,或以视觉方式表示(其中*是可见的tiles,+额外加载的tiles加载到内存中):

当用户移动地图时,您将删除对不再需要的分幅的引用,并开始加载新分幅。由于内存中保留了一个磁贴,因此移动地图应该仍然非常顺利。当然,如果你的分幅很小,或者移动地图速度很快,你可以增加你使用的额外分幅的数量

+++++++++++
+*********+
+*********+
+*********+
+++++++++++