日期:2014-05-18  浏览次数:20822 次

java实现检测死循环程序,并做处理
我在现在在做一个项目(用java实现),就是检测学生提交上来了的java程序,学生交的程序会出现死循环的这种情况,我需要自动的判断出学生的程序中出现了死循环,并且处理这个死循环,让它终止检测这个学生的代码,继续检测下一个学生的代码。有没有什么好的办法啊,被憋了好几天了,跪求大神指导(最好能详细点)。

------解决方案--------------------
我怎么觉得做这个项目,对JVM底层如果了解的话,应该可以找到思路的,像死循环无非就是无限次的干同一件事情,JVM底层应该有明显的特征的吧,而且死循环很容易造成内存溢出。也可以适当从这里入手。
------解决方案--------------------
来了。
楼上的建议不错。
可以参考 spring aop 的做法,面向切面编程,统计每个的执行时间。
另外,如果是 bat 跑死循环,那么很容易把你 CPU 吃干。建议把这些进程管理起来,一旦判定死循环立马干掉。
------解决方案--------------------
一般是用定时去检测。如果超过最长运行时间,则认为失败。
北大的网上挑战也是这么做的。从逻辑上判断死循环太难了。而且有时死循环也输入数据有关,有些输入会死循环,有些不会。
------解决方案--------------------
楼主说的就是有名的 停机问题。
而且这个问题已经被证明是无解的。但就你的问题而言,学生的程序不会太复杂,基本会在一段时间内执行完毕,楼主可以设定一个时间,超过这个时间就表明有死循环。
------解决方案--------------------
说说我的想法,页面使用定时器,每隔一段时间执行java类方法。如果这个方法在控制台打印的字数超过N个,就判断他是死循环(一般学生写的程序不会太多吧),然后记录在日志里。
------解决方案--------------------
还是觉得记录执行时间来判断比较现实,学生代码执行不会太复杂,设定时间长度判断是否超时,利用这个就可以解决问题了,可能jvm底层也有方法解决,但个人觉得没有那个必要。