2015-02-11 35 views
4

我對Java類加載的理解是它的懶加載。因此,如果你有一堆Java應用程序附帶的未使用的jar文件,它們只會浪費磁盤空間而不會真正消耗內存。然而,它似乎暗示在各種Oracle博客/文檔中,壓縮配置文件實際上會減少內存佔用(herehere)。Java Compact配置文件實際上會減少內存佔用量嗎?

爲了使一個簡單的yes或no的問題,是不是主觀的:

如果我做一個「世界,你好!」 Java應用程序(即僅使用System.out)在通過compact1配置文件運行時實際上是否具有較小的運行時內存佔用量,而不是完整的SE?(我會自己測試,但編譯緊湊配置文件時遇到問題)。

+0

是的。使用簡潔的配置文件,整個JRE不會被加載到內存中。只有所需的運行時間庫被加載到內存中。當應用程序類被延遲加載時,當JRE啓動時,JRE類將被加載到內存中。 – 2015-02-11 18:05:19

+0

聖潔的廢話!因此,基本上'rt.jar'中的所有內容都會被加載,無論它是否被使用?所以它只是將所有這些類加載到內存中,包括corba和rmi廢話?這只是特定於'rt.jar'嗎?他們爲什麼要這樣做?預加載性能更好嗎?你有一個鏈接,說rt.jar完全加載到init? – 2015-02-11 18:09:51

+0

你必須問Oracle(或Sun)爲什麼。作爲一個例子,我懷疑這個決定是增加啓動時間,而不是讓應用程序停止並等待加載corba類。個人電腦的內存在1995年便宜而豐富。智能手機已經有十年的時間了。 – 2015-02-11 18:13:51

回答

0

還有爲三個緊湊的輪廓,根據documentation:(。*的java.lang)

檔案compact1負荷核心,安全性,系列化,網絡,參考對象,正則表達式,日期和時間,輸入/輸出,類別,記錄,併發,反射,JAR,ZIP,版本,國際化,JNI,覆蓋機制,擴展機制,腳本

資料緊湊2增加 JDBC,RMI,XML,JAXP

簡介緊湊型3增加安全(Kerberos的,ACL和SASL),JMX,JNDI,XML JAXP2,管理,規範

這些配置可以通過量的javac-profile選項被激活。也

注意System.out是根據documentation自舉類的一部分:

自舉類是實現Java 2平臺的類。 引導程序類位於jrt/lib目錄中的rt.jar和其他幾個jar文件中。

,這可能interssed你

這是非常不可能的,你將需要重新定義引導類 路徑。非標準選項-Xbootclasspath允許您在 中這樣做,在這種情況下必須使用不同的 核心類。

所以在最後,使用compact1簡檔回答您的具體問題將在運行時的「Hello world」,因爲System.out是自舉類,但使用-Xbootclasspath也許可以不給你一個更小的內存佔用把戲。

0

是的,緊湊的配置文件將減少內存佔用。

在JVM啓動幾件事情發生:加載到內存

  • 本地庫
  • rt.jar中加載到內存中
  • 引用的庫加載到,只有當他們實際使用的內存

不同的緊湊型材包括不同的技術組合。從而將加載的對象的數量減少到內存中。你可以查閱一下使用命令恰好加載到內存:

pmap <jvm pid> 

我與輪廓compact1和默認堆大小我得爲12Mb樹莓派。