java.lang.management パッケージ - MemoryPoolMXBean インタフェース
ManagementFactory クラスを介して取得できるMXBeanの一つが実装するインタフェース。
- java.lang.management パッケージ - ManagementFactory クラス - HHeLiBeXの日記 正道編
- MemoryPoolMXBean (Java 2 Platform SE 5.0)
java.lang.managementパッケージに属するMXBeanのうち、詳細な説明が書いてある2つ目。(1つ目は「java.lang.management パッケージ - MemoryMXBean インタフェース - HHeLiBeXの日記 正道編」参照)
で、同様に超訳。
メモリタイプ(Memory Type)
Java VMはheapとnon-heap memoryを持つ。Java VMは1つ以上のメモリプールを持ち、各メモリプールはheapまたはnon-heapのいずれかを表す。
メモリ使用量監視(Memory Usage Monitoring)
メモリプールは次の属性を持つ。
メモリ使用量の監視については後で。
-
- -
import java.lang.management.ManagementFactory; import java.lang.management.MemoryPoolMXBean; import java.lang.management.MemoryUsage; import java.util.List; public class Main { /** * @param args */ public static void main(String[] args) { System.out.printf("%-20s = %s\n", "java.version", System.getProperty("java.version")); System.out.printf("%-20s = %s\n", "java.vendor", System.getProperty("java.vendor")); System.out.printf("%-20s = %s\n", "java.runtime.version", System.getProperty("java.runtime.version")); System.out.printf("%-20s = %s\n", "os.name", System.getProperty("os.name")); System.out.println("========"); List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans(); System.out.printf("%-20s: %s\n", "# of MXBeans", memoryPoolMXBeans.size()); { int i = 0; for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeans) { System.out.printf("[%2d]\n", i); System.out.printf(" %-24s: %s\n", "Name", memoryPoolMXBean.getName()); System.out.printf(" %-24s:\n", "MemoryManagerNames"); { String[] memoryManagerNames = memoryPoolMXBean.getMemoryManagerNames(); for (int j = 0; j < memoryManagerNames.length; ++j) { System.out.printf(" [%2d]: %s\n", j, memoryManagerNames[j]); } } System.out.printf(" %-24s: %s\n", "Type", memoryPoolMXBean.getType()); System.out.printf(" %-24s: %s\n", "isValid", memoryPoolMXBean.isValid()); System.out.printf(" %-24s:\n", "Usage"); if (memoryPoolMXBean.isValid()) { MemoryUsage usage = memoryPoolMXBean.getUsage(); System.out.printf(" %-24s: %20d\n", "Committed", usage.getCommitted()); System.out.printf(" %-24s: %20d\n", "Init", usage.getInit()); System.out.printf(" %-24s: %20d\n", "Max", usage.getMax()); System.out.printf(" %-24s: %20d\n", "Used", usage.getUsed()); } System.out.printf(" %-24s:\n", "PeakUsage"); if (memoryPoolMXBean.isValid()) { MemoryUsage peakUsage = memoryPoolMXBean.getPeakUsage(); System.out.printf(" %-24s: %20d\n", "Committed", peakUsage.getCommitted()); System.out.printf(" %-24s: %20d\n", "Init", peakUsage.getInit()); System.out.printf(" %-24s: %20d\n", "Max", peakUsage.getMax()); System.out.printf(" %-24s: %20d\n", "Used", peakUsage.getUsed()); } System.out.printf(" %-24s: %s\n", "isUsageThresholdSupported", memoryPoolMXBean.isUsageThresholdSupported()); if (memoryPoolMXBean.isUsageThresholdSupported()) { System.out.printf(" %-24s: %s\n", "UsageThreshold", memoryPoolMXBean.getUsageThreshold()); System.out.printf(" %-24s: %s\n", "UsageThresholdCount", memoryPoolMXBean.getUsageThresholdCount()); System.out.printf(" %-24s: %s\n", "isUsageThresholdExceeded", memoryPoolMXBean.isUsageThresholdExceeded()); } System.out.printf(" %-24s:\n", "CollectionUsage"); { MemoryUsage collectionUsage = memoryPoolMXBean.getCollectionUsage(); if (collectionUsage != null) { System.out.printf(" %-24s: %20d\n", "Committed", collectionUsage.getCommitted()); System.out.printf(" %-24s: %20d\n", "Init", collectionUsage.getInit()); System.out.printf(" %-24s: %20d\n", "Max", collectionUsage.getMax()); System.out.printf(" %-24s: %20d\n", "Used", collectionUsage.getUsed()); } } System.out.printf(" %-24s: %s\n", "isCollectionUsageThresholdSupported", memoryPoolMXBean.isCollectionUsageThresholdSupported()); if (memoryPoolMXBean.isCollectionUsageThresholdSupported()) { System.out.printf(" %-24s: %s\n", "CollectionUsageThreshold", memoryPoolMXBean.getCollectionUsageThreshold()); System.out.printf(" %-24s: %s\n", "CollectionUsageThresholdCount", memoryPoolMXBean.getCollectionUsageThresholdCount()); System.out.printf(" %-24s: %s\n", "isCollectionUsageThresholdExceeded", memoryPoolMXBean.isCollectionUsageThresholdExceeded()); } ++i; } } } }
resetPeakUsage()、setCollectionUsageThreshold()、setUsageThreshold()は省略(←なんか面倒になったらしい‥)
Sun Java 2 SDK 1.5.0_22
java.version = 1.5.0_22 java.vendor = Sun Microsystems Inc. java.runtime.version = 1.5.0_22-b03 os.name = Windows Vista ======== # of MXBeans : 7 [ 0] Name : Code Cache MemoryManagerNames : [ 0]: CodeCacheManager Type : Non-heap memory isValid : true Usage : Committed : 491520 Init : 196608 Max : 33554432 Used : 482304 PeakUsage : Committed : 491520 Init : 196608 Max : 33554432 Used : 483712 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : isCollectionUsageThresholdSupported : false [ 1] Name : Eden Space MemoryManagerNames : [ 0]: MarkSweepCompact [ 1]: Copy Type : Heap memory isValid : true Usage : Committed : 524288 Init : 524288 Max : 4194304 Used : 175416 PeakUsage : Committed : 524288 Init : 524288 Max : 4194304 Used : 489088 isUsageThresholdSupported : false CollectionUsage : Committed : 524288 Init : 524288 Max : 4194304 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true [ 2] Name : Survivor Space MemoryManagerNames : [ 0]: MarkSweepCompact [ 1]: Copy Type : Heap memory isValid : true Usage : Committed : 65536 Init : 65536 Max : 458752 Used : 65536 PeakUsage : Committed : 65536 Init : 65536 Max : 458752 Used : 65536 isUsageThresholdSupported : false CollectionUsage : Committed : 65536 Init : 65536 Max : 458752 Used : 65536 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true [ 3] Name : Tenured Gen MemoryManagerNames : [ 0]: MarkSweepCompact Type : Heap memory isValid : true Usage : Committed : 1441792 Init : 1441792 Max : 61997056 Used : 181088 PeakUsage : Committed : 1441792 Init : 1441792 Max : 61997056 Used : 181088 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : Committed : 0 Init : 1441792 Max : 61997056 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true [ 4] Name : Perm Gen MemoryManagerNames : [ 0]: MarkSweepCompact Type : Non-heap memory isValid : true Usage : Committed : 8388608 Init : 8388608 Max : 67108864 Used : 596536 PeakUsage : Committed : 8388608 Init : 8388608 Max : 67108864 Used : 596536 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : Committed : 0 Init : 8388608 Max : 67108864 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true [ 5] Name : Perm Gen [shared-ro] MemoryManagerNames : [ 0]: MarkSweepCompact Type : Non-heap memory isValid : true Usage : Committed : 8388608 Init : 8388608 Max : 8388608 Used : 5652200 PeakUsage : Committed : 8388608 Init : 8388608 Max : 8388608 Used : 5652200 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : Committed : 0 Init : 8388608 Max : 8388608 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true [ 6] Name : Perm Gen [shared-rw] MemoryManagerNames : [ 0]: MarkSweepCompact Type : Non-heap memory isValid : true Usage : Committed : 12582912 Init : 12582912 Max : 12582912 Used : 5966840 PeakUsage : Committed : 12582912 Init : 12582912 Max : 12582912 Used : 5966840 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : Committed : 0 Init : 12582912 Max : 12582912 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : true
java.version = 1.5.0 java.vendor = IBM Corporation java.runtime.version = pwi32dev-20090707 (SR10 ) os.name = Windows Vista ======== # of MXBeans : 5 [ 0] Name : class storage MemoryManagerNames : [ 0]: J9 non-heap manager Type : Non-heap memory isValid : true Usage : Committed : 2137860 Init : 0 Max : -1 Used : 1937200 PeakUsage : Committed : 2137860 Init : 0 Max : -1 Used : 1979632 isUsageThresholdSupported : false CollectionUsage : isCollectionUsageThresholdSupported : false [ 1] Name : JIT code cache MemoryManagerNames : [ 0]: J9 non-heap manager Type : Non-heap memory isValid : true Usage : Committed : 524288 Init : 0 Max : -1 Used : 524288 PeakUsage : Committed : 524288 Init : 0 Max : -1 Used : 524288 isUsageThresholdSupported : false CollectionUsage : isCollectionUsageThresholdSupported : false [ 2] Name : JIT data cache MemoryManagerNames : [ 0]: J9 non-heap manager Type : Non-heap memory isValid : true Usage : Committed : 524288 Init : 0 Max : -1 Used : 17452 PeakUsage : Committed : 524288 Init : 0 Max : -1 Used : 18068 isUsageThresholdSupported : false CollectionUsage : isCollectionUsageThresholdSupported : false [ 3] Name : miscellaneous non-heap storage MemoryManagerNames : [ 0]: J9 non-heap manager Type : Non-heap memory isValid : true Usage : Committed : 524288 Init : 0 Max : -1 Used : 371228 PeakUsage : Committed : 589824 Init : 0 Max : -1 Used : 443132 isUsageThresholdSupported : false CollectionUsage : isCollectionUsageThresholdSupported : false [ 4] Name : Java heap MemoryManagerNames : [ 0]: J9 GC Type : Heap memory isValid : true Usage : Committed : 4194304 Init : 4194304 Max : 1068138496 Used : 1146336 PeakUsage : Committed : 4194304 Init : 4194304 Max : 1068138496 Used : 1146336 isUsageThresholdSupported : true UsageThreshold : 0 UsageThresholdCount : 0 isUsageThresholdExceeded : true CollectionUsage : Committed : 0 Init : 4194304 Max : 1068138496 Used : 0 isCollectionUsageThresholdSupported : true CollectionUsageThreshold : 0 CollectionUsageThresholdCount : 0 isCollectionUsageThresholdExceeded : false