我们正在尝试构建一个 Java 代码编译器来创建在线编码测试。我们通过 REST API 将源代码发布到端点。接下来,我们针对测试文件编译和执行输出,然后将结果返回给客户端。
这里的挑战是我们正在为每个请求启动一个进程 javac - 编译代码
和 java - 执行代码
这实际上需要 30MB RAM 和 600 毫秒过程。
这非常庞大,我们无法在八核和 16GB RAM 上处理 1000 个用户的负载。如果我们一次收到 200 个请求,它会产生 200 个进程,这很繁重并且其他请求在排队。
我们能想到的解决方案
- 不要每次都启动
javac
,重用它,但如何重用(javac 在编译完成后自行终止)? javac
应该编译字符串输入而不是从文件。
我们很好奇在线编程竞赛平台是如何解决这些问题的?我们只针对 Java。非常感谢任何帮助。
https://www.journaldev.com/937/compile-run-java-program-another-java-program
最佳答案
自 Java 1.6 以来,Java 拥有一个编程 API,无需使用子进程即可访问 Java 编译器。作为起点,请参阅 documentation for the JavaCompiler class .
关于java - CodeCompiler - 从另一个 Java 程序编译和运行 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52336220/