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参数,
JVM中Groovy脚本并行运行性能优化
当JVM中运行的Groovy脚本存在大量并发时,如果按照默认的策略,每次运行都会重新编译脚本,调用类加载器进行类加载。不断重新编译脚本会增加JVM内存中的CodeCache和PermGen,引发内存效率问题;类加载过程中存在同步,同时很多线程进行类加载会造成大量线程阻塞,那么效率问题就显而易见了。rn       为了解决效率问题,最好的策略是对编译后的Groovy脚本进行缓存,避免重复编译和类加
Java和Groovy性能测试
一直使用Java调用Groovy脚本完成一些随时可能调整修改的任务。今天测试了以下性能,还不错。测试代码如下:rnJava代码:rnpublic class TestC {rn    static long fib(long n) {rn        if (n rn        return fib(n - 1) + fib(n - 2);rn    }rn    rn    public
groovy与java集成的坑
背景groovy用来和java集成,作为动态规则引擎使用,是非常不错的一个选择。简单来说,就是用java来执行一段groovy代码。可以通过一个简单的数据库配置,来动态的执行某段脚本。这样就可以实时得更改脚本,java就可以动态调用这段代码,从而达到灵活的在线变换的规则引擎。坑假如不做任何优化的话,那么每次java执行一次groovy脚本,都会动态生成一个class,将导致class越来越多,最终导
Groovy+Java混合使用例子
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
springboot集成java+groovy+lombok混合编程使用maven多模块打包实例
springboot多模块打包实例nn由于在项目中引入了groovy编程,并且使用了lombok,在运行时没发现什么问题,但是最后打包部署时出现一系列问题。查了许久资料终于解决,特将解决方案写成文档记录一下nnnn项目结构nnnnupms-integrate 父模块n├─upms-base 公共模块n│n├─upms-web 管理后台-webn│n├─u...
Groovy应用(Java与Groovy间相互调用)
什么是 Groovy?      Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是 1.5.4,在 Java 1.4 和 Java 5 平台上都能使用,也能在 ...
Groovy 和 Java 联合开发环境搭建
Groovy 和 Java 联合开发环境搭建nn1. 在主 pom 的 properties 中加上 &amp;lt;groovy.version&amp;gt;2.5.2&amp;lt;/groovy.version&amp;gt; 用来覆盖 spring boot 自带的 groovy 版本nn2. 在主 pom 中的 build &amp;gt; plugins 部分加上交叉编译插件nn               &amp;lt;plu...
Java动态调用Groove代码(3)-GroovyShell
上一篇:Java动态调用Groove代码(1)-GroovyClassLoadernn上一篇:Java动态调用Groove代码(2)-GroovyScriptEnginennScriptGroove.groovynnnpackage com.chy.groovynnimport com.alibaba.fastjson.JSONnimport com.alibaba.fastjson.TypeRe...
GROOVY集成到JAVA中遇到的一个大坑
groovy与java集成的方式首先说一下我用groovy动态脚本的场景,每次输入一组数据,分别对其中的不同部分做不同运算,而且这些运算会随着业务需求的改变而变化,因此选择在数据库中放置groovy脚本的方式来处理。各大博客中一般在java代码中集成groovy动态脚本的一般有三种方式:GroovyClassLoaderGroovyShellGroovyScriptEngine开始时我采用的是第一...
Groovy深入探索——Groovy的ClassLoader体系
Groovy中定义了不少ClassLoader,本文将介绍其中绝大多数Groovy脚本都会涉及到的,也是最主要的3个ClassLoader:RootLoader、GroovyClassLoader和GroovyClassLoader.InnerLoader。rnrn注:以下分析的Groovy源代码来自Groovy 2.1.3。rnrn[size=x-large]Java的ClassLoader[/...
Java中使用Groovy的三种方式
Java中使用Groovy的三种方式,详细见我的博客。
groovy和java结合的常用两种使用方式
rngroovy是基于JVM的一种敏捷动态语言,可以在不改动正在运行着程序的情况下为系统动态增加特性rn rn方法一:通过类加载rn rnimport groovy.lang.Binding;rnimport groovy.lang.GroovyClassLoader;rnimport groovy.lang.Script;rnrnimport java.io.BufferedReader;rni...
groovy强大的集成性能
n只要你能想到的Java类库,都包容在groovy中。groovy(目前版本为1.5)可以与大量已有的Java类库和工具集成工作(有时候groovy极大地扩展了这些类库和工具),如下:nnnnnn Ant 集成Groovynnnnnn Beannn脚本框架(BSF,Beannn Scriptingnn Frameworknn)nnnnnn 使用Groovy和Scriptomnn架起Java与.NE...
Groovy与java结合使用方法和小坑
介绍rn网上一大片的介绍,闭包动态什么的, 我就不废话耽误大家时间啦,哈哈哈哈。rn为什么要与java结合rn有的时候,java代码满足不了我们随时会改变的逻辑,这时我们就可以使用groovy来动态改变代码逻辑!rn它的优势就是由于代码与java本身很相像,所以几乎没有学习成本.并且在运行时,我们可以直接的改变代码,而不需要重启,或者重新打包代码.rn(由于网上的groovy代码很多,所以就不多墨迹了)rnI...
SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置
SpringBoot的超简洁配置,为我们省去了宝贵的配置时间。nMybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xml配置来回切换了,无疑提升了代码的可读性。n但很不幸,Mybatis3在复杂的动态SQL方面的支持,需要再写**Provider来构建SQL语句,这样的设计感觉有点顾此失彼,本来好端端的通过注解省去了...
Java调用Groovy 简单例子
public static void main(String[] args) throws Exception {n long start = System.currentTimeMillis();nnn ScriptEngineManager manager = new ScriptEngineManager();nn ScriptEngine ...
Groovy之嵌入java协同工作
nGroovy是一个运行于jvm上的语言,所以理所当然能够与java协同工作,下面列出原生集成groovy与java的几种方式rn1、基于Shell脚本rn rnBinding binding = new Binding();rnbinding.setVariable(&quot;foo&quot;, new Integer(2));rnGroovyShell shell = new GroovyShell(bind...
Java动态调用脚本语言Groovy
说下为什么要用grovvy,我们现在想写一个通用接口项目,改接口想实现系统A发送各种形式请求到我们,我们接受,根据配置将发送数组处理组装以其他形式发送到到系统B的一个东西。nn支持数据类型 json xml webservice 等很多。 n这个非常灵活要求配置完成。其中有一步是convertData,这一步数据映射很灵活配置实现特别繁琐故采用groovy来配置!npackage com.
基于java jdk的Groovy环境配置及基础入门
一、 前言n Groovy是一门依赖JVM的动态解释性语言,是Java语言的补充与升级。gradle工具就是用groovy语言编写。工作中看到同事做中小型应用系统的时候,用过groovy语言,开发效率确实要比用纯java编写快很多。n二、 JDK安装Groovy依赖JVM,所以第一步先安装java开发环境。(win7 64位)n 注意:学Groovy前对java基础知识要有一些了解或者对其他
Spring Boot 实践折腾记(15):使用Groovy
Java是在JVM上运行的最广泛使用的编程语言。不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等。其中,Groovy和Scala现在在Java社区中已经被广泛采用并大受欢迎。 本文介绍如何在Spring Boo中使用Groovy语言来编程。nnGroovynnGroovy是一种基于Java的语法的基于JVM的编程语言。Groovy支持动态...
groovy与java比较,展现groovy的魅力
来来,走过路过的朋友们,来看看Groovy这门编程语言的优势,太简洁了rnrnrnrnjava 源码:rnimport java.util.List;rnimport java.util.ArrayList;rnrnclass Erase {rn    private List filterLongerThan(List strings, int length) {rn        List r
java执行groovy的示例
示例如下: rnrn1) pom.xml依赖rnrnrnrnrnrn[html] viewrn plain copyrnrnrnrnrnrnrndependency>  rn  groupId>org.codehaus.groovygroupId>  rn  artifactId>groovyartifactId>  rn  version>2.1.6version>  rndependency>
Groovy 使用 Garpe 依赖管理器
Garpe 依赖管理器Grape 是一个内嵌在 Groovy 里的 Jar 包依赖管理器,Grape 可以快速添加 maven仓库依赖 到脚本的 classpat h里,使脚本运行添加依赖更加简单;基本使用一个简单的示例如下:@Grab(group='commons-io', module='commons-io', version='2.6') nimport org.apache.common...
Groovy中文版教程
Groovy in action中文版,与java无缝集成的快速脚本语言
Java动态 调用Groovy的方法
n1、静态编译,在java工程中直接写groovy的文件,然后可以在Groovy的文件中引用Java工程的类,这种方式能够有效的利用groovy自身的语言特性,例如闭包; (这种方式上面已经提及,不适合我们目前需求)2、通过groovyShell类直接执行脚本,例如:rnnnBinding bind =newBinding();nrnnbind.setVariable(&quot;str&quot;,&quot;test&quot;);...
优化Java调用Nashorn引擎的性能
之前的项目里面大量使用了Nashorn引擎,目的是很多需要动态执行的代码放到了JavaScript里面,这样在用户那边比较好调试。但是因为性能的问题遇到了几个坑,最后经过一段时间,最终解决了,形成了这篇文章。rnrn使用预编译JS来加速rnrn在实际的应用中,基本上JS是不变的,变的只是调用的参数。于是乎可以通过预编辑,来进行加速。这样可以省略每次编译的耗时。代码如下。rnString scrip
Java动态调用脚本语言Groovy,完善接口配置
说下为什么要用grovvy,我们现在想写一个通用接口项目,改接口想实现系统A发送各种形式请求到我们,我们接受,根据配置将发送数组处理组装以其他形式发送到到系统B的一个东西。 n支持数据类型 json xml webservice 等很多。 n这个非常灵活要求配置完成。其中有一步是convertData,这一步数据映射很灵活配置实现特别繁琐故采用groovy来配置!package com.senyin
基于Spring AOP和Groovy日志模板配置的日志记录框架的二次实现与使用案例
一、项目地址https://git.oschina.net/xuliugen/ufind-businesslog.git说明:本框架是基于koala-project(项目地址:http://git.oschina.net/openkoala/koala)中的koala-businesslog二次开发,因为koala-project已经很久没有维护,对于一些Maven仓库已经无法使用,Koala在Ec
Groovy的方法、闭包语法,接口的实现
Context:nJavaBean是按照特定约束暴漏出属性,缺点是要写很多get、set。Groovy简化了这个过程。而Gradle中task就是Groovy语言中的饿一个nJava创建JavaBean:npublic class Car {n private int miles;n private final int year;n n public Car(int theYear){
利用IntelliJ IDEA创建第一个Groovy工程
因为某些原因,需要学习一下Groovy。关于Groovy的入门教程请看这篇文章http://www.ibm.com/developerworks/cn/education/java/j-groovy/j-groovy.html有点老,入门还不错。OK,下面来介绍如何创建一个Groovy工程。由于Idea集成了Groovy,所以就省了我们安装Groovy插件的麻烦了。但是还是要下载一个Groovy
Groovy经典入门
Groovy是一门针对java的动态语言,与Java无缝集成,可以直接在Groovy中使用Java的类库,语法也非常的简单,使用方便,是Java开发者首选的动态语言。<br>Groovy经典入门,是一本入门级别书,适合初学者。
Groovy在Spring中的简单使用
Groovy在Spring中的简单使用,欢迎下载!
记一次线上Groovy导致的OOM的问题解决过程
记一次线上Groovy导致的OOM的问题解决过程
Groovy的安装及常见问题
Groovy的安装与配置及常见问题rn一、安装rn 1、下载:http://www.groovy-lang.org/download.htmlrn      下载到电脑的指定目录下,将其解压;rnrn    rnrn 2、环境配置:rn    1)新建一个GROOVY_HOME,将其解压的目录添加到环境变量里;rn         rnrn   2)将%GROOVY_HOME%\bin添加到Pat
groovy exe
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程
11 gradle 之groovy 插件的使用
要构建一个Groovy项目,你需要用到Groovy插件。这个插件继承自Java插件以便添加Groovy编译能力到你的项目中。你的项目可以包含Groovy源码,Java源码,或者是二者混合使用。在其他所以方面,一个Groovy项目与Java项目相同rnrnrnbuild.gradlernrnapply plugin: 'groovy'rnrnrnrn如果Java插件还没有被加入,那么这段代码同样也会
Groovy介绍-入门
Groovy介绍 什么是Groovy Groovy基本语法 Groovy正则 Java调用Groovy Groovy模板 Groovy应用
Groovy 多线程
rnGroovy 多线程rn rnJava 支持多线程。定义了 Runnable 接口,并在根类 Object 中提供了 wait/notify 方法,还有 synchronized 关键字的支持。我们常说实现多线程的方式有两种:继承 Thread类 和实现 Runnable接口,实质上工作者线程执行的都是 Runnable 接口中定义的 run() 方法,Thread 本身实现了 Runnabl...
各种API性能_性能优化技巧
各种API性能_性能优化技巧!!!
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java的问题 学习java问题