資源描述:
《內(nèi)存溢出異常解決方案總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、內(nèi)存溢出異常解決方案總結(jié)一調(diào)整虛擬機(jī)參數(shù)二立即釋放無(wú)用的對(duì)象三利用序列化和反序列化技術(shù)簡(jiǎn)單的說(shuō)java中的堆和棧java把內(nèi)存分兩種:一種是棧內(nèi)存,另一種是堆內(nèi)存1。在函數(shù)中定義的基本類型變量和對(duì)象的引用變量都在函數(shù)的棧內(nèi)存中分配;2。堆內(nèi)存用來(lái)存放由new創(chuàng)建的對(duì)象和數(shù)組那些情況可以導(dǎo)致java內(nèi)存溢出數(shù)據(jù)量過(guò)于龐大死循環(huán)靜態(tài)變量和靜態(tài)方法過(guò)多無(wú)法確定是否被引用的對(duì)象,java虛擬機(jī)不回收內(nèi)存(內(nèi)存泄漏),循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體線程池為線程生命周期開銷問(wèn)題和資源不足問(wèn)題提供了解決方案。通過(guò)對(duì)多個(gè)任務(wù)重用線程,線程創(chuàng)建的開銷被分?jǐn)偟搅硕鄠€(gè)任務(wù)上。其好處是,因?yàn)樵谡?qǐng)求到達(dá)時(shí)線程已經(jīng)存在
2、,所以無(wú)意中也消除了線程創(chuàng)建所帶來(lái)的延遲。這樣,就可以立即為請(qǐng)求服務(wù),使應(yīng)用程序響應(yīng)更快。而且,通過(guò)適當(dāng)?shù)卣{(diào)整線程池中的線程數(shù)目,也就是當(dāng)請(qǐng)求的數(shù)目超過(guò)某個(gè)閾值時(shí),就強(qiáng)制其它任何新到的請(qǐng)求一直等待,直到獲得一個(gè)線程來(lái)處理為止,從而可以防止資源不足pageContext,request,session,application生命周期request是封裝client端(也就是用戶通過(guò)browser)提交的請(qǐng)求數(shù)據(jù)和屬性的對(duì)象。response是封裝webserver端響應(yīng)數(shù)據(jù)和屬性的對(duì)象。我們經(jīng)常會(huì)將pageContext、request、session和application混為一談,因?yàn)?/p>
3、它們都可以通過(guò)setAttribute()和getAttribute()來(lái)設(shè)定或讀取屬性。但它們之間是有別的,它們最大的區(qū)別在于使用范圍。pageContext對(duì)象的范圍只適用于當(dāng)前頁(yè)面范圍,即超過(guò)這個(gè)頁(yè)面就不能夠使用了。所以使用pageContext對(duì)象向其它頁(yè)面?zhèn)鬟f參數(shù)是不可能的。request對(duì)象的范圍是指在一JSP網(wǎng)頁(yè)發(fā)出請(qǐng)求到另一個(gè)JSP網(wǎng)頁(yè)之間,隨后這個(gè)屬性就失效。session的作用范圍為一段用戶持續(xù)和服務(wù)器所連接的時(shí)間,但與服務(wù)器斷線后,這個(gè)屬性就無(wú)效。比如斷網(wǎng)或者關(guān)閉瀏覽器。application的范圍在服務(wù)器一開始執(zhí)行服務(wù),到服務(wù)器關(guān)閉為止。它的范圍最大,生存周期最長(zhǎng)
4、。session主要功能:驗(yàn)證用戶是否登錄。在幾個(gè)頁(yè)面上都能取得。request:只有跳轉(zhuǎn)頁(yè)面才能取得。application:只要設(shè)置一次,所有的網(wǎng)頁(yè)窗口都可以取得數(shù)據(jù)。applicationsessionrequest->都需要跨多個(gè)頁(yè)面設(shè)置過(guò)多application或每一個(gè)session保存過(guò)多的對(duì)象則性能降低能使用request就不要使用session能使用session的就不要使用applicationapplication應(yīng)用:在線人員統(tǒng)計(jì)、在線人員名單列表pageContext:默認(rèn)情況下一個(gè)頁(yè)面的保存范圍實(shí)際上四種屬性范圍都是通過(guò)p
5、ageContext屬性完成的pageContext.setAttribute("name","mldn",PageContext.REQUEST_SCOPE);更改紅字的名字得到。在另外一頁(yè)用request去接收Stringname=(String)request.getAttribute("name");<%=name%>;如果要釋放application資源要重新啟動(dòng)服務(wù)器四種屬性范圍都是依靠pageContext展開的,但是在開發(fā)中,往往使用session和request范圍最多。JMS如果用過(guò)JMS的話,會(huì)發(fā)現(xiàn)它類似寫JDBC或JCA代碼。它有創(chuàng)建或檢索JMS資源的樣板代碼,每
6、當(dāng)你需要編寫一個(gè)新類來(lái)發(fā)送或接受消息時(shí),都得重復(fù)編寫那個(gè)樣本代碼。下面列出了傳統(tǒng)JMS實(shí)現(xiàn)涉及的步驟:1、創(chuàng)建JNDI初始上下文context;2、從JNDI上下文獲得隊(duì)列連接工廠;3、從隊(duì)列連接工廠取得隊(duì)列Queue;4、創(chuàng)建一個(gè)Session對(duì)象;5、創(chuàng)建一個(gè)發(fā)送或接受對(duì)象;6、利用第5部創(chuàng)建的發(fā)送或接受對(duì)象發(fā)送或接受消息;7、處理完消息后,關(guān)閉所有JMS資源。Hibernate緩存機(jī)制以及一級(jí)緩存和二級(jí)緩存的作用Hibernate的緩存機(jī)制概念:java對(duì)象的屬性(通常是一些集合類型的屬性)占用的內(nèi)存空間。如果對(duì)象的占用的內(nèi)存很大就稱為重量級(jí)的對(duì)象。如果對(duì)象的內(nèi)存小就稱為輕量級(jí)的對(duì)
7、象。Session的緩存被稱為hibernate的第一級(jí)緩存。SessionFactory的外置緩存稱為hibernate的二級(jí)緩存。這兩個(gè)緩存都位于持久層,它們存放的都是數(shù)據(jù)庫(kù)數(shù)據(jù)的拷貝。SessionFactory的內(nèi)置緩存存放元數(shù)據(jù)和預(yù)定義SQL,SessionFactory的內(nèi)置緩存是只讀緩存。Session緩存的三大作用:1,減少數(shù)據(jù)庫(kù)的訪問(wèn)頻率,提高訪問(wèn)性能。2,保證緩存中的對(duì)象與數(shù)據(jù)庫(kù)同步,位于緩存中的對(duì)象稱為持久化對(duì)