Java Compact Profiles是否会真正减少内存占用?

时间:2015-02-11 17:55:08

标签: java

我对Java类加载的理解是它的延迟加载。因此,如果你有一堆Java应用程序附带的未使用的jar,它们只会浪费磁盘空间而不会实际消耗内存。但是,在各种Oracle博客/文档中似乎暗示,压缩配置文件实际上会减少内存占用(herehere)。

使一个简单的是或否的问题不是主观的:

如果我打造“你好世界!” Java应用程序(即仅使用System.out)在使用compact1配置文件而不是完整的SE运行时,它实际上会有更小的运行时内存占用量吗?(我会亲自测试,但无法编译紧凑的配置文件)。

3 个答案:

答案 0 :(得分:0)

根据documentation

,有三个紧凑的个人资料

配置文件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}}选项激活这些配置文件。

另请注意,根据documentationjavac是引导类的一部分:

  

Bootstrap类是实现Java 2平台的类。   Bootstrap类位于rt.jar和其他几个jar文件中   jre / lib目录。

这可能会让你感到兴奋

  

您不太可能需要重新定义引导类   路径。非标准选项 -Xbootclasspath 允许您这样做   那些罕见的情况,有必要使用不同的   一组核心课程。

总而言之,使用compact1配置文件回答您的具体问题在运行“Hello world”时不会给您带来更小的内存占用,因为System.out在引导类中但使用 -Xbootclasspath < / strong>也许可以做一些技巧。

答案 1 :(得分:0)

是的,紧凑的配置文件将减少内存占用。

在JVM启动期间,会发生以下几件事:

  • 本地库加载到内存中
  • rt.jar已加载到内存中
  • 仅在实际使用
  • 时将引用的库加载到内存中

不同的紧凑型材包括不同的技术。从而减少了加载对象到内存中的数量。您可以使用以下命令检查确切加载到内存中的内容:

pmap <jvm pid>

在我的覆盆子pi上,配置文件compact1和默认堆大小我有12Mb。

答案 2 :(得分:0)

请查看此video链接from

它显示Java8允许使用配置文件选择创建不同大小的JRE,我们可以启动特定的运行时以减少内存占用。可以通过jdeps来确定需要哪个应用程序配置文件,并以此为基础启动最小的运行时。

jrecreate是Embedded Java Development Kit的工具部分,用于创建不同的配置文件jre。