前段时间运行一个开源软件,运行了3个小时余便突然停止了,没有抛什么异常,仅仅是报告一个错误说程序异常终止 。我这可纳了闷,别人用起来好好的东西,一到我手里就出了问题,还一点线索都没有。后来问了师兄,了解了一些可能出错的原因:
1、一个线程申请的内存空间过大,比如4G以上。对于32位机来说,寻址空间最大就到4G,所以单个线程不能申请如此之大的空间,否则,程序很容易出现错误。可怕的是,这类的错误是很隐蔽的;
2、有些开源程序提供了对内存空间的参数设置,在运行耗内存的程序时别忘了考虑这些细节。
不管最后的原因在不在这两个之内,但是,这些提示真是让人焕然大悟,一方面羞于自己与师兄在同一个领域的见识差距,另一方面感叹计算机专业不同方向之间微妙且又重要的联系。
对于第一点,在平时的编程中几乎从未考虑过。现在接触到的越来越大、越来越复杂的数据量的信息处理,让我对相关知识的充电不得不尽早地提上日程。有一本书《深入理解计算机系统》是相当不错的,它让你能够从程序员的视角,看计算机系统!此书适用于那些想要写出更快、更可靠程序的程序员,很值得一看。
第二点则在以前应用java的过程中印象特别深刻,明明在小测试集下运行正确的程序,换了一个大的测试集就抛出OutOfMemery的异常。后来上网找了答案,了解到JVM可以设置运行时内存参数。JVM初始默认的是256M的运行内存,一旦内存消耗高于这个数值,那么就会抛出相关的异常。在这个层面,许多的软件与之是相通的,希望大家在以后的程序员生涯里多多警惕!
共勉!