1

可能是一个愚蠢的问题,但它已经让我发疯了好几天。首先,我说的是嵌入在更大应用程序中的代码,因此类和方法签名被强加。

所以我的目标是创建一个 GC 信息集合,代码如下:

public final class JVMMemStats_SVC {
    public static final void JVMMemStats(IData pipeline) throws ServiceException {
        List<GarbageCollectorMXBean> gcMBeans = ManagementFactory.getGarbageCollectorMXBeans();
        for (GarbageCollectorMXBean gcBean : gcMBeans){ // Loop against GCs
           GC gc = GCs.get(gcBean.getName());
           if( gc != null ){    // This GC already exists

           } else { // New GC
               GCs.put(
                   gcBean.getName(),
                   new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime())
               );
           }
    }

    public class GC {
        public long Cnt, Duration;

        public GC(long cnt, long duration){
            this.set(cnt, duration);
        }

        public void set(long cnt, long duration){
            this.Cnt = cnt;
            this.Duration = duration;
        }
    }

    static Map<String, GC> GCindexes = new HashMap<String, GC>();
}

但我在编译时收到以下错误:

non-static variable this cannot be referenced from a static context :
   GCPrev.add( new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime()) );

嗯……我迷路了。感谢您的任何提示。

洛朗

4

2 回答 2

0

非静态变量,不能从静态方法访问方法。因此将静态变量更改为非静态或将非静态方法更改为静态并检查。

于 2013-05-18T18:16:50.780 回答
0

您正在尝试在静态方法中创建non-static内部类的实例。GCJVMMemStats()

non-static variable this cannot be referenced from a static context :
    GCPrev.add( new GC( gcBean.getCollectionCount(), gcBean.getCollectionTime()) );

上面提到的静态上下文就是JVMMemStats()方法。只需将类声明更改为

public static class GC {
     // needs to be static to be instantiated in a static method
}
于 2013-05-18T18:25:06.163 回答