Groovy与java集成性能优化问题 5C

Groovy与Java集成,class文件不断增加,导致perm区爆满。网上查了一些资料,但是不太理解,没有具体的解决代码示例,请帮忙写个demo参考一下。
如下代码:

这段代码中,cacheKey指什么,对应于脚本是怎么生成出来?等等

 private Map<String, Object> scriptCache = new ConcurrentHashMap<String, Object>();
...

Object scriptObject = null;
try {
    Binding binding = new Binding();
    binding.setVariable("context", this.context);
    binding.setVariable("clientInfo", clientInfo);
    binding.setVariable("params", params);
    binding.setVariable("data", data);

    Script shell = null;
    if (isCached(cacheKey)) {
        shell = (Script) getCaches().get(cacheKey);
    } else {
        shell = cache(cacheKey, script);
    }

    scriptObject = (Object) InvokerHelper.createScript(shell.getClass(), binding).run();

    // Cache
    if (!isCached(cacheKey)) {
        getCaches().put(cacheKey, shell);
    }
} catch (Throwable t) {
    log.error("groovy script eval error. script: " + script, t);
}

return scriptObject;

还有我在调用shell之前使用shell.getClassLoader().clearCache();之后,class依然是直线上升的,请问具体应该怎么用?
请各路大神写一个优化的demo参考一下,谢谢!

1

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java集成groovy优化
继前面一章讲到了groovy的使用方式,有loader以及engine,但是这两个方式的性能还是不能令我们满意,然后我们分析了下groovy的源码,看了下里面的实现逻辑,发现groovy在生成class文件之后(缓存class信息),在每次执行文件操作的时候都会new一个instance,这样做的意义在于engin里面使用binding参数,这样就需要每次生成实例,来产生对应的binding参数,
groovy与java集成的方式
摘要: groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似。它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。 Java作为一种通用、静态类型的编译型语 groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象
groovy与java集成的坑
背景groovy用来和java集成,作为动态规则引擎使用,是非常不错的一个选择。简单来说,就是用java来执行一段groovy代码。可以通过一个简单的数据库配置,来动态的执行某段脚本。这样就可以实时得更改脚本,java就可以动态调用这段代码,从而达到灵活的在线变换的规则引擎。坑假如不做任何优化的话,那么每次java执行一次groovy脚本,都会动态生成一个class,将导致class越来越多,最终导
Java集成groovy脚本
最近设计一个数据统计系统,系统中上百种数据统计维度,而且这些数据统计的指标可能随时会调整.如果基于java编码的方式逐个实现数据统计的API设计,工作量大而且维护起来成本较高;最终确定为将"数据统计"的计算部分单独分离成脚本文件(javascript,或者Groovy),非常便捷了实现了"数据统计Task" 与 "数据统计规则(计算)"解耦,且可以动态的加载和运行的能力.顺便对JAVA嵌入运行Gr
Groovy与Java集成常见的坑
groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似。它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。 Java作为一种通用、静态类型的编译型语言有很多优势,但同样存在一些负担: 重新编译太费工; 静态...
groovy强大的集成性能
只要你能想到的Java类库,都包容在groovy中。groovy(目前版本为1.5)可以与大量已有的Java类库和工具集成工作(有时候groovy极大地扩展了这些类库和工具),如下: Ant 集成Groovy Bean 脚本框架(BSF,Bean Scripting Framework ) 使用Groovy和Scriptom 架起Java与.NE...
第11章 Groovy集成
第11章 Groovy集成   JBoss Seam的一个方面是它的RAD(Rapid Application Development快速应用程序开发)能力。虽然没有与RAD同义的,在这个空间里的一个有趣的工具是动态语言。迄今为止,选择一个动态语言是要求一个完全不同的开发平台(带有一个API集和一个运行时间库的一个开发平台这样宠大,以致于你再也不愿想使用你的老的向后兼容的Java[sic] A...
【Groovy】使用Maven集成Groovy代码
一直有在项目中使用Maven来编译,测试,发布Java代码。 最近一直有在学习Groovy。 也有考虑使用Gradle来重写build 脚本,但后来发现了GMaven, 是一个不想大动干戈的情况下不错的选择。 我已经说服Team的成员使用GMaven了,相应地我也已经把测试测框架做了小小的微调。 Step by Step(修改pom.xml): 1. 引入Groovy库 &lt...
GROOVY集成到JAVA中遇到的一个大坑
groovy与java集成的方式首先说一下我用groovy动态脚本的场景,每次输入一组数据,分别对其中的不同部分做不同运算,而且这些运算会随着业务需求的改变而变化,因此选择在数据库中放置groovy脚本的方式来处理。各大博客中一般在java代码中集成groovy动态脚本的一般有三种方式:GroovyClassLoaderGroovyShellGroovyScriptEngine开始时我采用的是第一...
java集成groovy的几种方式对比
Groovy的几种集成方式:groovyshell、GroovyClassLoader、GroovyScriptEngine,其中groovyshell的方式不支持脚本缓存,会导致垃圾回收频繁,并且会出现outofmemoryexception(监控如下图1,这种方式直接抛弃),GroovyClassLoader、GroovyScriptEngine性能上比较接近,比较时间如下(执行同一运算gro
Groovy与Java集成常见的坑(转)
groovy特性 Groovy是一门基于JVM的动态语言,同时也是一门面向对象的语言,语法上和Java非常相似。它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。 Java作为一种通用、静态类型的编译型语言有很多优势,但同样存在一些负担: 重新编译太费工; 静态类型不够灵活,重构起来时间可能比较...
Spring与Groovy动态语言集成包冲突问题
Spring与动态语言Groovy集成时报如下异常: Exception in thread "Main Thread" java.lang.IncompatibleClassChangeError: org/objectweb/asm/ClassVisitor at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmCl
Groovy文档翻译——Groovy与JAVA的异同
与Java的不同点 Groovy尝试对Java开发者尽可能的自然。我们在设计Groovy的时候遵循最小惊奇的原则,尤其是原先是Java后台但现在学习Groovy的开发者。 在这里我门列出了Java和Groovy的最主要的区别。 1.默认导入 以下的这些这些包和类默认被导入了,所以您不需要特地使用一个明确的***import***语句去使用他们。 java.io.* java.lang.* ...
Eclipse中Groovy集成步骤
本文介绍Eclipse中Groovy插件的安装过程 没有安装Eplise的,先去官网下载:点击跳转   本文使用的是最新版本Oxygen,已安装查看步骤:Help--&amp;gt;About Ecipse-Version   下面安装Groovy插件:  1.Help-&amp;gt;Eclipse MarketPlace-&amp;gt;Find-&amp;gt;输入Groovy-&amp;gt;install ...
[Groovy] Making Java Groovy 英文版
☆ 资源说明:☆ [Manning Publications] Making Java Groovy 英文版 [Manning Publications] Making Java Groovy E Book ☆ 图书概要:☆ Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you can use them to your advantage Then it guides you step by step through realistic development challenges from web applications to web services to desktop applications and shows how Groovy makes them easier to put into production ☆ 出版信息:☆ [作者信息] Ken Kousen [出版机构] Manning Publications [出版日期] 2013年09月27日 [图书页数] 368页 [图书语言] 英语 [图书格式] PDF 格式">☆ 资源说明:☆ [Manning Publications] Making Java Groovy 英文版 [Manning Publications] Making Java Groovy E Book ☆ 图书概要:☆ Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing [更多]
Struts2和Groovy集成的一些问题与解决方案
乱码解决方案 问题描述: 使用Tomcat7.05+Eclipse3.6,集成Struts2和Groovy,Groovy类作为Struts的Action,JSP页面采用UTF-8编码,但页面输出中偶尔会出现中文乱码,注意,并不是总是,有时重新部署一下或者修改一下groovy文件甚至多刷新几次页面,乱码就会消失,但不是总能成功。 解决方案: 下载Groovy源码,修改groovy.u...
groovy性能测试,groovy和java性能对比
看groovy的接口和api很神奇的,想用用,用之前做了个小的性能测试,结果令人目瞪口呆 class Main { static main(args) {   def start= System.currentTimeMillis();   for(int i=1;i    Math.sin(1.5);   }   def end=System.currentTimeMillis()
Java Groovy
Making Java Groovy
lua性能优化之luajit集成
luajit工作模式:luajit中存在两种工作模式,分别如下: 1.jit模式:也就是即时编译(just in time)模式。该模式下会将代码直接翻译成机器码,并向操作系统申请可执行内存空间来存储转换后的机器码。执行时直接执行机器码就行,所以效率是最高的。但是iOS,xbox,ps4等平台鉴于自身安全原因都是不授权分配可执行内存空间的,所以这些平台下就不能使用jit模式。 2.interp...
java调用Groovy传参数的问题?
GroovyShell shell = new GroovyShell();rn Script scrpt = shell.parse(new File("hello.groovy"));rn rn Binding binding = new Binding();rn String[] agr = "你好!", "你是?" ;rn binding.setVariable("agrs", agr);rn System.out.println(binding.getVariable("agrs"));rn scrpt.setBinding(binding);rn rn scrpt.run();rnrn在groovy里面文件只有在main方法下面才可以执行。rn我现在不知道java调用的时候怎么把参数传到Groovy里面去,求高手指点。。。。。。。。。
Groovy学习笔记 Struts2集成--Groovy类作为Action
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
groovy问题
groovy是什么,怎么运用了
JVM中Groovy脚本并行运行性能优化
当JVM中运行的Groovy脚本存在大量并发时,如果按照默认的策略,每次运行都会重新编译脚本,调用类加载器进行类加载。不断重新编译脚本会增加JVM内存中的CodeCache和PermGen,引发内存效率问题;类加载过程中存在同步,同时很多线程进行类加载会造成大量线程阻塞,那么效率问题就显而易见了。        为了解决效率问题,最好的策略是对编译后的Groovy脚本进行缓存,避免重复编译和类加
Groovy应用(Java与Groovy间相互调用)
什么是 Groovy?      Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 ...
groovy初体验:groovy在java中的应用
第一次接触groovy,主要是在java中嵌入groovy脚本,因为groovy和java的融合度非常好。 先放上来第一次写的一段groovy: 其实它完成的就是一句java的system.out操作,主要为了理解binding在groovy中的应用 说一下背景,这里的功能是为了打印日志,本来用的是system.out,结果师父为了让我接触一下groovy,就强行让我加段脚本 然后我就...
Groovy学习笔记四 Groovy与Java合作
(1)从Groovy调用Java 从Groovy调用Java很简单,只要把JAR放到CLASSPATH中,然后用标准的import语句就行了。 以joda-time为例,下载joda-time,地址:https://github.com/JodaOrg/joda-time/releases/download/v2.6/joda-time-2.6-dist.tar.gz 解压,将joda...
【转】实战 Groovy: Groovy:Java 程序员的 DSL
用 Groovy 编写更少的代码,完成更多的工作  级别: 初级Scott Davis , 创始人, ThirstyHead.com2009 年 3 月 09 日Groovy 专家 Scott Davis 将重新开始撰写 实战 Groovy 系列文章,该系列
groovy学习历程(第二章,面向java的groovy)
一,java和groovy的区别点 //进行系统级进程交互 println "git help".execute().text //当在string实例上调用execute()方法时,groovy创建了一个扩展了java.lang.Process的类的实例,就像java代码中runtime类的exec()方法所做的那样 println "groovy -v".execute().getClass(...
groovy与java比较,展现groovy的魅力
来来,走过路过的朋友们,来看看Groovy这门编程语言的优势,太简洁了 java 源码: import java.util.List; import java.util.ArrayList; class Erase {     private List filterLongerThan(List strings, int length) {         List r
groovy笔记之二:groovy与java交互
Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用; 二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。 在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第...
《Groovy官方文档》1.3 Groovy和Java比较
Groovy语言一直在努力亲近Java开发人员。在设计Groovy语言的时候,我们遵循最小标新立异原则,努力让那些Java开发背景的开发者容易上手并学会。下面我们列举Groovy和Java的一些主要区别。 1 默认导入 下面的包和类是默认导入的,也就是说不必精确使用 import 语句来导入它们: java.io.* java.lang.* java....
Groovy学习()面向Java开发者的Groovy
 第一段Groovy代码 // first groovy program for(int i = 0; i &amp;lt; 3; i++) { System.out.println(&quot;ho &quot;); } System.out.println(&quot;Merry Groovy&quot;); 看起来好简单。还有更简单的方式:for (i in 0..2) { print 'ho '} 0.upto(2) { pr...
Groovy基本使用(4):Java Groovy 相互调用
Java Groovy 相互调用Groovy 和 Java 之间有十分良好的互调工过程;Groovy 调用 Java 类groovy 调用 Java class 十分方便,只需要在类前导入该 Java 类,在 Groovy 代码中就可以无缝使用该 Java 类,如下:import java.util.Random; class test5 { static void main(Str...
【转】eclipse开发Groovy代码,与java集成,maven打包编译
今天尝试了一下在eclipse里面写Groovy代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来。 首先需要给eclipse安装一下Groovy的插件,插件地址:https://github.com/groovy/groovy-eclipse/wiki 。 安装完插件以后,就可以创建Groovy Project和Groovy Class等。 创建一个Maven工程,最简单的那种:m...
GWTGrailsTutorial 实面gwt和grails groovy集成
GWTGrailsTutorial A tutorial showing how do develop a Grails application with a GWT UI. Prepare your system The first step is to set up your system for running Grails and the GWT. You will also need to create a new Grails application with the command grails create-app GwtTutorial Installing the Grails GWT plugin with the command grails install-plugin gwt is required too.
jdk 1.6 新特性,集成Groovy, 性能很差
性能都是相对的,如果调用量不是很大的话,可以忽略,毕竟使用为主。groovy支持的语法还是很多的,灰常推荐,我这只是小实验罢了 代码执行如下: [code=&quot;java&quot;] /** * @param args * @throws ScriptException */ public static void main(String[] args) throws Sc...
Java和groovy相互调用
java interface package groovy; public interface IFoo { public Object run(Object foo, Object bar); }   groovy implements package groovy; class Foo implements IFoo { def x public Objec...
Groovy与Java的基本不同点
1、逻辑运算符 == ,在java中运算符 == 是用作对比两个对象的标识是否一样,或者对于基本类型而言数据值是否相等。基本类型和对象数据之间是不可以用直接意义上的比较,java中采用的是将对象类型拆箱,而在groovy中,由于自动装箱的功能,一切都是对象。要使得 == 比较有通用性的意义,groovy通过equals()来重载 == 预算符。 2、 在groovy中以下包都是默认引用的,
Groovy与Java的不同点
本文参考自Groovy文档 Differences with Java,所有代码都是Groovy文档中的,也可以将本文看做英文源文档的简略翻译。Groovy设计时目标之一就是让Java程序员快速习惯Groovy。不过在Groovy中也有很多地方和Java不相同。列举如下。默认导入下面这些包会由Groovy默认导入,我们不需要手动导入这些包就可以直接使用其中的类。 java.io.* java.lan
java执行groovy的示例
示例如下:  1) pom.xml依赖 [html] view plain copy dependency>     groupId>org.codehaus.groovygroupId>     artifactId>groovyartifactId>     version>2.1.6version>   dependency>
相关热词 c# 线程顺序 c#昨天当前时间 c# 多进程 锁 c#mysql图片存取 c# ocx 委托事件 c# 读取类的属性和值 c# out 使用限制 c#获取url的id c#怎么进行分页查询 c# update 集合