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,引发内存效率问题;类加载过程中存在同步,同时很多线程进行类加载会造成大量线程阻塞,那么效率问题就显而易见了。        为了解决效率问题,最好的策略是对编译后的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用来和java集成,作为动态规则引擎使用,是非常不错的一个选择。简单来说,就是用java来执行一段groovy代码。可以通过一个简单的数据库配置,来动态的执行某段脚本。这样就可以实时得更改脚本,java就可以动态调用这段代码,从而达到灵活的在线变换的规则引擎。坑假如不做任何优化的话,那么每次java执行一次groovy脚本,都会动态生成一个class,将导致class越来越多,最终导
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的ClassLoader体系
Groovy中定义了不少ClassLoader,本文将介绍其中绝大多数Groovy脚本都会涉及到的,也是最主要的3个ClassLoader:RootLoader、GroovyClassLoader和GroovyClassLoader.InnerLoader。 注:以下分析的Groovy源代码来自Groovy 2.1.3。 [size=x-large]Java的ClassLoader[/...
Groovy+Java混合使用例子
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
springboot集成java+groovy+lombok混合编程使用maven多模块打包实例
springboot多模块打包实例 由于在项目中引入了groovy编程,并且使用了lombok,在运行时没发现什么问题,但是最后打包部署时出现一系列问题。查了许久资料终于解决,特将解决方案写成文档记录一下 项目结构 upms-integrate 父模块 ├─upms-base 公共模块 │ ├─upms-web 管理后台-web │ ├─u...
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...
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集成的方式首先说一下我用groovy动态脚本的场景,每次输入一组数据,分别对其中的不同部分做不同运算,而且这些运算会随着业务需求的改变而变化,因此选择在数据库中放置groovy脚本的方式来处理。各大博客中一般在java代码中集成groovy动态脚本的一般有三种方式:GroovyClassLoaderGroovyShellGroovyScriptEngine开始时我采用的是第一...
Java动态调用Groove代码(3)-GroovyShell
上一篇:Java动态调用Groove代码(1)-GroovyClassLoader 上一篇:Java动态调用Groove代码(2)-GroovyScriptEngine ScriptGroove.groovy package com.chy.groovy import com.alibaba.fastjson.JSON import com.alibaba.fastjson.TypeRe...
Java中使用Groovy的三种方式
Java中使用Groovy的三种方式,详细见我的博客。
groovy和java结合的常用两种使用方式
groovy是基于JVM的一种敏捷动态语言,可以在不改动正在运行着程序的情况下为系统动态增加特性   方法一:通过类加载   import groovy.lang.Binding; import groovy.lang.GroovyClassLoader; import groovy.lang.Script; import java.io.BufferedReader; i...
SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置
SpringBoot的超简洁配置,为我们省去了宝贵的配置时间。 Mybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xml配置来回切换了,无疑提升了代码的可读性。 但很不幸,Mybatis3在复杂的动态SQL方面的支持,需要再写**Provider来构建SQL语句,这样的设计感觉有点顾此失彼,本来好端端的通过注解省去了...
groovy强大的集成性能
只要你能想到的Java类库,都包容在groovy中。groovy(目前版本为1.5)可以与大量已有的Java类库和工具集成工作(有时候groovy极大地扩展了这些类库和工具),如下: Ant 集成Groovy Bean 脚本框架(BSF,Bean Scripting Framework ) 使用Groovy和Scriptom 架起Java与.NE...
Java调用Groovy 简单例子
public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine ...
Groovy与java结合使用方法和小坑
介绍 网上一大片的介绍,闭包动态什么的, 我就不废话耽误大家时间啦,哈哈哈哈。 为什么要与java结合 有的时候,java代码满足不了我们随时会改变的逻辑,这时我们就可以使用groovy来动态改变代码逻辑! 它的优势就是由于代码与java本身很相像,所以几乎没有学习成本.并且在运行时,我们可以直接的改变代码,而不需要重启,或者重新打包代码. (由于网上的groovy代码很多,所以就不多墨迹了) I...
Java动态调用脚本语言Groovy,完善接口配置
说下为什么要用grovvy,我们现在想写一个通用接口项目,改接口想实现系统A发送各种形式请求到我们,我们接受,根据配置将发送数组处理组装以其他形式发送到到系统B的一个东西。 支持数据类型 json xml webservice 等很多。 这个非常灵活要求配置完成。其中有一步是convertData,这一步数据映射很灵活配置实现特别繁琐故采用groovy来配置!package com.senyin
在java中使用groovy怎么搞 (java and groovy)
什么是groovy? 一种基于Java虚拟机的动态语言,可以和java无缝集成,正是这个特性,很多时候把二者同时使用,把groovy作为java的有效补充。对于Java程序员来说,学习成本几乎为零。同时支持DSL和其他简介的语法(例如闭包),使代码便于阅读。可以用groovy的动态特性来做规则引擎,在DB中维护脚本,业务变化的时候让应用系统动态加载。   如果引入groovy在java工...
基于java jdk的Groovy环境配置及基础入门
一、 前言 Groovy是一门依赖JVM的动态解释性语言,是Java语言的补充与升级。gradle工具就是用groovy语言编写。工作中看到同事做中小型应用系统的时候,用过groovy语言,开发效率确实要比用纯java编写快很多。 二、 JDK安装Groovy依赖JVM,所以第一步先安装java开发环境。(win7 64位) 注意:学Groovy前对java基础知识要有一些了解或者对其他
Groovy之嵌入java协同工作
Groovy是一个运行于jvm上的语言,所以理所当然能够与java协同工作,下面列出原生集成groovy与java的几种方式 1、基于Shell脚本   Binding binding = new Binding(); binding.setVariable(&quot;foo&quot;, new Integer(2)); GroovyShell shell = new GroovyShell(bind...
优化Java调用Nashorn引擎的性能
之前的项目里面大量使用了Nashorn引擎,目的是很多需要动态执行的代码放到了JavaScript里面,这样在用户那边比较好调试。但是因为性能的问题遇到了几个坑,最后经过一段时间,最终解决了,形成了这篇文章。 使用预编译JS来加速 在实际的应用中,基本上JS是不变的,变的只是调用的参数。于是乎可以通过预编辑,来进行加速。这样可以省略每次编译的耗时。代码如下。 String scrip
Maven程序打包配置
Maven程序打包配置目标 程序通过脚本(win下.bat,*inux下.sh)直接运行. 程序输出可执行jar包. 打包后的目录结构 ├── bin │   ├── start and other script... ├── conf │   ├── config files... ├── lib │   ├── library jars... │ ├── runnable jar... ├─
groovy脚本在java中调用的注意事项
groovy脚本在调用中,使用的不管是GroovyScriptEngine还是GroovyClassLoder都会出现一个小bug,java程序在调用执行完成的时候,在末尾会添加两个换行符,“\n\n”,估计很多人都没注意到, 解决办法:在方法完成后,添加一句打印台去掉末尾的一个换行符 String s= s1.substring(0,s1.length()-1)、 ...
java执行groovy的示例
示例如下:  1) pom.xml依赖 [html] view plain copy dependency>     groupId>org.codehaus.groovygroupId>     artifactId>groovyartifactId>     version>2.1.6version>   dependency>
Groovy中文版教程
Groovy in action中文版,与java无缝集成的快速脚本语言
Spring Boot 实践折腾记(15):使用Groovy
Java是在JVM上运行的最广泛使用的编程语言。不过,还有很多其他基于JVM的语言,比如Groovy,Scala,JRuby,Jython,Kotlin等等。其中,Groovy和Scala现在在Java社区中已经被广泛采用并大受欢迎。 本文介绍如何在Spring Boo中使用Groovy语言来编程。 Groovy Groovy是一种基于Java的语法的基于JVM的编程语言。Groovy支持动态...
Groovy在Spring中的简单使用
Groovy在Spring中的简单使用,欢迎下载!
java+groovy混合项目的Maven配置
首先是goovy依赖 &amp;lt;!--groovy --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.codehaus.groovy&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;groovy-all&amp;lt;/artifactId&amp;gt; ...
groovy用途
1.groovy基础知识 参考教程 gradle导包:compile “org.codehaus.groovy:groovy-all:${groovyVersion}” 2.groovy对java的拓展 1.动态性 单纯的java语言是不具有动态性的,groovy恰恰弥补了这一缺憾,有了groovy你可以在程序运行时任意修改代码逻辑,不需要重新发布,groovy的弱类型让你不用再面对各种...
在eclipse中安装groovy插件详细步骤
为了方便,将groovy插件集成到eclipse中使用,安装步骤如下:step 1:检查自己的eclipse版本:在help->About Eclipse中查看: step 2:进入 https://github.com/groovy/groovy-eclipse/wiki查找和自己eclipse对应版本的groovy:(我的是4.4)step 3:拷贝下载地址http://dist.s
Groovy经典入门
Groovy是一门针对java的动态语言,与Java无缝集成,可以直接在Groovy中使用Java的类库,语法也非常的简单,使用方便,是Java开发者首选的动态语言。<br>Groovy经典入门,是一本入门级别书,适合初学者。
Groovy的方法、闭包语法,接口的实现
Context: JavaBean是按照特定约束暴漏出属性,缺点是要写很多get、set。Groovy简化了这个过程。而Gradle中task就是Groovy语言中的饿一个 Java创建JavaBean: public class Car { private int miles; private final int year; public Car(int theYear){
Groovy的安装及常见问题
Groovy的安装与配置及常见问题 一、安装  1、下载:http://www.groovy-lang.org/download.html       下载到电脑的指定目录下,将其解压;      2、环境配置:     1)新建一个GROOVY_HOME,将其解压的目录添加到环境变量里;             2)将%GROOVY_HOME%\bin添加到Pat
JDK7,JDK8的bug,使用groovy内存泄漏
1.本文分析工具IBM HeapAnalyzer;(关于IBM HeapAnalyzer如何使用不进行阐述) 2.最终查到内存泄漏原因 https://issues.apache.org/jira/browse/GROOVY-6655 https://bugs.openjdk.java.net/browse/JDK-8037342?page=com.atlassian.jira.plu...
Groovy系列——环境配置:在IDEA中配置
嗯,大神希望我们可以了解一下Groovy这门脚本语言,以便在工作写一些小工具。 学习网站:https://www.w3cschool.cn/groovy/groovy_overview.html 嗯,没错就是W3C。具体的介绍大家可以去这个上面去看看,在这就不多说了。 大家都知道pyhon和java比起来优势的地方在哪里,从最直观的书写上面来感觉的话: 也就是相当于java中的pyhon。 当然这...
Java项目中引入Groovy类,出现cannot be resolved to a type错误的一种解决思路
背景:项目中使用了Groovy写了一个简单的类,在已有的Java代码中想要import这个类,但是始终报:cannot be resolved to a type 解决方案: 安装Groovy For Eclipse的插件: 如果是maven项目,在pom.xml的要引入新的包: &lt;dependency&gt; &lt;groupId&gt;or...
groovy exe
Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程
记一次线上Groovy导致的OOM的问题解决过程
记一次线上Groovy导致的OOM的问题解决过程