我们正在尝试为我们的一位客户构建Java代码编译器,以创建在线编码测试。我们正在通过REST API将源代码发布到端点。接下来,我们将针对测试文件编译并执行输出,然后将结果返回给客户端。
这里的挑战是我们正在为每个请求分配一个进程javac - compile code
和java - execute code
,这实际上占用了30MB RAM和每个进程600 ms。
这是非常巨大的,我们无法处理八核和16GB RAM上的1000个用户的负载。如果我们一次收到200个请求,则将产生200个繁重的进程,并且其他请求将排队。
我们能想到的解决方案
javac
,而是重用它,但是怎么做(一旦编译完成,javac就会杀死自己)?javac
应该编译字符串输入而不是从文件编译。我们很好奇在线编码竞赛平台如何解决这些问题?我们仅针对Java。任何帮助是极大的赞赏。
https://www.journaldev.com/937/compile-run-java-program-another-java-program
答案 0 :(得分:3)
从Java 1.6开始,Java有了一个编程API,无需使用子进程即可访问Java编译器。首先,请参见documentation for the JavaCompiler class。