gpt4 book ai didi

java - 如何以编程方式观察程序使用了多少内存?

转载 作者:行者123 更新时间:2023-11-30 10:57:44 25 4
gpt4 key购买 nike

我正在用 JAVA 开发一个编程竞赛管理器。

竞赛经理的概念:

Contest Manager 的主要概念总结如下。如果你有想法,你可以跳过图片前的几行。

  • 服务器在 Judge PC 上运行。
  • 所有参赛者都与作为客户的法官联系。
  • 向参赛者提供问题陈述的硬拷贝,他们用 C++ 编写解决方案。他们使用用 JAVA 编写的 Contest Manger 软件提交他们的解决方案。
  • 对于每个问题,裁判都有一些输入数据和相应的输出数据。
  • 当参赛者提交他的解决方案时,法官服务器根据法官提供的输入运行它。
  • 然后裁判服务器将参赛者的输出与之前提供的正确输出进行匹配。
  • 然后Judge server根据接受、错误答案、编译错误、超时等匹配结果进行判断
  • 每个问题都有预定义的时间限制。这意味着提交的解决方案必须在特定时间段内运行。 (通常在 1 秒到 15 秒之间)
  • 提交的解决方案的结论对所有参赛者都是可见的。下面的图片将清除场景。这是提交队列,所有参赛者和评委都可以看到。

enter image description here

问题背景:

在图片中,您可以看到一个红色标记区域,其中以毫秒为单位写入每个提交的解决方案所耗时。我可以通过以下代码轻松完成:

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 Elapsed 的列,如 Time Elapsed。这样做是可能的,因为在线评委喜欢 Codeforces已经在展示了。但我的问题是,是否可以在 JAVA 中做同样的事情?

  • 如果是,那么如何?
  • 如果不是,那你怎么确定?

备注:

  • 该软件具有一定的依赖性。它必须在 Windows 平台上运行。

最佳答案

我想你问的是关于用 C++ 编写的 native 程序的统计数据,对吗?您无法使用 Java 测量操作系统中其他程序的内存使用情况,您只能获取有关 Java 中当前 JVM 的内存信息。要测量内存使用情况或其他进程的 CPU 使用情况,您需要一个平台相关的解决方案(使用 JNI 运行的 native 代码)。幸运的是,人们已经实现了这样的事情,这样您就可以使用普通的 Java 对象来做您想做的事情,而无需编写任何 C/JNI 代码。查看Hyperic Sigar一个简单的方法来做你想做的事情的库。

关于java - 如何以编程方式观察程序使用了多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32465738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com