groovy.lang.GroovyShell
在內部,它使用groovy.lang.GroovyClassLoader,這是在運行時編譯和加載類的核心。
groovy.lang.GroovyClassLoader
通過使用GroovyClassLoader代替GroovyShell,您將能夠加載類,而不是腳本實例
GroovyClassLoader保留對其創建的所有類的引用,因此很容易造成內存泄漏。特別是,如果您兩次執行相同的腳本(如果它是一個字符串),那么您將獲得兩個不同的類!
原因: GroovyClassLoader不能跟蹤源文本
如果要具有相同的實例,則源必須是文件 // 類名相同
def gcl = new GroovyClassLoader() def clazz1 = gcl.parseClass(file) def clazz2 = gcl.parseClass(new File(file.absolutePath)) assert clazz1.name == 'Foo' assert clazz2.name == 'Foo' assert clazz1 == clazz2