我正在为学生编写一个教育计划,他们可以在解决旅行商问题(时间消耗,状态的视觉表示等)时看到不同的算法如何工作。问题在于,不仅我必须展示好的算法,而且还必须展示不好的算法。例如,我为TSP(可怕的选择)实现了广度优先搜索算法。
程序本身是用Java编写的。我有一个单独的线程用于问题解决算法,并且所有算法都实现一个特定的接口,该接口使我可以在每次迭代后进行干预。
所有盲目搜索算法都运行在具有N个节点(n =城市数)的树结构上,并且每个节点都是N个元素的数组,该实现在生成约50k个节点后会产生StackOverFlow异常。我不想限制用户界面,以便可以使用数量有限的城市-数千个城市的模拟退火工程。
这是问题:
我可以在某些指定的逻辑语句中使用一些可靠的功能,以便确定系统即将崩溃的时间吗?
有点风格:if(System.memoryLeft()
提前致谢。
最佳答案
您可以使用public static int callbackCount
跟踪堆栈上有多少个方法调用。每次输入搜索功能时,请增加此计数器。每次离开时,将其递减。显然,这也可以使用
Thread.currentThread.getStackTrace().length;
我不太确定堆栈上允许有多少个调用,但是如果您打印出该值,那么找出它应该不会太难。
这样,您可以在遇到
StackOverflowError
之前检查可以进行多少个函数调用。