zoukankan      html  css  js  c++  java
  • Groovy 脚本造成OOM的真相

    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
    

      

  • 相关阅读:
    React 使用链表遍历组件树
    React diff 算法
    JavaScript 对象操作
    前端路由hash
    动画运动曲线
    ajax跨域问题
    js版本状态模式
    装饰者模式AOP
    swipe源码循环索引
    组合模式--超级宏命令
  • 原文地址:https://www.cnblogs.com/jsersudo/p/13225936.html
Copyright © 2011-2022 走看看