Janino框架介绍

1,896 阅读2分钟

Janino框架介绍

一、简介

  Janino是一个超小、超快的开源Java 编译器。Janino不仅可以像javac一样将一组Java源文件编译成一组字节码class文件,还可以在内存中编译Java表达式、代码块、类和.java文件,加载字节码并直接在JVM中执行。

  官网地址:http://janino-compiler.github.io/janino/

  项目地址:https://github.com/janino-compiler/janino

二、Janino与javac对比

  在Java程序运行时编译Java源代码并加载,最基本的方式便是使用javax.tools.ToolProvider.getSystemJavaCompiler()获取系统 Java 编译器(这个编译器通常是 javac)进行编译,笔者认为,相较于javac而言,Janino至少有以下4点优势:

  • Janino拥有更快的编译速度
  • Janino只依赖JRE,而javac属于JDK
  • Janino可以编译Java表达式、代码块及Java源代码,而javac只能编译Java源代码
  • Janino可以从ClassLoader中获取编译的源码中依赖的类,而javac需要指定依赖的类所在的jar包位置

  对于Janino及javac的编译速度对比,笔者在本机做了简单测试(笔记本i7-1165G7,16G内存,JDK8,固态硬盘),一次性批量编译4000个仅类名不同的Java源代码(260行,24个public方法,直接或间接引用6个jar包中的类)的编译耗时对比见下表。javac可以将源码编译结果存到文件或内存中,即使在与Janino一样将编译结果存到内存中时,javac耗时也为Janino的两倍多。

编译器类型编译结果存储位置耗时(s)
Janino内存38
javac内存85
javac文件系统164

三、环境要求

  Janino只需要Java 7 JRE或更高版本,不需要JDK。Janino不依赖任何第三方库。   Janino对不同的Java语言版本有不同的限制或局限,详见官网:限制

四、样例

  参见官网:基本样例