可能是一个愚蠢的问题,但它已经让我疯了几天。 首先,我讲的是嵌入在更大的应用程序中的代码,因此强加了类和方法签名。
所以我的目标是创建一组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()) );
好吧......我迷路了。谢谢你的任何提示。
劳伦
答案 0 :(得分:0)
非静态变量,无法从静态方法访问方法。因此,将静态变量更改为非静态或将非静态方法更改为静态并检查。
答案 1 :(得分:0)
您正尝试在non-static
静态方法中创建GC
内部类JVMMemStats()
的实例。
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
}