Java动态编译优化 您所在的位置:网站首页 react编译慢 Java动态编译优化

Java动态编译优化

2023-02-28 21:25| 来源: 网络整理| 查看: 265

一、前言

最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译。并且编译速度是原来的2-3倍。原本打算直接用这个插件,但是发现插件的编译源码存在我之前已经解决过的内存泄漏问题。所以拿其源码,进行改善。

二、第三方插件1、maven配置

我找到的这个第三方编译插件有两个,第一个是:Talismane Utilities ,在maven仓库中可搜到相关pom的配置:

http://mvnrepository.com/search?q=Talismane+Utilities

这个插件也能编译,但是编译速度和内存泄漏问题依然存在(废弃)

第二个插件是Java Runtime Compiler , 可在Maven仓库中找到 : http://mvnrepository.com/artifact/net.openhft/compiler

我使用的版本是最新的2.3.1 , 进行反编译后:

2、插件源码更改

拿到Java Runtime Compiler插件的源码后,能找到有个CachedCompiler类,我对其compilerFromJava方法进行了更改,加上了编译options参数。具体代码如下:

Map compileFromJava(@NotNull String className, @NotNull String javaCode, @NotNull final PrintWriter writer, MyJavaFileManager fileManager) { Object compilationUnits; if(this.sourceDir != null) { String filename = className.replaceAll("\\.", '\\' + File.separator) + ".java"; File file = new File(this.sourceDir, filename); CompilerUtils.writeText(file, javaCode); compilationUnits = CompilerUtils.s_standardJavaFileManager.getJavaFileObjects(new File[]{file}); } else { this.javaFileObjects.put(className, new JavaSourceFromString(className, javaCode)); compilationUnits = this.javaFileObjects.values(); } System.setProperty("useJavaUtilZip", "true"); List options = new ArrayList(); options.add("-encoding"); options.add("UTF-8"); options.add("-classpath"); //获取系统构建路径 options.add(buildClassPath()); //不使用SharedNameTable (jdk1.7自带的软引用,会影响GC的回收,jdk1.9已经解决) options.add("-XDuseUnsharedTable"); options.add("-XDuseJavaUtilZip"); boolean ok = CompilerUtils.s_compiler.getTask(writer, fileManager, new DiagnosticListener() { public void report(Diagnostic


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有