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
    

      

  • 相关阅读:
    seajs快速了解
    lazyload.js详解
    iScroll-js—“smooth scrolling for the web”
    Backbone学习笔记一Backbone中的MVC
    JMH基准测试框架
    idea 下运行安卓项目
    安卓
    C++
    看完
    四叉树的js实现
  • 原文地址:https://www.cnblogs.com/jsersudo/p/13225936.html
Copyright © 2011-2022 走看看