groovy 慢_groovy优化

groovy语言的动态性,决定了groovy非常适合用在业务逻辑变更非常频繁的场景中,例如规则系统,一些实时接口,因此往往都会去做一个groovy引擎来执行这些脚本,本文提供一些方法优化groovy引擎

1,groovy源码预编译并本地缓存class类

很显然,这是常见的优化方法,你不可能每次都去读取文件,或者从数据库读取脚本字符串来直接执行吧,这样效率太低,每次都会编译,生成一个新的类加载到内存里执行,这不仅浪费时间,而且增加了gc压力。所以合适的做法就是系统初始化时读取所有的脚本文件,编译后将字节码缓存到本地内存中,你可以使用一个hashmap来做,也可以用其他集中式缓存系统来做;编译后会转换成Script对象的实例,执行groovy时需要做一个engine单例来执行,由于脚本都是缓存起来的字节码且是单例,执行起来不用担心内存泄露。

2,DefaultGroovyMethods调用优化

众所周知,groovy中很多函数调用都是通过反射进行的,而在java语言中,通过反射调用方法,比直接调用方法慢上几倍。那么dmg调用优化的思想就是在groovy代码中通过直接调用来代替反射调用,而要实现直接调用,则需要为DGM中的每个方法生成一个从MetaMethod派生的包装类,该类的invoke方法将直接调用DGM中对应的方法。

那为什么不为用户写的Groovy程序的每一个方法,在运行时动态的创建这样直接调用的包装类,来提高每个方法的调用效率呢?那是因为这样会产生大量的类,由于每个类都是需要占用内存的,所以会对JVM用于存放类信息的PermGen内存区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值