请问下列java代码为什么可以让jvm崩溃?请详细解释,比如它是怎么让垃圾收集机制失效的等等。。。
//让jvm崩溃publicclassCrash{publicstaticvoidmain(String[]args){Object[]o=null;while(true...
// 让jvm崩溃
public class Crash {
public static void main(String[] args) {
Object[] o = null;
while (true) {
o = new Object[] { o };
}
}
}
为什么它能避开抛出异常的机制,不让抛出outofmemoryException这样的异常,而是直接让jvm崩溃?o = new Object[] { o }; 这个语句是怎么漂亮地避开异常机制的。 展开
public class Crash {
public static void main(String[] args) {
Object[] o = null;
while (true) {
o = new Object[] { o };
}
}
}
为什么它能避开抛出异常的机制,不让抛出outofmemoryException这样的异常,而是直接让jvm崩溃?o = new Object[] { o }; 这个语句是怎么漂亮地避开异常机制的。 展开
5个回答
展开全部
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at com.stanley.testCrash.Crash.main(Crash.java:8)
java.lang.OutOfMemoryError异常发生的原因
常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
at com.stanley.testCrash.Crash.main(Crash.java:8)
java.lang.OutOfMemoryError异常发生的原因
常见的有以下几种:
1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3.代码中存在死循环或循环产生过多重复的对象实体;
4.使用的第三方软件中的BUG;
5.启动参数内存值设定的过小;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
死循环, 把JVM 内存耗费完了。
追问
你有没有搞错,java的抛出异常机制是很强大的,一般的死循环是不可能让jvm崩溃的,只会抛出异常,这个代码是精心避开了异常的,有没仔细看啊。。。
追答
不做解释,自己跑一下 就知道是什么原因了。问人问题还态度恶劣
Exception in thread "main" java.lang.OutOfMemoryError
at Crash.main(Crash.java:7)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
死循环啊,条件永远为真,
o = new Object[] { o }; 是创建了一个实力对象,也就是给o分配了内存地址,不停地分配内存地址导致内存耗完了
o = new Object[] { o }; 是创建了一个实力对象,也就是给o分配了内存地址,不停地分配内存地址导致内存耗完了
更多追问追答
追问
为什么垃圾收集机制失效了?为什么没有抛出异常,和一般的死循环区别在哪?
追答
JAVA是纯粹的面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,JAVA的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能被再次利用,提高程序的运行效率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
他的底层就存在抛出异常机制,就算他不知道什么异常,他也会抛出一个Exception的基类,所以他很安全
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询