j***a语言死循环代码,j***a死循环语句

kodinid 8 0

大家好,今天小编关注到一个比较意思的话题,就是关于java语言循环代码问题,于是小编就整理了1个相关Java语言死循环代码的解答,让我们一起看看吧。

  1. java中while(true)死循环会造成JVM内存溢出吗?

j***a中while(true)死循环会造成JVM内存溢出吗?

如果是死循环,那有可能会产生内存溢出,而内存溢出一般有三种可能:

比如循环内一直创建对象放入到list中(保证对象一直被引用),那么就会出现堆内存溢出OutOfMemoryError:J***a heap space。

java语言死循环代码,java死循环语句-第1张图片-安济编程网
图片来源网络,侵删)

而如果j***awebjsp文件比较多或者第三方jar比较大超出了MaxPermSize设置,那么就会出现永久代内存溢出OutOfMemoryError: PermGen space(j***a8中永久代被移除)。

而如果jvm占用了服务器的大量内存,那么有可能出现无法创建新的线程错误OutOfMemoryError: unable to create new native thread 。

这三种内存溢出的情况,第一种和第三种都有可能出现在死循环中

java语言死循环代码,java死循环语句-第2张图片-安济编程网
(图片来源网络,侵删)

在实际的开发中,通常的内存溢出,都是由于开发人员编程不当造成的。所以我们开发人员编写代码应该合理使用内存,比如强软弱虚引用的合理使用,自定义内存分配,以此来降低内存溢出出现的概率。

希望我的回答对你有所帮助


1、把局部变量定义在死循环里面会造成栈溢出,诸如下面的定义:

java语言死循环代码,java死循环语句-第3张图片-安济编程网
(图片来源网络,侵删)

while(true){

int x=1;

int arr[]= new int[10];

}

因为栈空间存储局部变量、参数等对象,栈是有默认深度的,我记得是128M(记忆问题,错了请指出)。

2、把对象定义在起循环里面会产生堆内存溢出,诸如下列定义:

while(true){

Person p = new Person();

}

到此,以上就是小编对于j***a语言死循环代码的问题就介绍到这了,希望介绍关于j***a语言死循环代码的1点解答对大家有用。

标签: 溢出 内存 循环