標籤:指定 map point 一個 不同 應用 情況下 class res
Java classes在Java hotspot VM內部表示為類別中繼資料。在之前Java hotspot VM版本,類別中繼資料在持久代中分配。在JDK8,持久代被移除,並且類別中繼資料在本地記憶體中分配。 預設情況下,本地記憶體都可以被用於類別中繼資料。可以使用MaxMetaspaceSize 選項設定在本地記憶體允許設定的最大類別中繼資料。Java hotspot VM顯示的管理中繼資料空間。OS請求空間,然後分成分區,類載入器分配中繼資料空間從分區中,當類沒有被載入器載入時,它的分區交被回收以備OS重新使用。中繼資料使用由mmap分配的空間,而不是由malloc分配的。如果UseCompressedOops 與UseCompressedClassesPointers 選項同時被使用,那麼兩種邏輯不同的本地記憶體地區會處理類別中繼資料。 當類被卸載時,類別中繼資料將被釋放。由於記憶體回收而被卸載的Java classes,記憶體回收會卸載並釋放類別中繼資料。當類別中繼資料達到一定水平時,會引起記憶體回收。在記憶體回收後,可以根據類別中繼資料釋放的空間量來確定是升高high-water mark還是降低high-water mark。如果升高high-water mark可能會引起記憶體回收。high-water mark最初設定為MetaspaceSize選項的值。根據MaxMetaspaceFreeRatio 與MinMetaspaceFreeRatio兩個選項決定high-water mark的提高還是降低。如果已經分配的類別中繼資料空間佔比大於MaxMetaspaceFreeRatio的值,則high-water mark將降低。如果已經分配的類別中繼資料空間佔比小於MinMetaspaceFreeRatio的值,high-water mark將提升。 可以為MetaspaceSize 選擇指定更高的值,以避免對類別中繼資料的過早記憶體回收。為應用程式分配多少類別中繼資料空間取決於應用程式,沒有一個通用標準。 Heap PSYoungGen total 10752K, used 4419K [0xffffffff6ac00000, 0xffffffff6b800000, 0xffffffff6b800000) eden space 9216K, 47% used [0xffffffff6ac00000,0xffffffff6b050d68,0xffffffff6b500000) from space 1536K, 0% used [0xffffffff6b680000,0xffffffff6b680000,0xffffffff6b800000) to space 1536K, 0% used [0xffffffff6b500000,0xffffffff6b500000,0xffffffff6b680000) ParOldGen total 20480K, used 20011K [0xffffffff69800000, 0xffffffff6ac00000, 0xffffffff6ac00000) object space 20480K, 97% used [0xffffffff69800000,0xffffffff6ab8add8,0xffffffff6ac00000) Metaspace used 2425K, capacity 4498K, committed 4864K, reserved 1056768K class space used 262K, capacity 386K, committed 512K, reserved 1048576K used為載入類使用的空間capacity為可當前分區中可用的中繼資料空間committed為可用的分區數量reserved為中繼資料保留的空間數量
類別中繼資料Class Metadata