首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java基础-动态编译

本文链接:https://blog.csdn.net/weixin_42528266/article/details/103019587 动态编译 动态编译的应用场景: 可以做一个浏览器端编写java...服务器动态加载某些类文件进行编译 动态编译的两种做法: 通过Runtime调用javac,启动新的进程去操作 Runtime run = Runtime.getRuntime(); Process process...= run.exec("javac -cp d:/myjava/ HelloWorld.java"); 通过JavaCompiler动态编译 通过JavaCompiler动态编译 ?...第一个参数:为java编译器提供参数 第二个参数:得到 Java 编译器的输出信息 第三个参数:接收编译器的 错误信息 第四个参数:可变参数(是一个String数组)能传入一个或多个 Java 源文件...= run.exec("java -cp d:/myjava HelloWorld"); // Process process = run.exec("java -cp "+dir+" "+classFile

71910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Groovy&Java动态编译执行

    Groovy&Java动态编译执行 工作中,遇到部分业务经常动态变化,或者在不发布系统的前提下,对业务规则进行调整。...Case1: Groovy动态编译执行 闲话少说,直接上代码: static Compilable engine; //获取groovy编译类 static { ScriptEngineManager...以上是使用java的ScriptEngineManager来动态编译、执行Groovy。 如果你觉得这种执行方式效率比较低,那么还可以使用groovy的ClassLoade将其编译成对象来执行。...Case2: Java动态编译执行 以上执行方式已经在生产环境得到验证,但最近压测发现,不管使用Case1中的哪种方法执行的QPS都没有直接使用Java代码的执行效率高。...那么是否可以将Java代码动态编译。结果当然是suer,在JDK6及以上中已经支持了java代码动态编译(JavaCompiler) Java动态编译对源提供了多个渠道。

    3K20

    Java动态编译优化——提升编译速度(N倍)

    一、前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译。并且编译速度是原来的2-3倍。...q=Talismane+Utilities 这个插件也能编译,但是编译速度和内存泄漏问题依然存在(废弃) 第二个插件是Java Runtime Compiler , 可在Maven仓库中找到 : http...2、插件源码更改 拿到Java Runtime Compiler插件的源码后,能找到有个CachedCompiler类,我对其compilerFromJava方法进行了更改,加上了编译options参数...之前的编译代码编译速度: ?...注: 因为之前的就存在ZipFileIndex问题,更改后的编译源码也只是提升编译速度,ZipFileIndex内存泄漏的问题仍然存在,目前唯一的解决方案是升级Java8 到 Java10

    2.2K30

    玩转 Java 动态编译,太秀了~!

    来源:zhenbianshu.github.io 背景 动态编译 Spring Bean 实例化 小结 ?...动态编译 通过配置构造 Java 类 首先要通过 .properties 文件构造出一个 Java 类,但问题是在配置里我们是不知道这些配置将要被怎么使用的,不知道它要被 Spring EL 如何处理...把各个字段解析完成后放到准备到的类模板中,就生成了一个 Config.java 类字符串,之后就要将这个字符串编译成字节码并由 Spring 加载成 Bean。...JavaCompiler 由于 Config.java 是在运行时生成的,所以编译也只能在运行时了,万幸 Java 有提供 javax.util.JavaCompiler 类进行 Java 类的动态编译...,代码编译时,JavaCompiler 通过 getCharContent() 从传入的 compilationUnits 获取到 .java 文件内容,把编译后的结果调用 CompiledByteCode

    1.6K30

    JIT-动态编译与AOT-静态编译java java JavaScriptDart乱谈

    JIT 动态编译 尽管传闻中 Java 编程的 “一次编写,随处运行” 的口号可能并非在所有情况下都严格成立,但是对于大量的应用程序来说情况确实如此。另一方面,本地编译本质上是特定于平台的。...那么 Java 平台如何在不牺牲平台无关性的情况下实现本地编译的性能?答案就是使用 JIT 编译器进行动态编译,这种方法已经使用了十年 尽管通过 JIT 编译保持了平台无关性,但是付出了一定代价。...大多数动态编译器的操作介于这两个极端之间,方法是权衡了解方法预期获益的重要程度。 Java 语言需要动态加载类这一事实对 Java 编译器的设计有着重要的影响。...动态编译的优/缺点 动态编译 Java 程序有一些重要的优点,甚至能够比静态编译语言更好地生成代码,现代的 JIT 编译器常常向生成的代码中插入挂钩以收集有关程序行为的信息,以便如果要选择方法进行重编译...- 圆胖肿的回答 - 知乎 https://www.zhihu.com/question/23874627/answer/889699901 转载本站文章《JIT-动态编译与AOT-静态编译java/

    1.7K31

    Linux 编译动态库_makefile编译动态

    动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。...生成动态链接库 生成动态链接库的命令比较简单: 2.1 使用-shared 告诉编译器生成一个动态链接库 2.2 使用选项-fPIC或者-fpic,使得生成的代码与位置无关 gcc -shared -Wl...使用动态链接库 在编译程序的时候,使用动态链接库和静态链接库是一致的, 使用“-l库名”的形式,编译器在生成可执行文件的时候会链接该链接库文件。..../ -lstr -L : 指定链接动态库的路径 -lstr : 制定链接的动态库名称 这里需要注意的是: 编译的链接动态库和运行的动态链接库并不一致。...思路如下: 在某个特定目录放不同模块编译生成的动态库; 程序中遍历该目录下所有的符合条件的动态库,然后打开动态库获取相关函数(例如module_init()),一般为模块的注册或者初始化函数,完成相应模块的加载或初始化操作

    6.1K20

    动态编译 - Dynamically Compile and Load External Java Classes

    文章目录 概述 Code 概述 动态编译和加载外部Java类的核心流程可以概括为以下几个步骤: 读取源代码: 首先,需要获取到外部的Java源代码。...编译源代码: 接下来,需要使用Java编译器来编译这些源代码。这可以通过调用javac命令行工具或者使用Java API中的编译器API(如javax.tools.JavaCompiler)来实现。...生成字节码: 编译过程会生成字节码文件(.class文件)。这些字节码文件包含了编译后的Java类的信息。 加载字节码: 最后,需要将这些字节码文件加载到Java虚拟机(JVM)中。...; import java.io.FileWriter; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader...java文件 // 获取系统Java编译器 JavaCompiler jc = ToolProvider.getSystemJavaCompiler();

    39210

    技术分享——深入理解Java动态编译

    于是带着这样的想法,深入学习 Java动态编译。编写本文的时候使用的是 JDK11 。 基本原理 下面这个很眼熟的图来源于《深入理解Java虚拟机》前端编译与优化的章节,主要描述编译的过程: ?...技术分享——深入理解Java动态编译 实际上,仅仅对于编译这个过程来说,开发者或者使用者不必要完全掌握其中的细节, JDK 提供了一个工具包 javax.tools 让使用者可以用简易的 API 进行编译...技术分享——深入理解Java动态编译 具体的使用过程包括: 获取一个 javax.tools.JavaCompiler 实例。...JDK动态编译 JDK 动态编译的步骤在上一节已经清楚地说明,这里造一个简单的场景。...小结 动态编译或者更底层的面向字节码层面的编程,其实是一个十分有挑战性但是可以创造无限可能的领域,本文只是简单分析了一下 Java 源码编译的过程,并且通过一些简单的例子进行动态编译的模拟,离使用于实际应用中还有不少距离

    1.3K20

    Java动态编译优化——ZipFileIndex内存泄漏问题分析解决

    URLClassLoader问题解决:https://blog.csdn.net/moneyshi/article/details/81939477 二、ZipFileIndex问题发现 在执行动态编译的时候...System.setProperty("useJavaUtilZip", "true"); //使用编译选项可以改变默认编译行为。...ZipFileIndex内存占比依然很高(不知道我是哪设置有问题) 2、升级JDK版本,由Java8升级到Java9 花了两天时间,都没找到什么好的解决方案,于是我想到去Oracle/Java 的Bug...列表去找我想要的答案,终于让我找到了资料,说明了JDK升级到9之后,会删除ZipFileIndex相关的类,加入java.nio.file来处理文件编译,具体如下: ?...bug_id=8059976 升级Java 9 版本后,动态编译 ZipFileIndex不在出现。 问题完美解决。

    1.4K10

    如何使用动态编译

    Java 动态编译在项目中的实践 引言 或许大部分人工作至今都没有使用过 Java动态编译功能,当然我也是在机缘巧合之下才有机会去研究使用。...这个时候我就想到了动态编译,它或许能解决! 1、什么是动态编译Java 中,动态编译是指在运行时动态编译 Java 源代码,生成字节码,并加载到 JVM 中执行。...结合前言中我所遇到的问题,我简单的给大家介绍下我在项目中是如何使用 Java动态编译功能来解决我所遇到的问题的。...2.1、动态编译在项目中遇到的问题 2.1.1、必须重写类加载器新编译的代码才能生效 在 Java 中使用动态编译功能时,重写类加载器是必要的。...默认情况下,Java 使用应用程序类加载器来加载类。应用程序类加载器只能加载预先编译好的类,无法加载动态生成的类。因此,我们需要重写类加载器,使其能够加载动态生成的类。

    24920

    java解决动态编译加载不到import的jar包

    .*.utils; import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; import java.util.HashMap...; import javax.tools.ToolProvider; public class DynamicLoader {     /**      * 通过类名和其代码(Java代码字符串),编译得到字节码...,返回类名及其对应类的字节码,封装于Map中, 值得注意的是,      * 平常类中就编译出来的字节码只有一个类,但是考虑到内部类的情况, 会出现很多个类名及其字节码, 所以用Map封装方便...编译器接口         JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();         StandardJavaFileManager...         *          * @param name 此文件对象表示的编译单元的name          * @param code 此文件对象表示的编译单元source的code

    1.4K40

    编译 java_如何编译java

    用命令32313133353236313431303231363533e58685e5aeb931333337613139提示符编译java程序的步骤: 1.先新建文本文档,输入自己的java程序。...这里我写一个简单的java程序,来做示范。...4.由于我的那个java文本保存在了F:/java/(在F盘下的java文件夹里)下,所以如果要想编译,就需要先通过命令提示符进入java这个文件夹,具体步骤如下: 1.进入F盘:输入【F:】,然后按下回车键...5.紧接着调用java编译器进行编译。 输入【javac HelloDate。java】,然后按下回车键【Enter】 然后运行结果。...输入【java HelloDate】,按下回车键【Enter】 经验总结:运行一个java程序的大概的流程是: 书写源代码——>编译——->运行—->结束。

    2.4K30

    java编译过程_Java编译运行过程

    Java编译运行过程 在上一篇文章中,我们了解了第一个Java入门程序,以及如何编译和运行第一个Java程序。本文主要了解以下编译和运行Java程序时会发生什么。此外,我们还会分析一些常见的问题。...1 Java程序编译过程 在编译时,Java文件由Java编译器(它不与底层操作系统交互)将Java代码转换为字节码(.class)。...2 Java程序运行过程 在Java程序运行中,会执行以下步骤: 类加载器(Classloader):类加载器是JVM的子系统,用于加载类文件。...3 两个常见的问题 3.1 Java源文件命名方式 问题:一个class的名称为Simple,Java源文件名称可以不是Simple.java么?...3.2 一个Java源文件写多个类 问题:一个Java源文件中可以写多个类么? 答案是可以的。

    2.1K10
    领券