我正在寻找一种在 JVM 中找到 Tunered Generation 池的方法,之前我尝试按名称查找此池:“Tunered Gen”,但在某些情况下,该池名为“PS Old Gen”。所以我想到了更通用的方法来找到存储所有旧对象的池。
你怎么看?也许有人可以提出另一种解决方案?
public MemoryPoolMXBean findTuneredGenerationMemoryPool(){
List<MemoryPoolMXBean> memoryPoolsList = new ArrayList<MemoryPoolMXBean>();
for(MemoryPoolMXBean pool: ManagementFactory.getMemoryPoolMXBeans()){
if (pool.isCollectionUsageThresholdSupported() && pool.getType().equals( MemoryType.HEAP )){
memoryPoolsList.add( pool );
}
}
Collections.sort(memoryPoolsList, new Comparator<MemoryPoolMXBean>(){
@Override
public int compare(MemoryPoolMXBean pool, MemoryPoolMXBean otherPool) {
return otherPool.getType().compareTo( pool.getType() );
}});
int oldestGenPoolIndex = memoryPoolsList.size() - 1;
return memoryPoolsList.get( oldestGenPoolIndex );
}
问候, 马克西姆