線上環境 用來生成腳本的 結果 沒幾天就fullGC 並且持續很長時間,才降下來,
groovy 常見的三種引入方式都會有對應的問題,:
相應的解決辦法:
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency>
//清除groovy 裏面的緩存, 防止fullGC,也可以定時來做 GroovyClassLoader groovyClassLoader = engine.getClassLoader(); Class[] classes = engine.getClassLoader().getLoadedClasses(); for (Class clazz : classes) { GroovySystem.getMetaClassRegistry().removeMetaClass(clazz); groovyClassLoader.clearCache(); try { Field globalClassValue = ClassInfo.class.getDeclaredField("globalClassValue"); globalClassValue.setAccessible(true); GroovyClassValue classValueBean = (GroovyClassValue) globalClassValue.get(null); classValueBean.remove(clazz); } catch (Throwable e) { } } groovyClassLoader.clearCache(); ClassInfo.clearModifiedExpandos(); /** * Using java beans (e.g. Groovy does it) results in all referenced class infos being cached in ThreadGroupContext. A valid fix * would be to hold BeanInfo objects on soft references, but that should be done in JDK. So let's clear this cache manually for now, * in clients that are known to create bean infos. */ Introspector.flushCaches();