java多线程网络编程内存不足导致卡死?----java程序常见问题总结

近期在做一个模拟多个路由器间相互通信的java程序,将自己遇到的问题在这里做个总结来为更多的人提高借鉴。

问题一:    运行多线程时java程序卡死

解决方案:原以为是计算机性能问题,运行多线程可能会导致电脑内存暴满以至于程序卡死。

      这可能是一种原因。可以通过更改java的运行环境(例如eclipse)的配置文件来为程序分配更多的初始内存,还可以更改一下eclipse的默认选项来加快eclipse的响应速度等等。

java运行环境的优化问题可以自行百度,在这里简单列一下eclipse的配置更改(eclipse.ini)

                                    -XX:MaxPermSize=768m
                                    -Xms1024m
                                    -Xmx3072m(此处为电脑8G,若电脑为4G,-Xmx2048m)

当然,更多的不是电脑配置的问题,而是程序本身的问题。可能会遇到内存占用高达95%以上,这种情况很可能是出现了死循环。例如:在while(true){Timer timer();}这种情况即为循环里再次调用一个循环,处理不当即可导致内存溢出,程序卡死等问题。另外,while等循环还要注意是否把变量的初始值设置在循环内,这样也会导致死循环。

while(true){
    int i=0;
    do something;
    i++;
}

问题二:多线程的并行问题

解决方案:一定要注意多线程的静态变量共享性问题,静态变量使得各个进程间虽然宏观上并行,但实际也存在一些关联。

问题三:利用Thread.interrupt()函数使得多线程中某一个线程关闭但是出现假死现象。

解决方案:一定一定要注意,此时该线程并不是真正的中断,还是会执行,这就需要程序员为该线程的run()函数内加上判断语句,判断如果该线程为中断状态则不执行,还需要重写interrupt()函数。在这里,以我写的Thread中新建timer()线程为例。

猜你喜欢

转载自blog.csdn.net/zhang__shuang_/article/details/81182827