Java jar 文件中大量资源的缺点?
Disadvantages to large resources in Java jar files?
在部署的 Java jar 文件中嵌入大型资源文件是否有任何特别的缺点? (当然,忽略 space、带宽和其他更简单的问题以及随之而来的更大的 jar 文件大小。)
也就是说,在 jars 中包含较大的资源文件是否会导致 class 加载速度变慢,在 JVM 中占用更多内存,或者类似的事情?
jar 文件基本上只是一个 zip 文件,应该有一个中央目录,这样它就不必扫描整个文件来加载存档中的特定文件。我不认为 jar class 加载程序会加载文件中的所有内容,只会加载需要的内容,但我可能弄错了。
类 按需加载。对于普通的 JAR,很少会被急切地加载(除非清单中有特定的条目,我在那里有点生疏,但大多数人不使用它们)。 JVM 根本不会在内存中缓存非 class 资源,因此从 JAR 文件中读取资源与手动从普通 ZIP 文件中读取条目基本相同。我看到的唯一缺点是:
- 每次复制 JAR 时都会复制资源,即使它没有改变,并且
- 资源是从 JAR 文件(已压缩)中读取的,即使它类似于已经压缩的图像。
我认为 ZIP 文件支持按文件压缩算法,并且支持无操作压缩算法,所以第二点可能无关紧要。
在部署的 Java jar 文件中嵌入大型资源文件是否有任何特别的缺点? (当然,忽略 space、带宽和其他更简单的问题以及随之而来的更大的 jar 文件大小。)
也就是说,在 jars 中包含较大的资源文件是否会导致 class 加载速度变慢,在 JVM 中占用更多内存,或者类似的事情?
jar 文件基本上只是一个 zip 文件,应该有一个中央目录,这样它就不必扫描整个文件来加载存档中的特定文件。我不认为 jar class 加载程序会加载文件中的所有内容,只会加载需要的内容,但我可能弄错了。
类 按需加载。对于普通的 JAR,很少会被急切地加载(除非清单中有特定的条目,我在那里有点生疏,但大多数人不使用它们)。 JVM 根本不会在内存中缓存非 class 资源,因此从 JAR 文件中读取资源与手动从普通 ZIP 文件中读取条目基本相同。我看到的唯一缺点是:
- 每次复制 JAR 时都会复制资源,即使它没有改变,并且
- 资源是从 JAR 文件(已压缩)中读取的,即使它类似于已经压缩的图像。
我认为 ZIP 文件支持按文件压缩算法,并且支持无操作压缩算法,所以第二点可能无关紧要。