大家好,今天小编关注到一个比较有意思的话题,就是关于java语言死循环代码的问题,于是小编就整理了1个相关Java语言死循环代码的解答,让我们一起看看吧。
j***a中while(true)死循环会造成JVM内存溢出吗?
如果是死循环,那有可能会产生内存溢出,而内存溢出一般有三种可能:
比如循环内一直创建对象放入到list中(保证对象一直被引用),那么就会出现堆内存溢出OutOfMemoryError:J***a heap space。
而如果j***aweb中jsp文件比较多或者第三方jar比较大超出了MaxPermSize设置,那么就会出现永久代内存溢出OutOfMemoryError: PermGen space(j***a8中永久代被移除)。
而如果jvm占用了服务器的大量内存,那么有可能出现无法创建新的线程错误OutOfMemoryError: unable to create new native thread 。
这三种内存溢出的情况,第一种和第三种都有可能出现在死循环中
在实际的开发中,通常的内存溢出,都是由于开发人员编程不当造成的。所以我们开发人员编写代码应该合理使用内存,比如强软弱虚引用的合理使用,自定义内存分配,以此来降低内存溢出出现的概率。
希望我的回答对你有所帮助
1、把局部变量定义在死循环里面会造成栈溢出,诸如下面的定义:
while(true){
int x=1;
int arr[]= new int[10];
}
因为栈空间存储局部变量、参数等对象,栈是有默认深度的,我记得是128M(记忆问题,错了请指出)。
2、把对象定义在起循环里面会产生堆内存溢出,诸如下列定义:
while(true){
Person p = new Person();
}
到此,以上就是小编对于j***a语言死循环代码的问题就介绍到这了,希望介绍关于j***a语言死循环代码的1点解答对大家有用。