CodeCompiler-从另一个Java程序编译并运行Java程序

时间:2018-09-14 16:48:35

标签: java

我们正在尝试为我们的一位客户构建Java代码编译器,以创建在线编码测试。我们正在通过REST API将源代码发布到端点。接下来,我们将针对测试文件编译并执行输出,然后将结果返回给客户端。

这里的挑战是我们正在为每个请求分配一个进程javac - compile codejava - execute code,这实际上占用了30MB RAM和每个进程600 ms。

这是非常巨大的,我们无法处理八核和16GB RAM上的1000个用户的负载。如果我们一次收到200个请求,则将产生200个繁重的进程,并且其他请求将排队。

我们能想到的解决方案

  1. 不是每次都启动javac,而是重用它,但是怎么做(一旦编译完成,javac就会杀死自己)?
  2. javac应该编译字符串输入而不是从文件编译。

我们很好奇在线编码竞赛平台如何解决这些问题?我们仅针对Java。任何帮助是极大的赞赏。

https://www.journaldev.com/937/compile-run-java-program-another-java-program

1 个答案:

答案 0 :(得分:3)

从Java 1.6开始,Java有了一个编程API,无需使用子进程即可访问Java编译器。首先,请参见documentation for the JavaCompiler class