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个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
groovy与java集成的坑
背景groovy用来和java集成,作为动态规则引擎使用,是非常不错的一个选择。简单来说,就是用java来执行一段groovy代码。可以通过一个简单的数据库配置,来动态的执行某段脚本。这样就可以实时得更改脚本,java就可以动态调用这段代码,从而达到灵活的在线变换的规则引擎。坑假如不做任何优化的话,那么每次java执行一次groovy脚本,都会动态生成一个class,将导致class越来越多,最终导
java集成groovy优化
继前面一章讲到了groovy的使用方式,有loader以及engine,但是这两个方式的性能还是不能令我们满意,然后我们分析了下groovy的源码,看了下里面的实现逻辑,发现groovy在生成class文件之后(缓存class信息),在每次执行文件操作的时候都会new一个instance,这样做的意义在于engin里面使用binding参数,这样就需要每次生成实例,来产生对应的binding参数,
第11章 Groovy集成
第11章 Groovy集成   JBoss Seam的一个方面是它的RAD(Rapid Application Development快速应用程序开发)能力。虽然没有与RAD同义的,在这个空间里的一个有趣的工具是动态语言。迄今为止,选择一个动态语言是要求一个完全不同的开发平台(带有一个API集和一个运行时间库的一个开发平台这样宠大,以致于你再也不愿想使用你的老的向后兼容的Java[sic] A...
groovy强大的集成性能
只要你能想到的Java类库,都包容在groovy中。groovy(目前版本为1.5)可以与大量已有的Java类库和工具集成工作(有时候groovy极大地扩展了这些类库和工具),如下: Ant 集成Groovy Bean 脚本框架(BSF,Bean Scripting Framework ) 使用Groovy和Scriptom 架起Java与.NE...
GROOVY集成到JAVA中遇到的一个大坑
groovy与java集成的方式首先说一下我用groovy动态脚本的场景,每次输入一组数据,分别对其中的不同部分做不同运算,而且这些运算会随着业务需求的改变而变化,因此选择在数据库中放置groovy脚本的方式来处理。各大博客中一般在java代码中集成groovy动态脚本的一般有三种方式:GroovyClassLoaderGroovyShellGroovyScriptEngine开始时我采用的是第一...
java集成groovy的几种方式对比
Groovy的几种集成方式:groovyshell、GroovyClassLoader、GroovyScriptEngine,其中groovyshell的方式不支持脚本缓存,会导致垃圾回收频繁,并且会出现outofmemoryexception(监控如下图1,这种方式直接抛弃),GroovyClassLoader、GroovyScriptEngine性能上比较接近,比较时间如下(执行同一运算gro
[Groovy] Making Java Groovy 英文版
。。。。。。。[Groovy] Making Java Groovy 英文版
Java Groovy
Making Java Groovy
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 ...
lua性能优化之luajit集成
luajit工作模式:luajit中存在两种工作模式,分别如下: 1.jit模式:也就是即时编译(just in time)模式。该模式下会将代码直接翻译成机器码,并向操作系统申请可执行内存空间来存储转换后的机器码。执行时直接执行机器码就行,所以效率是最高的。但是iOS,xbox,ps4等平台鉴于自身安全原因都是不授权分配可执行内存空间的,所以这些平台下就不能使用jit模式。 2.interp...
JVM中Groovy脚本并行运行性能优化
当JVM中运行的Groovy脚本存在大量并发时,如果按照默认的策略,每次运行都会重新编译脚本,调用类加载器进行类加载。不断重新编译脚本会增加JVM内存中的CodeCache和PermGen,引发内存效率问题;类加载过程中存在同步,同时很多线程进行类加载会造成大量线程阻塞,那么效率问题就显而易见了。        为了解决效率问题,最好的策略是对编译后的Groovy脚本进行缓存,避免重复编译和类加
Groovy学习笔记 Struts2集成--Groovy类作为Action
NULL 博文链接:https://rsljdkt.iteye.com/blog/859059
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与java比较,展现groovy的魅力
来来,走过路过的朋友们,来看看Groovy这门编程语言的优势,太简洁了 java 源码: import java.util.List; import java.util.ArrayList; class Erase {     private List filterLongerThan(List strings, int length) {         List r
Groovy应用(Java与Groovy间相互调用)
什么是 Groovy?      Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 ...
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...
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问题
groovy是什么,怎么运用了
Java和Groovy性能测试
一直使用Java调用Groovy脚本完成一些随时可能调整修改的任务。今天测试了以下性能,还不错。测试代码如下: Java代码: public class TestC {     static long fib(long n) {         if (n         return fib(n - 1) + fib(n - 2);     }          public
<groovy>扩展java的语法
groovy中多的关键字  in as def 1.循环的简单语法 for(i in 0..9){} 10.times{} 0.upto(9){} 0.step(10,2){} 2.扩展String类 java Process p = Runtime.getRuntime() p.execute("dir") p.getInputStream().... groovy   
java调用groovy脚本
[code=&quot;java&quot;] import groovy.lang.GroovyClassLoader; import java.lang.reflect.Method; public class GroovyUtils { public static void main(String[] args) { StringBuffer scriptBuff = new St...
Java调用Groovy脚本
概述    在Java和Groovy的结合中,经常会碰到需要从Java代码中调起一个写好的Groovy脚本,我们可以通过GroovyShell来实现。其中最重要的就是GroovyShell和Binding两个类,其中GroovyShell可以调起一个Groovy脚本,而Binding可以向脚本里面传递参数。简单示例//通过Binding向要执行的groovy脚本传递变量 Bindi...
java调用Groovy脚本
一、使用 用 Groovy 的 GroovyClassLoader ,它会动态地加载一个脚本并执行它。GroovyClassLoader是一个Groovy定制的类装载器,负责解析加载Java类中用到的Groovy类。 先创建一个groovy脚本,非常简单,定义一个用于计算的方法,groovy脚本如下: def cal(int a, int b){ return a+b } 在java用调...
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...
java执行groovy的示例
示例如下:  1) pom.xml依赖 [html] view plain copy dependency>     groupId>org.codehaus.groovygroupId>     artifactId>groovyartifactId>     version>2.1.6version>   dependency>
java groovy 动态语言 教程
一本介绍groovy的书籍,中文版 对groovy有详细的介绍,适合初学者
java调用groovy方法
// 调用groovy算法 File sourceFile = new File(StringUtils.substring(Thread.currentThread().getContextClassLoader().getResource(&quot;&quot;)+&quot;tt/sandy/APP/groovy/UserIntegral.groovy&quot;, 6)); GroovyClassLoader groovyCl...
java 调用groovy 脚本
1、groovy介绍          groovy 作为 java 语言的扩展,支持绝大多数java语法,运行在虚拟机上,可以直接使用java 的公共类库,很多代码都是用java实现的,少部分用groovy实现,所有能和groovy能和java无缝集成,groovy 被编译成java 字节码,能够在java和web中调用;     groovy是一个动态语言,也可以简单认为是...
Java动态调用脚本语言Groovy,完善接口配置
说下为什么要用grovvy,我们现在想写一个通用接口项目,改接口想实现系统A发送各种形式请求到我们,我们接受,根据配置将发送数组处理组装以其他形式发送到到系统B的一个东西。 支持数据类型 json xml webservice 等很多。 这个非常灵活要求配置完成。其中有一步是convertData,这一步数据映射很灵活配置实现特别繁琐故采用groovy来配置!package com.senyin
Making java groovy
When we designed the Groovy language almost 10 years ago, our main goal was to create a language that is a complement to Java, a close companion, that Java developers would be familiar with and could learn easily. The idea was to empower users to be more productive by removing the boilerplate of Java, and to simplify their programming lives by giving them compelling and straightforward APIs to work with. I’m proud to say that the Groovy team attained that goal, making Groovy the most popular alternative language for the Java platform. Along the way, and by virtue of its nature, Groovy was adopted by Java developers in a number of ways. For example, it was introduced in Java projects for testing purposes, because the Groovy syntax is light and readable but still resembles that of Java. For interacting with XML payloads, web services, or databases, Groovy provides handy and elegant wrappers around the Java Development Kit that make those tasks a breeze. And for writing business rules in Java applications, Groovy shines, thanks to its metaprogramming capabilities and its concise and expressive grammar.
java groovy cookie
groovy dev cook book, used as a good referencel
java与Groovy的整合
Groovy是构建在JVM上的一个轻量级却强大的动态语言.因为Groovy就是用Java写的,Groovy可以做到与Java的无缝兼容,可以使用Java强大的类库 而且Groovy最终也会被编译成class文件. Groovy在1.0版的时候还存在性能问题,因为Groovy的很多实现都是用反射来做的,但是现在Groovy 1.1快推出了,据说快了10x...现在JetBrains也加入了Gro...
Java调用Groovy
NULL 博文链接:https://yangwencan2002.iteye.com/blog/260697
Groovy 和 Java 联合开发环境搭建
Groovy 和 Java 联合开发环境搭建 1. 在主 pom 的 properties 中加上 &amp;lt;groovy.version&amp;gt;2.5.2&amp;lt;/groovy.version&amp;gt; 用来覆盖 spring boot 自带的 groovy 版本 2. 在主 pom 中的 build &amp;gt; plugins 部分加上交叉编译插件                &amp;lt;plu...
java 和Groovy的区别
转自 [url]http://tech.it168.com/j/2008-01-22/200801222315988.shtml[/url] 【IT168 技术文档】在前几篇文章中,我已经向大家介绍了Groovy是什么,学习Groovy的重要性等内容,还不了解Groovy的朋友不妨去看看我Blog中的 Groovy分类 。下面我将通过Groovy与Java的比较,解开Groovy的神秘...
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...
Making Java Groovy源码
Making Java Groovy Kenneth A. Kousen 1.Easier Java 2.Closures, builders, and metaprogramming 3.Gradle for builds, Spock for testing 4.Groovy frameworks like Grails and Griffon 源码
Groovy学习-和java的区别
groovy是针对JVM的一种动态编程语言。官方文档地址:http://www.groovy-lang.org/differences.html#_default_imports部分翻译:和java的一些区别: 1 默认导入包: - java.io.* - java.lang.* - java.math.BigDecimal - java.math.BigI
Groovy与Java的差异(部分)
Groovy与Java的差异(部分)可选的分号和返回语句         在Groovy中,语句结束处的分号可以在只有一条语句的情况下可以省略。List jvm = [&quot;Java&quot;, &quot;Groovy&quot;, &quot;Scala&quot;, &quot;Clojure&quot;]//可以省略结束分号 println(jvm.size()) 可选的参数括号         如果groovy中的方法调用至少有一个参数,并且没有二义性,那么...
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview