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

  

相关文章:

  • 2021-05-30
  • 2021-09-12
  • 2022-12-23
  • 2021-04-04
  • 2021-09-20
  • 2021-05-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-10
  • 2022-12-23
  • 2021-08-26
  • 2021-10-03
  • 2021-08-27
  • 2021-10-26
相关资源
相似解决方案