<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    有時(shí)候?yàn)槭裁磈ava程序起不來(lái)的可能原因

    經(jīng)常遇到有關(guān)Java應(yīng)用啟動(dòng)的問(wèn)題,例如,剛才還好好的Java應(yīng)用,現(xiàn)在卻無(wú)法啟動(dòng)了?在linux上能跑的Java應(yīng)用,Windows上卻跑不動(dòng)了?這是為什么呢?下面給出一些可能的解決方案.

    1.環(huán)境和版本不對(duì)

    Java程序的運(yùn)行有時(shí)候?qū)Π姹竞铜h(huán)境的設(shè)置都是要求的,很多Java應(yīng)用對(duì)環(huán)境的設(shè)置有特殊的要求(例如JDK的版本、classpath環(huán)境變量、JAVA_HOME環(huán)境 變量等等)。因此環(huán)境變量的改變,JDK版本的改變都會(huì)引起Java程序的啟動(dòng)問(wèn)題。因此在Java應(yīng)用發(fā)生問(wèn)題的時(shí)候,先要檢查當(dāng)前的環(huán)境變量是否發(fā)生 了改變。這些改變是多方面原因造成的,很有可能是安裝了其他的軟件。例如在安裝了Oracle數(shù)據(jù)庫(kù)的時(shí)候,Oracle安裝程序會(huì)自動(dòng)安裝一個(gè)JDK版 本(通常這個(gè)版本比較低),并且Oracle還將一些環(huán)境變量指向這個(gè)JDK,這會(huì)給以前的Java應(yīng)用帶來(lái)一定的麻煩(我就遇到了幾次)。

    2.啟動(dòng)參數(shù)不正確


    Java是跨平臺(tái)的語(yǔ)言,但是啟動(dòng)參數(shù)不是跨平臺(tái)的。有很多啟動(dòng)參數(shù)是某些操作系統(tǒng)特有的參數(shù)。就算是跨平臺(tái)的啟動(dòng)參數(shù),在不同的平臺(tái)上有著不同的 限制。對(duì)于一般的Java程序員,用得比較多的參數(shù)就是對(duì)Java的內(nèi)存heap的大小的控制,也就是(Xmx,Xms)的設(shè)置。 這些設(shè)置也能夠造成 Java應(yīng)用無(wú)法啟動(dòng)。

    1. Xmx設(shè)置太小
      如果Xmx設(shè)置太小,而Java應(yīng)用啟動(dòng)一旦需要較多的內(nèi)存,那一定就會(huì)拋出“OutOfMemory”的錯(cuò)誤。
    2. Xmx設(shè)置太大
      難道給應(yīng)用程序設(shè)置更多的內(nèi)存也不行嗎?事實(shí)上有很多Java程序員已經(jīng)遇到這個(gè)問(wèn)題了。32位的Java虛擬機(jī)所占用的進(jìn)程空間最多只有4G。因此Xmx的設(shè)置不會(huì)超過(guò)這個(gè)值的,如果要超過(guò),需要64位Java虛擬機(jī)。就是這4個(gè)G的空間,也不是全部能被 Java獲得。在Windows下,Windows內(nèi)核需要占用2G的進(jìn)程空間,留給Java的空間只有一半,加上Java虛擬機(jī)其他的內(nèi)存開(kāi)銷(xiāo)(包括線 程棧開(kāi)銷(xiāo),本地代碼開(kāi)銷(xiāo)),在Windows上能給Xmx分配的空間只有1.5G左右。在Solaris上和其他Unix上要好些,有3.7G可以使用。 因此,如果發(fā)現(xiàn)啟動(dòng)錯(cuò)誤“ Error occurred during initialization of VM Could not reserve enough space for object heap ”或者“cannot allocate enough space for thread”,那么將Xmx值設(shè)得再小點(diǎn)。

    3.網(wǎng)絡(luò)端口被占用

    有時(shí)候,當(dāng)eclips突然要關(guān)閉(出現(xiàn)問(wèn)題非正常關(guān)閉),迅速重新啟動(dòng)這個(gè)應(yīng)用會(huì)失敗,系統(tǒng)報(bào)出“java.net.BindException: Address already in use: ” 的錯(cuò)誤。這是因?yàn)榇薐ava應(yīng)用需要在某個(gè)Socket端口進(jìn)行監(jiān)聽(tīng),而這個(gè)端口當(dāng)前不可用。是什么原因造成了當(dāng)前端口不可用呢?有兩種可能:一是別的應(yīng) 用程序先搶用了這個(gè)端口。要想知道到底是哪個(gè)應(yīng)用用了某個(gè)端口,只需要一些簡(jiǎn)單的腳本即可。例如,在WINDOWS下,使用下面的命令就可是知道,8080端口是否占用。netstat.
    還有就是在關(guān)閉IDE后看進(jìn)程里如果有JAVA.EXE的話(huà).一般就是被它自己占用了.

    另外還有一個(gè)原因就是這個(gè)Socket正在“time_wait”的狀態(tài)。通常一個(gè)應(yīng)用在關(guān)閉以后,Socket不會(huì)立刻釋放(在TCP/IP的協(xié) 議中規(guī)定),在Time_WAIT狀態(tài)下需要保持4分鐘(不同的操作系統(tǒng)時(shí)間不一樣)。要解決這個(gè)問(wèn)題,需要在Java程序中加上 “serverSocket.setReuseAddress(true);”就能快速的重用這個(gè)Socket。

    4.人為的疏忽

    還有一些人為的疏忽,例如配置內(nèi)容寫(xiě)錯(cuò),配置文件損害,庫(kù)文件丟失等等都能引起啟動(dòng)的問(wèn)題,自己應(yīng)用中多注意一下.應(yīng)該還能找出很多不同的情況來(lái).。

    posted on 2007-05-16 10:06 shgavin 閱讀(977) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    留言簿

    文章分類(lèi)

    文章檔案

    收藏夾

    搜索

    最新評(píng)論

    主站蜘蛛池模板: 特级毛片爽www免费版| 男性gay黄免费网站| 男人j进入女人j内部免费网站 | 亚洲一区日韩高清中文字幕亚洲| 亚洲gay片在线gv网站| 午夜dj免费在线观看| 亚洲区日韩精品中文字幕| 在线免费观看毛片网站| 亚洲av最新在线观看网址| 国产一区二区三区在线免费观看 | 香蕉大伊亚洲人在线观看| 成人影片麻豆国产影片免费观看| 亚洲精品无码专区在线| 免费国产在线观看| 一级毛片a女人刺激视频免费| 亚洲综合国产一区二区三区| 国产精品偷伦视频观看免费| 亚洲第一页中文字幕| 中字幕视频在线永久在线观看免费| 亚洲乱码在线观看| 男人的天堂亚洲一区二区三区 | 国产无遮挡又黄又爽免费网站| 毛茸茸bbw亚洲人| 91在线手机精品免费观看| 亚洲国产成人久久| 波多野结衣中文一区二区免费 | 亚洲综合区小说区激情区| 国产一级淫片a免费播放口| 亚洲国产精品综合久久2007| 色吊丝最新永久免费观看网站| 色爽黄1000部免费软件下载| 亚洲AV无码不卡在线播放| 国语成本人片免费av无码| 一级全免费视频播放| 中文字幕亚洲综合久久2| 国产高清在线精品免费软件 | 亚洲人色大成年网站在线观看| 永久免费毛片手机版在线看| 国产无遮挡裸体免费视频在线观看| 国产亚洲精品成人AA片| 亚洲精品国产精品乱码视色|