我编写了一个应用程序,需要与另一个执行相同工作的应用程序进行比较..我的是OCaml,而另一个是Java。
我想对程序进行两次运行,并在这些执行过程中监视RAM使用情况。这两个程序都是内存和CPU密集型,所以我会有足够的数据来比较它们,但我不知道如何。
我知道对用不同语言编写的应用程序进行基准测试并没有多大意义,但是有一种工具只是在一段时间内监视程序的RAM使用情况,可能会提供数据集或图形作为结果吗?
编辑:理想的操作系统是Mac OS X或只是unix
答案 0 :(得分:4)
我使用的解决方案与ygrek相当。
只要您使用Unix,它在实现语言方面就非常普遍。
一个小问题是,可以用于此目的的命令top
和ps
在BSD Unix(Mac OS X派生自的)和Linux上的工作方式不同。我猜他的命令行是针对Linux的。
对于Mac OS X,我使用了:
top -s 10 -l 10000 | grep <PID or process name>
和Linux:
top -d 10 -n 10000 | grep <PID or process name>
10是以秒为单位的采样周期。
如果您想从OCaml的GC获取信息,可以使用OCaml's GC module,但这与Java程序的行为无法直接比较。
编辑添加:涉及GC的地方,在内存开销和CPU时间开销之间存在权衡。 GC可以更加努力地使死区块更快地可用,从而降低内存消耗。如果您发现这使得比较两个程序变得困难,您可以调整OCaml的GC以使其与Java GC使用相同的权衡。这在GC模块中有记录。我希望Java也可以调整这个设置。
答案 1 :(得分:3)
while : ; do ps --no-header -o %cpu,vsz,rss -p PID; sleep 1 ; done
答案 2 :(得分:2)
您可以使用/ usr / bin / jvisualvm
监控Java使用情况Activity Monitor程序可以粗略估计任何常用Unix程序的资源使用情况。
答案 3 :(得分:2)
Valgrind的Massif工具可以为本机代码执行此操作。