我对Java类加载的理解是它的延迟加载。因此,如果你有一堆Java应用程序附带的未使用的jar,它们只会浪费磁盘空间而不会实际消耗内存。但是,在各种Oracle博客/文档中似乎暗示,压缩配置文件实际上会减少内存占用(here和here)。
使一个简单的是或否的问题不是主观的:
如果我打造“你好世界!” Java应用程序(即仅使用System.out)在使用compact1配置文件而不是完整的SE运行时,它实际上会有更小的运行时内存占用量吗?(我会亲自测试,但无法编译紧凑的配置文件)。
答案 0 :(得分:0)
配置文件compact1加载核心(java.lang。*),安全性,序列化,网络,参考对象,正则表达式,日期和时间,输入/输出,集合,日志记录,并发,反射, JAR,ZIP,版本控制,国际化,JNI,覆盖机制,扩展机制,脚本
Profile compact 2添加 JDBC,RMI,XML,JAXP
Profile compact 3添加安全性(kerberos,acl和sasl),JMX,JNDI,XML JAXP2,管理,工具
可以通过-profile
的{{1}}选项激活这些配置文件。
另请注意,根据documentation,javac
是引导类的一部分:
Bootstrap类是实现Java 2平台的类。 Bootstrap类位于rt.jar和其他几个jar文件中 jre / lib目录。
这可能会让你感到兴奋
您不太可能需要重新定义引导类 路径。非标准选项 -Xbootclasspath 允许您这样做 那些罕见的情况,有必要使用不同的 一组核心课程。
总而言之,使用compact1配置文件回答您的具体问题在运行“Hello world”时不会给您带来更小的内存占用,因为System.out
在引导类中但使用 -Xbootclasspath < / strong>也许可以做一些技巧。
答案 1 :(得分:0)
是的,紧凑的配置文件将减少内存占用。
在JVM启动期间,会发生以下几件事:
不同的紧凑型材包括不同的技术。从而减少了加载对象到内存中的数量。您可以使用以下命令检查确切加载到内存中的内容:
pmap <jvm pid>
在我的覆盆子pi上,配置文件compact1和默认堆大小我有12Mb。
答案 2 :(得分:0)