我正在JAVA
开发编程竞赛经理。
竞赛经理的主要概念概述如下。如果您对此有所了解,可以在图片之前跳过行。
C++
上编写解决方案。他们使用JAVA编写的Contest Manger软件提交解决方案。在图片中,您可以看到一个红色标记区域,其中每个提交的解决方案所用的时间以毫秒为单位。我可以通过以下代码轻松完成:
long start,end;
start = new Date().getTime();
int verdictCode = RunProgram(fileEXE, problem.inputFile, fileSTDOUT, problem.timeLimit);
end = new Date().getTime();
submission.timeElapsed = end - start;
此处,RunProgram
函数运行提交的解决方案(程序)并针对输入文件生成输出文件。如果你需要它的细节,请稍后问我,我会描述。
然而,还有另一种称为Memory Limit Exceeded
的判决书
这里没有实现。我想实现它。但不知道该怎么做。我用Google搜索了一下。有人讲述了剖析,但我没有得到如何正确地做,并且不知道它是否符合我的目的。
这意味着,会有一个名为Memory Elapsed
的列,如Time Elapsed
。
因为像Codeforces这样的在线评委已经在展示它,所以可以做到这一点。但我的问题是,是否有可能在JAVA
中做同样的事情?
答案 0 :(得分:1)
我认为你在询问用C ++编写的本机程序的统计数据,对吗?您无法使用Java测量操作系统中其他程序的内存使用情况,您只能获取有关Java中当前 JVM的内存信息。要测量内存使用情况或其他进程的CPU使用情况,您需要一个依赖于平台的解决方案(使用JNI运行的本机代码)。幸运的是,人们已经实现了这样的事情,因此您可以使用普通的Java对象来执行您想要的操作,而无需编写任何C / JNI代码。查看Hyperic Sigar库,以便轻松地执行您想要的操作。
答案 1 :(得分:0)
我想你想要Runtime class。
Runtime runtime = Runtime.getRuntime();
System.out.println("Free memory: " + runtime.getFreeMemory() + " / " + rutime.getMaxMemory());