Java 从JVM检索永久生成内存池

Java 从JVM检索永久生成内存池,java,memory-management,jvm,memory-pool,Java,Memory Management,Jvm,Memory Pool,我正在寻找一种在JVM中查找Tunered生成池的方法,之前我尝试通过名称“Tunered Gen”查找此池,但在某些情况下,此池命名为“PS Old Gen”。 所以我考虑了一种更通用的方法来找到存储所有旧对象的池 你觉得怎么样?也许有人可以提出另一种解决方案 public MemoryPoolMXBean findTuneredGenerationMemoryPool(){ List<MemoryPoolMXBean> memoryPoolsList =

我正在寻找一种在JVM中查找Tunered生成池的方法,之前我尝试通过名称“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 );
    } 
公共MemoryPoolMXBean findTuneredGenerationMemoryPool(){
List memoryPoolsList=新的ArrayList();
对于(MemoryPoolMXBean池:ManagementFactory.getMemoryPoolMXBeans()){
if(pool.isCollectionUsageThresholdSupported()&&pool.getType().equals(MemoryType.HEAP)){
memoryPoolsList.add(池);
}
}
Collections.sort(memoryPoolsList,newcomparator(){
@凌驾
公共int比较(MemoryPoolMXBean池、MemoryPoolMXBean其他池){
返回otherPool.getType().compareTo(pool.getType());
}});
int oldestGenPooldIndex=memoryPoolsList.size()-1;
返回memoryPoolsList.get(oldestGenPoolIndex);
} 
问候,,
Maxim

要求审查工作代码的问题属于代码审查(尽管您提出此问题时代码审查可能不存在)。但是这里有一个提示:如果您已经强制池类型等于MemoryType.HEAP,那么按池类型排序就没有意义了。