首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏闷骚的程序员

    解决 Groovy 引起的一次 OOM 告警

    $400(GroovyClassLoader.java:62) at groovy.lang.GroovyClassLoader$ClassCollector.createClass(GroovyClassLoader.java :500) at groovy.lang.GroovyClassLoader$ClassCollector.onClassNode(GroovyClassLoader.java:517) at groovy.lang.GroovyClassLoader$ClassCollector.call(GroovyClassLoader.java:521) at org.codehaus.groovy.control.CompilationUnit (GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268 参考 记一次线上Groovy导致的OOM的问题解决过程 Groovy 动态加载类踩中的那些坑 ClassInfo.globalClassValue lead to GroovyClassLoader can

    89030编辑于 2023-10-23
  • 来自专栏vivo互联网技术

    复杂多变场景下的Groovy脚本引擎实战

    GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); String helloScript = "package com.vivo.groovy.util 3.3.1 Class对象的数量 3.3.1.1 GroovyClassLoader加载脚本 上面提到的三种集成方式都是使用GroovyClassLoader显式地调用类加载方法parseClass,即编译 回收Class对象 由于当一个Class对象的ClassLoader被回收之后,这个Class对象才可能被回收,如果由GroovyClassLoader加载所有的类,那么只有当GroovyClassLoader GroovyClassLoader的使用用参考Tomcat的ClassLoader体系,有限个GroovyClassLoader实例常驻内存,增加处理的吞吐量。 groovyClassLoader = new GroovyClassLoader(this.getClass().getClassLoader(), config); 4.1.2 流程安全 通过规范流程

    5.3K31发布于 2021-08-03
  • 来自专栏csico

    复杂多变场景下的Groovy脚本引擎实战

    GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); String helloScript = "package com.vivo.groovy.util 3.3.1 Class对象的数量 3.3.1.1 GroovyClassLoader加载脚本 上面提到的三种集成方式都是使用GroovyClassLoader显式地调用类加载方法parseClass,即编译 回收Class对象 由于当一个Class对象的ClassLoader被回收之后,这个Class对象才可能被回收,如果由GroovyClassLoader加载所有的类,那么只有当GroovyClassLoader GroovyClassLoader的使用用参考Tomcat的ClassLoader体系,有限个GroovyClassLoader实例常驻内存,增加处理的吞吐量。 groovyClassLoader = new GroovyClassLoader(this.getClass().getClassLoader(), config); ​ 4.1.2 流程安全 通过规范流程

    2.1K30发布于 2021-10-12
  • 来自专栏码匠的流水账

    聊聊carrera的GroovyScriptAction

    @Override public Class load(String key) throws Exception { try (GroovyClassLoader groovyLoader = new GroovyClassLoader()) { GroovyCodeSource gcs = AccessController.doPrivileged } } GroovyScriptAction实现了Action接口,它使用guava的LoadingCache定义了groovy class的缓存,其CacheLoader的load方法会创建GroovyClassLoader 获取返回值 小结 GroovyScriptAction实现了Action接口,它使用guava的LoadingCache定义了groovy class的缓存,其CacheLoader的load方法会创建GroovyClassLoader

    41100发布于 2020-01-11
  • 来自专栏张师傅的博客

    一起 fastjson 和 Spring-Mongo 联合作妖的类卸载事故排查

    groovyClassLoader = null; try { groovyClassLoader = new GroovyClassLoader(); extends BaseClazz> dataModelClazz = groovyClassLoader.parseClass("groovy content"); // 真实业务是这个 groovyClassLoader = null; try { //省略 } catch (Exception e) { e.printStackTrace(); } finally { groovyClassLoader.clearCache(); // 增加下面这两行 groovyClassLoader = null; try { groovyClassLoader = new GroovyClassLoader();

    75110编辑于 2022-05-13
  • 来自专栏小灰灰

    180807-Quick-Task 动态脚本支持框架之Groovy脚本加载执行

    ClassLoader classLoader) throws CompileTaskScriptException { try { GroovyClassLoader loader = new GroovyClassLoader(classLoader); Class clz = loader.parseClass(codeSource); loader = new GroovyClassLoader(classLoader); Class clz = loader.parseClass(codeSource); return (T) clz.newInstance 小结 本篇内容比较简单,知识点也没多少,一个是利用GroovyClassLoader来编译Groovy文件并获取实例;另一个就是如何判断一个class是否为另一个class的子类 还有一个隐藏的点上面没有说 ,那就是上面的GroovyCompile文件中,每次加载Groovy文件时,都是新创建了一个GroovyClassLoader,并由它来加载并实例Groovy任务,那么问题来了 能否用一个GoorvyClassLoader

    62620发布于 2019-05-26
  • 来自专栏CodingToDie

    风控规则引擎(二):多个条件自由组合的实现,如何将 Java 字符串转换成 Java 对象

    因为 Groovy 的代码兼容 Java,所以可以直接使用 Groovy 提供的 GroovyClassLoader 来将 Java 字符串解析成 Java Class,然后通过反射的方法的得到对应的 使用 Groovy 编译代码 GroovyClassLoader 的使用相当简单,代码如下 package org.example.dyscript.compiler; import groovy.lang.GroovyClassLoader GroovyCompiler(); public static GroovyCompiler getInstance() { return compiler; } private final GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); private final ConcurrentHashMap<String, Class<? > clazz = CLASS_CACHE.get(md5Str); if (clazz == null) { clazz = groovyClassLoader.parseClass

    1K11编辑于 2023-12-18
  • 来自专栏小灰灰

    Quick-Task 动态脚本支持框架之Groovy脚本加载执行

    ClassLoader classLoader) throws CompileTaskScriptException { try { GroovyClassLoader loader = new GroovyClassLoader(classLoader); Class clz = loader.parseClass(codeSource); loader = new GroovyClassLoader(classLoader); Class clz = loader.parseClass(codeSource); return (T) clz.newInstance 小结 本篇内容比较简单,知识点也没多少,一个是利用GroovyClassLoader来编译Groovy文件并获取实例;另一个就是如何判断一个class是否为另一个class的子类 还有一个隐藏的点上面没有说 ,那就是上面的GroovyCompile文件中,每次加载Groovy文件时,都是新创建了一个GroovyClassLoader,并由它来加载并实例Groovy任务,那么问题来了 能否用一个GoorvyClassLoader

    1.4K10发布于 2018-08-07
  • 来自专栏信息安全小学生

    Groovy 笔记

    shell.evaluate(new File("script.groovy")); //shell.evaluate(new URI("http://wwww.a.com/script.groovy")); GroovyClassLoader groovy.lang.GroovyClassLoader是一个定制的类加载器,可以在运行时加载 Groovy 代码,生成 Class 对象。 GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); String scriptText = "class Hello { void hello() { println 'hello' } }"; // 将Groovy脚本解析为Class对象 Class clazz = groovyClassLoader.parseClass(scriptText ); // Class clazz = groovyClassLoader.parseClass(new File("script.groovy")); assertEquals(clazz.getName

    1.5K30发布于 2019-07-24
  • 来自专栏Linyb极客之路

    聊聊如何实现动态加载spring拦截器

    > compile(String sCode, String sName) { GroovyClassLoader loader = getGroovyClassLoader(); groovyClass = loader.parseClass(sCode, sName); return groovyClass; } /** * @return a new GroovyClassLoader */ GroovyClassLoader getGroovyClassLoader() { return new GroovyClassLoader(); } > compile(File file) throws IOException { GroovyClassLoader loader = getGroovyClassLoader();

    42510编辑于 2024-01-16
  • 来自专栏Java技术进阶

    一文了解微服务低代码实现方式

    GroovyClassLoader Groovy官方提供GroovyClassLoader类,支持从文件、url或字符串中加载解析Groovy Class,实例化对象,反射调用指定方法。 GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); String helloScript = "package com.vivo.groovy.util package pers.doublebin.example.groovy.script.controller; import groovy.lang.Binding; import groovy.lang.GroovyClassLoader groovyBinding; private GroovyShell groovyShell; @PostConstruct public void init(){ GroovyClassLoader groovyClassLoader = new GroovyClassLoader(this.getClass().getClassLoader()); CompilerConfiguration

    1.6K20编辑于 2022-12-02
  • 来自专栏码农架构

    大量类加载器创建导致诡异FullGC

    -XX:+UnlockDiagnosticVMOptions 然后我们再看下 JVM 类加载器的数据 jmap -clstats pid 这里 classes 是加载类的数量,从输出中可以看到有大量 GroovyClassLoader live <internal> 0x000000077bc27bc0 1 1394 0x000000077bc64418 dead groovy/lang/GroovyClassLoader 0x00000007f0dcf828 0x000000077d9e7d98 0 0 0x0000000770800000 dead groovy/lang/GroovyClassLoader $InnerLoader@0x00000007f0dcf828 通过统计,每个 GroovyClassLoader$InnerLoader 都只加载一个类,然后他的数量一共有 27348,跟上面的 Script1 用 mat 加载上示例程序 dump 出来的堆,选择 Histogram ,然后在正则中输入 GroovyClassLoader ,Objects 是表示创建对象数量,这里有 3255 个,说明上面的

    1.9K10发布于 2020-10-20
  • 来自专栏一个会写诗的程序员的博客

    Groovy&Java动态编译执行

    ClassLoader parent = getClass().getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent Object[] args = {}; groovyObject.invokeMethod("run", args); 如果你希望这个groovy脚本是嵌入在自己的抽象类中执行的,那么也可以使用如下方法: GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass(myStringwithGroovyClassSource, "SomeName.groovy

    3.3K20发布于 2018-08-17
  • 来自专栏编程从踩坑到跳坑

    动态执行代码逻辑

    原理 通过Groovy提供的GroovyClassLoader把源代码动态加载编译成Class,Class再实例化成对象 动手实现 依赖 <dependency> <groupId>org.codehaus.groovy cn.dhbin.dynamic; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import groovy.lang.GroovyClassLoader DynamicFactory dynamicFactory = new DynamicFactory(); /** * groovy类加载器 */ private GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); /** * 缓存Class */ private ConcurrentHashMap > aClass = classCache.get(md5); if (aClass == null) { aClass = groovyClassLoader.parseClass

    3K10发布于 2019-12-19
  • 来自专栏FunTester

    java测试框架如何执行groovy脚本文件

    package com.fission.source.source; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject private String[] args;//参数,暂时不支持参数 private List<String> files = new ArrayList<>();//所有脚本 private GroovyClassLoader loader = new GroovyClassLoader(getClass().getClassLoader()); private GroovyObject groovyObject;/

    1.3K20发布于 2019-10-29
  • 来自专栏IT民工的代码世界

    SpringBoot自定义classloader加密保护class文件

    e.printStackTrace(); } FileUtil.writeFile(filePath, source,true); } 3.通过GroovyClassLoader config = new CompilerConfiguration(); config.setSourceEncoding("UTF-8"); // 设置该GroovyClassLoader 的父ClassLoader为当前线程的加载器(默认) GroovyClassLoader groovyClassLoader = new GroovyClassLoader(Thread.currentThread > clazz = groovyClassLoader.parseClass(source); // 创建实例 instance = clazz.newInstance

    87830编辑于 2023-07-19
  • 来自专栏Linyb极客之路

    聊聊如何实现动态加载spring拦截器

    > compile(String sCode, String sName) { GroovyClassLoader loader = getGroovyClassLoader(); = loader.parseClass(sCode, sName); return groovyClass; } /** * @return a new GroovyClassLoader */ GroovyClassLoader getGroovyClassLoader() { return new GroovyClassLoader(); } > compile(File file) throws IOException { GroovyClassLoader loader = getGroovyClassLoader();

    36210编辑于 2024-01-21
  • 来自专栏网络安全攻防

    JAVA安全之Groovy命令注入刨析

    8888/");scriptEngine.run("GroovyTest.groovy","");}} 执行结果如下: 备注:这里不能使用Python进行托管哦,建议直接Apache+Groovy脚本 GroovyClassLoader 基本介绍 GroovyClassLoader是Groovy提供的一个类,它可以用于动态加载和编译Groovy类,同时也可以从字符串、文件或其他资源中加载Groovy代码并将其编译为Java字节码,随后可以在 {publicstaticvoidmain(String[]args)throwsException{// 创建 GroovyClassLoader 实例GroovyClassLoadergroovyClassLoader ("calc.exe");}catch(Exceptione){e.printStackTrace();}}} 主程序代码如下: packagecom.al1ex;importgroovy.lang.GroovyClassLoader ;importjava.io.File;publicclassGroovyClassLoaderRun2{publicstaticvoidmain(String[]args){// 创建 GroovyClassLoader

    1.7K10编辑于 2024-12-09
  • 来自专栏Java随想录

    Groovy 初学者指南

    GroovyClassLoader GroovyClassLoader是Groovy的类加载器,它允许我们在运行时动态加载和执行Groovy类。 通过GroovyClassLoader,我们可以加载Groovy脚本或Groovy类,并使用其实例来调用方法和访问属性。 { public static void main(String[] args) throws Exception { GroovyClassLoader classLoader = new GroovyClassLoader(); String script = "class Greeting {\n" + " String GroovyClassLoader提供了一种灵活的方式来在运行 Groovy生态系统 Groovy不仅是一种语言,还拥有一个丰富的生态系统,包括各种工具、框架和库,为开发人员提供了丰富的选择和支持。

    1.2K30编辑于 2023-10-16
  • 来自专栏Java随想录

    Groovy初学者指南

    通过GroovyClassLoader,我们可以加载Groovy脚本或Groovy类,并使用其实例来调用方法和访问属性。 以下是一个示例:import groovy.lang.GroovyClassLoader;import groovy.lang.GroovyObject;public class GroovyClassLoaderExample { public static void main(String[] args) throws Exception { GroovyClassLoader classLoader = new GroovyClassLoader(); String script = "class Greeting {\n" + " String message GroovyClassLoader提供了一种灵活的方式来在运行Groovy生态系统Groovy不仅是一种语言,还拥有一个丰富的生态系统,包括各种工具、框架和库,为开发人员提供了丰富的选择和支持。

    1.2K30编辑于 2023-10-13
领券