真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

程序崩潰的java代碼,代碼崩潰怎么辦

java程序可以運行但是會崩潰

錯誤出現(xiàn)在FindDate.java文件的136行,其中調(diào)用了FindData.setDate_menu函數(shù),出入了空值,不在你顯示的代碼中。

成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元新密做網(wǎng)站,已為上家服務,為新密各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

讓java中寫的一個程序崩潰

你是要哪種崩潰啊。

最簡單的崩潰:除零、空指針、數(shù)組越界,都可以使用程序崩潰

//?空指針崩潰

String?s?=?null;

System.out.println(?s.toArray()?);????//?隨便什么方法都行,選擇toArray是因為這個打字少

//?除零崩潰

int?b?=?0;

int?a?=?1?/?b;

//?數(shù)組越界

int?[]?a?=?new?int[1];

a[15]=0;

如何用java編寫代碼讓java虛擬機崩潰

網(wǎng)上有這樣一套編碼,能使java虛擬機崩潰:

package?jvm;

public?class?Crash?{

public?static?void?main(String[]?args)?{

//Object[]?o?=?{“abc”};初始值賦值,不會有影響。

Object[]?o?=?null;

while?(true)?{

o?=?new?Object[]?{?o?};

//輸出的話,jvm就不會崩潰。

//System.out.println(o);

}????????

}

}

程序運行十幾秒之后,控制臺會出現(xiàn)這樣的錯誤:

Exception?in?thread?"main"?java.lang.OutOfMemoryError:?Java?heap?space

at?jvm.Crash.main(Crash.java:10)

很明顯,超出內(nèi)存空間錯誤。

我將原程序隨意改了一下,如賦初始值等,對程序無影響。

可是我將死循環(huán)中的o輸出在控制臺的時候,jvm居然一直都不崩,為什么輸出的話,就不會超出內(nèi)存空間呢?

我看來,原程序能夠使Jvm崩潰,是因為死循環(huán)中,通過舊對象,不斷創(chuàng)建出新的對象,即創(chuàng)造的對象是互相引用的,所以GC是不會回收它們的,造成堆棧溢出。

仿照這個例子,我寫了一個簡單的類,模仿例子程序中的數(shù)組,如下:

package?jvm;

public?class?MyCrash?{

public?static?void?main(String[]?args)?{

JvmBean?j?=?null;

while(true){

j?=?new?JvmBean(j);

//無論輸出不輸出,jvm都會崩潰

//System.out.println(j);

}

}

}

結果便是控制臺輸出如下的錯誤:

Exception?in?thread?"main"?java.lang.StackOverflowError

at?jvm.JvmBean.init(JvmBean.java:5)

at?jvm.JvmBean.init(JvmBean.java:5)

at?jvm.JvmBean.init(JvmBean.java:5)

at?jvm.JvmBean.init(JvmBean.java:5)

at?jvm.JvmBean.init(JvmBean.java:5)

一長串的"at jvm.JvmBean.init(JvmBean.java:5)",后面的被省略了。

結果看來,同樣也造成了jvm崩潰,可是錯誤類型跟例子程序的不同,說堆棧溢出錯誤,并且無論是否輸出,錯誤都一樣發(fā)生,為什么呢?

結論

第一個異常

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space?at jvm.Crash.main(Crash.java:10)是因為程序無法申請到足夠的內(nèi)存的時候拋出的異常,Object數(shù)組o不斷指向新的Object數(shù)組,數(shù)組元素是原來的Object數(shù)組,這使得Object維數(shù)越來越高。不斷申請內(nèi)存空間,最終導致超出jvm中堆的最大值。堆內(nèi)存溢出。為什么輸出打印,時間會延長呢?!輸出打印的話,虛擬機并不是不會崩潰,而是崩潰的時間大大延長了。而崩潰時間延長其實是假象,是因為輸出屬于IO事件,每次輸出CPU都被中斷,IO很耗時,所以,感覺上才會時間延長。

第二個異常

”類內(nèi)部的靜態(tài)屬性 靜態(tài)塊 對象屬性 構造方法。注意這一點,那就是說?bean屬性會先于JvmBean的構造函數(shù)被初始化。在main函數(shù)中,new一個?JvmBean的構造函數(shù)之前,類內(nèi)部的JvmBean對象要優(yōu)先被初始化,這個類內(nèi)部的屬性bean的內(nèi)部同樣也包含了一個JvmBean對象需要被初始化,成循環(huán)調(diào)用,造?成了棧溢出。”所以異常才會是這個——Exception in thread "main" java.lang.StackOverflowError


新聞名稱:程序崩潰的java代碼,代碼崩潰怎么辦
URL地址:http://weahome.cn/article/dscpogh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部