问题背景:
              JudgeOnline的制作,也就是类似在线程序判题系统。
 
   现在已经把核心的部分搞定了,主要能判断提交上来的程序运行是否正常编译以及执行结果是否正确。
   
   现在在内存方面遇到困难,希望论坛里的高手帮忙提供下解决思路。
 
   问题产生:
            我用的是java中Runtime , Process两个类来进行源代码编译和执行的,现在对于所执行的程序都能够通过
   编译和执行,但是作为程序优劣对比,需要获取程序执行时间以及程序执行所占用内存。
  
    问题:
             主要代码如下:
             ......
             Runtime r = Runtime.getRuntime();
             Process p = r.exec("执行程序命令");
             ......
             这样产生了一个所执行程序的进程,但是Process类里没有有关时间和内存的库函数,而Runtime类里面的
     关于内存的库函数是指当前java程序的内存,并不是我需要执行的那个程序的内存。
  
     谢谢指教,感激不尽......
             

解决方案 »

  1.   

    试试r.exec(time "执行程序命令");
      

  2.   

    貌似不行啊,time命令是调用系统时间的
      

  3.   

    时间好办, 在执行前调用System里的方法可以获取系统时间
    在执行后再调用然后减去前面的时间就可以了内存我一般看任务管理器, 不知道有没有更好的建议
      

  4.   

    内存看jConsole.exe
    时间建议用Date()去获取。
      

  5.   

    System.currentTimeMillis()
    public static long currentTimeMillis()返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。例如,许多操作系统以几十毫秒为单位测量时间。
    内存我就不知道了,看看有没有高手解答一下。 
      

  6.   

    我也是在内存方面纳闷...希望高手解答。我知道北大的JudgeOnline就是用java写的,但是他们做到了。还有PC2也是用java写的,也做到了,我相信应该有人知道方法的。
      

  7.   

    要获取进程占用的内存,可以使用JNI调用WinAPI获得,GetProcessMemoryInfo函数可以返回指定进程的详细内存使用情况。此外,对于进程执行的时间,由于win/linux都是用基于优先级的调度算法,用系统时间估算也不会很准确,你可以用winapi的GetThreadTime获得线程在内核模式/用户模式下的执行时间,或者GetProcessTimes获得某个进程中所有线程消耗的cpu时间。
    如果想用纯java实现上面的功能,可能会比较复杂,暂时想不到方法。
      

  8.   

    获取程序的执行效率简单在程序在前打印
    long startTime = System.currentTimeMillis();//获取系统当前毫秒数
    在测试的程序在后测试
    long endTime = System.currentTimeMillis();//获取系统当前毫秒数
    两者做个差值即可