2009-07-24 17 views

回答

6

JVM調用時僅從Jar加載所需的類。如果應用程序需要一個類,那麼該類和所有其他相關的類將被加載。不知道,但我想這是類加載器從類路徑和加載中定位類的責任。

0

默認的類加載器只在需要時加載所需的東西。如果您的CLASSPATH中有10MB JAR,並且只需要一個.class文件,那麼JVM將只在您的代碼第一次嘗試訪問它時才加載該類。 .class字節碼進入perm空間。

它是「可控」的,因爲您可以編寫自己的類加載器,但需要一些專業知識才能這樣做。

1

它完全依賴於JVM和類加載器。 JVM規範指定類應出現要在其第一次活動使用時加載。類加載器可以在預期中提前加載某些類。實際上,大多數類加載器會盡可能延遲加載。

2

Jar文件是zip文件的一種形式。

這些如何處理高度依賴於JRE。

舊版本的Sun JRE用於映射整個文件的內存。這將分配邏輯內存,但不一定會導致從磁盤加載任何數據。 (32位Windows通常不能分配3 GB的連續內存,儘管您可以在其他操作系統上執行此操作)。

我相信目前的行爲是內存映射在Windows下的文件後部的中央目錄。在其他操作系統下,它只是讀取。這由源碼中的#define控制。

JDK7很可能會做其他事情。

類通常懶惰地裝載。資源每次重新讀取。 java.util.ResourceBundle緩存。

相關問題