java集成groovy优化

白色玫瑰 程序猿

时间: 2023-07-11 阅读: 1 字数:2347

{}
继前面一章讲到了groovy的使用方式,有loader以及engine,但是这两个方式的性能还是不能令我们满意,然后我们分析了下groovy的源码,看了下里面的实现逻辑,发现groovy在生成class文件之后(缓存class信息),在每次...

目录

继前面一章讲到了groovy的使用方式,有loader以及engine,但是这两个方式的性能还是不能令我们满意,然后我们分析了下groovy的源码,看了下里面的实现逻辑,发现groovy在生成class文件之后(缓存class信息),在每次执行文件操作的时候都会new一个instance,这样做的意义在于engin里面使用binding参数,这样就需要每次生成实例,来产生对应的binding参数,源码如下:

try {
            if (Script.class.isAssignableFrom(scriptClass)) {
               try {
                  Constructor constructor = scriptClass.getConstructor(Binding.class);
                  script = (Script) constructor.newInstance(context);
               } catch (NoSuchMethodException e) {
                  // Fallback for non-standard "Script" classes.
                  script = (Script) scriptClass.newInstance();
                  script.setBinding(context);
               }
            } 

所以,我这边就建立一个map来缓存实例,每次同一个文件执行的时候,先从缓存里面取,把参数通过方法的形式传到groovy里面,这样就减少了创建实例的时间,同时也减少了gc的次数,缓存代码如下:

public static Script createScript(String scriptName,GroovyScriptEngine engine,Binding binding) throws ResourceException, ScriptException {
      if (scriptMap.containsKey(scriptName)) {
         return scriptMap.get(scriptName);
      } else {
         Script script = engine.createScript(scriptName, binding);
         scriptMap.put(scriptName,script);
         return script;
      }
   }

性能如下:

效果还是很明显的

原文地址:https://blog.csdn.net/lwglwg32719/article/details/53436442?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168904445116800188513262%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168904445116800188513262&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-27-53436442-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/f5b2240f892d4fe49e6d71941aea6e76

打赏作者

本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!

最新评论
当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号

×

(穷逼博主)在线接单

QQ: 1164453243

邮箱: abcdsjx@126.com

前端项目代做
前后端分离
Python 爬虫脚本
Java 后台开发
各种脚本编写
服务器搭建
个人博客搭建
Web 应用开发
Chrome 插件编写
Bug 修复