999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于JVM內(nèi)存使用的優(yōu)化策略

2008-04-12 00:00:00張紅梅
船海工程 2008年6期

摘 要:Java虛擬機(jī)在運(yùn)行應(yīng)用程序查詢(xún)操作時(shí),存在由于查詢(xún)結(jié)果數(shù)據(jù)量大和查詢(xún)并發(fā)性高而出現(xiàn)系統(tǒng)不穩(wěn)定的問(wèn)題。本文實(shí)現(xiàn)了一種JVM內(nèi)存使用優(yōu)化方案:恒定使用JVM內(nèi)存,在硬件成本不提高的情況下,保證了系統(tǒng)穩(wěn)定運(yùn)行。

關(guān)鍵詞:JAVA;JAVA虛擬機(jī);內(nèi)存使用優(yōu)化;穩(wěn)定性

中圖分類(lèi)號(hào):TP316.8 文獻(xiàn)標(biāo)志碼:A

An Optimization Strategy Based on The Memory Usage’s in JVM

Zhang Hong-mei

(The Computer Department of Vocation College of Bin ZhouBin Zhou256603 China)

Abstract:The unsteady question appears in java virtual computer’s query because of a great of query’records and eruptions. The text gives an excellent project of usage memory in JVM:Keeps constant in usage memory of JVM. The stability of the system is promised under that the cost of hardware does not rise.

Key Words:JAVA; JVM; Memory Usage’s Optimization;Stability

盡管現(xiàn)在內(nèi)存的性?xún)r(jià)比越來(lái)越高,但操作系統(tǒng)管理內(nèi)存的空間不是無(wú)限大的,Java虛擬機(jī)(JVM)對(duì)內(nèi)存的管理能力也是有限的[1]。在硬件配置一定的情況下,如果JVM能夠巧妙的使用有限的內(nèi)存,則可以使系統(tǒng)避免因內(nèi)存overflow而出現(xiàn)宕機(jī)的情況。

因此,對(duì)JVM的內(nèi)存使用優(yōu)化技術(shù)進(jìn)行研究將具有重要的價(jià)值。下面針對(duì)在保險(xiǎn)公司的業(yè)務(wù)查詢(xún)中曾碰到的問(wèn)題進(jìn)行分析研究,并給出了具體的解決方案。

1 JVM內(nèi)存未優(yōu)化使用出現(xiàn)的問(wèn)題

網(wǎng)絡(luò)計(jì)算機(jī)(Network Computer——NC)在金融、保險(xiǎn)、教育、電信等行業(yè)的市場(chǎng)表現(xiàn)良好,已創(chuàng)造出相當(dāng)可觀的經(jīng)濟(jì)效益和社會(huì)價(jià)值,具有很大的發(fā)展?jié)摿ΑS芍С諮ava的三層構(gòu)架[2]實(shí)現(xiàn)的NC的軟件設(shè)計(jì)如圖1所示,這種結(jié)構(gòu)已成為NC發(fā)展的必然趨勢(shì)。

NC系統(tǒng)軟件包括兩大部分:運(yùn)行在NC上的NCOS和運(yùn)行在應(yīng)用服務(wù)器上的NC Server。由圖1可以看出Java虛擬機(jī)是兩大部分的主要組件,它對(duì)內(nèi)存的管理能力將影響Java應(yīng)用程序執(zhí)行的具體效果以及NC中其他服務(wù)的性能表現(xiàn)。

1.1 宕機(jī)的出現(xiàn)

陽(yáng)光財(cái)產(chǎn)保險(xiǎn)公司的管理系統(tǒng)即采用此結(jié)構(gòu):在數(shù)據(jù)庫(kù)服務(wù)器端使用的是Sybase12.5;應(yīng)用服務(wù)器使用的是WebLogic8;網(wǎng)絡(luò)操作系統(tǒng)采用的是Linux。系統(tǒng)起初運(yùn)行時(shí)一切正常。但隨著業(yè)務(wù)量的增加,數(shù)據(jù)庫(kù)也越來(lái)越大。在一次月終總結(jié)查詢(xún)時(shí),出現(xiàn)了問(wèn)題——按險(xiǎn)種進(jìn)行本地投保金額統(tǒng)計(jì),出現(xiàn)了服務(wù)器停止響應(yīng),即宕機(jī)(shut down)。

1.2 對(duì)出現(xiàn)宕機(jī)現(xiàn)象的分析

Java程序在運(yùn)行過(guò)程中所進(jìn)行的操作是通過(guò)實(shí)例化的對(duì)象調(diào)用成員方法實(shí)現(xiàn)的,當(dāng)需要構(gòu)造對(duì)象實(shí)例時(shí),程序解釋器向操作系統(tǒng)發(fā)出內(nèi)存申請(qǐng),操作系統(tǒng)從內(nèi)存堆中預(yù)留一塊內(nèi)存空間,并使用這個(gè)空間來(lái)存儲(chǔ)對(duì)象實(shí)例變量的值。“無(wú)用單元回收”是程序中的一個(gè)實(shí)用線(xiàn)程或進(jìn)程跟蹤程序,對(duì)那些不再被使用的內(nèi)存單元進(jìn)行清理,并將釋放后的內(nèi)存單元?dú)w還操作系統(tǒng)以便復(fù)用。但是此進(jìn)程跟蹤程序只有在內(nèi)存短缺時(shí),才對(duì)“無(wú)用單元”進(jìn)行回收[3]。如果有大量的數(shù)據(jù)占用了內(nèi)存空間,而無(wú)更多的“無(wú)用單元”進(jìn)行釋放,此時(shí)再為實(shí)例化對(duì)象申請(qǐng)空間時(shí),便出現(xiàn)內(nèi)存不足的問(wèn)題,即可能出現(xiàn)由于系統(tǒng)內(nèi)存不足而導(dǎo)致系統(tǒng)運(yùn)行意外中斷等例外情況的發(fā)生。

對(duì)于結(jié)果數(shù)據(jù)量大的查詢(xún)而出現(xiàn)的宕機(jī)問(wèn)題,作了這樣的分析研究:

1)由于查詢(xún)結(jié)果的記錄首先要讀入JVM內(nèi)存,所以一個(gè)查詢(xún)操作就可能有大量的數(shù)據(jù)占用了JVM內(nèi)存。

2)在月終按某種險(xiǎn)種進(jìn)行金額匯總時(shí),在各個(gè)分枝機(jī)構(gòu)點(diǎn)都有這樣的操作,此時(shí)查詢(xún)操作的并發(fā)性高。大量的查詢(xún)結(jié)果記錄同時(shí)占用NC Server JVM所管理的內(nèi)存。

排除其它硬件問(wèn)題,出現(xiàn)系統(tǒng)shut down情況的一種最大可能是JVM使用的內(nèi)存不足。

2 JVM內(nèi)存使用優(yōu)化方案

在查詢(xún)結(jié)果數(shù)據(jù)量小且并發(fā)少的情況下,系統(tǒng)運(yùn)行是穩(wěn)定的,只有當(dāng)數(shù)據(jù)庫(kù)中記錄總數(shù)增多,查詢(xún)的結(jié)果也越來(lái)越龐大時(shí),才會(huì)出現(xiàn)上面見(jiàn)到的現(xiàn)象。所以,如果各個(gè)進(jìn)程合理使用JVM內(nèi)存,而不是長(zhǎng)時(shí)間大量占用內(nèi)存,可以解決由內(nèi)存短缺而造成的系統(tǒng)中斷問(wèn)題。

依據(jù)以上對(duì)JVM使用內(nèi)存的分析,作者經(jīng)較長(zhǎng)時(shí)間的研究與實(shí)踐,最終得出解決此問(wèn)題的一種方案——恒定使用Java虛擬機(jī)內(nèi)存。

2.1 優(yōu)化思想

恒定使用Java虛擬機(jī)內(nèi)存的思想是:客戶(hù)端通過(guò)應(yīng)用服務(wù)器對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)時(shí),不再將在數(shù)據(jù)庫(kù)中查詢(xún)到的所有記錄一次性讀入JVM內(nèi)存,然后再返回給客戶(hù)端,而是將查詢(xún)得到的部分記錄占用恒定的內(nèi)存大小,逐步組織為查詢(xún)結(jié)果文件,先暫存于應(yīng)用服務(wù)器的硬盤(pán)上,然后將壓縮的“查詢(xún)結(jié)果文件”傳輸給客戶(hù)端。

2.2 生成查詢(xún)結(jié)果文件

優(yōu)化從數(shù)據(jù)庫(kù)中查詢(xún)到的數(shù)據(jù),組織為查詢(xún)結(jié)果文件,具體操作是:每次從數(shù)據(jù)庫(kù)服務(wù)器讀取MAX行(譬如2000行)數(shù)據(jù)后,在JVM內(nèi)存中經(jīng)過(guò)簡(jiǎn)單加工,寫(xiě)入“查詢(xún)結(jié)果文件”,直到所有的結(jié)果已查出。所生成的查詢(xún)結(jié)果文件是壓縮的,目的是減少文件的大小,縮短客戶(hù)端讀取此文件時(shí)的傳輸時(shí)間。以上操作的結(jié)果是,最多只有MAX行的記錄占用JVM內(nèi)存,而其它已查到的記錄已陸續(xù)寫(xiě)入了硬盤(pán),這就保證了JVM內(nèi)存使用的大小是“恒定”的。生成查詢(xún)結(jié)果文件的主要代碼如下:

//1 取得數(shù)據(jù)庫(kù)聯(lián)接,執(zhí)行查詢(xún)SQL語(yǔ)句,得到結(jié)果集 ResultSet

Connection connection=...

Statement stmt=onnection.createStatement();

ResultSetrs=stmt.executeQuery(sql);

//2從數(shù)據(jù)庫(kù)服務(wù)器讀取數(shù)據(jù),寫(xiě)入壓縮文件

//2.1打開(kāi)壓縮文件輸出流

FileOutputStreamfileOutputStream=new FileOutputStream(fileName);

GZIPOutputStream zipOutputStream=new GZIPOutputStream(fileOutputStream);

//2.2從rs中讀取數(shù)據(jù),緩存到內(nèi)存對(duì)象buffer while (rs.next()) {

//根據(jù)需要對(duì)數(shù)據(jù)加工

buffer.append(″一行數(shù)據(jù)″);

count++;

//當(dāng)達(dá)到預(yù)定的閥值(_VALVE)時(shí),寫(xiě)入壓縮文件,釋放內(nèi)存。

if (count== _VALVE) {

// 2.2.1 寫(xiě)文件

byte[] bys=

buffer.toString().getBytes(″UTF-8″);

zipOutputStream.write(bys, 0, bys.length);

//2.2.2釋放內(nèi)存,計(jì)數(shù)器歸零

… } }

2.3 查詢(xún)結(jié)果的讀取

暫存于應(yīng)用服務(wù)器上的查詢(xún)結(jié)果壓縮文件,可直接通過(guò)http協(xié)議傳輸給客戶(hù)端,在客戶(hù)端只要解開(kāi)壓縮文件,即可顯示所查到的結(jié)果。其主要代碼如下:

//1從應(yīng)用服務(wù)器端獲取查詢(xún)結(jié)果文件

URL url=new URL(urlString);

InputStream in=url.openStream();

GZIPInputStream zipInputStream=new

GZIPInputStream(in);

InputStreamReader inputStreamReader=new InputStreamReader(zipInputStream,“UTF-8”);

BufferedReader bufReader=new

BufferedReader(inputStreamReader);

//2讀取文件內(nèi)容,展示數(shù)據(jù)

}

3 結(jié)束語(yǔ)

本文的優(yōu)化方案主要有以下3個(gè)特點(diǎn):

1)每次從數(shù)據(jù)庫(kù)服務(wù)器讀取預(yù)定的數(shù)據(jù)行到JVM內(nèi)存進(jìn)行數(shù)據(jù)加工,然后寫(xiě)入文件系統(tǒng),從而避免了由于數(shù)據(jù)量太大而導(dǎo)致JVM內(nèi)存急劇消耗。

2)生成的查詢(xún)結(jié)果文件通過(guò)壓縮文件的方式傳給客戶(hù),減小了文件大小,縮短了文件傳輸時(shí)間。

3)在系統(tǒng)硬件資源開(kāi)銷(xiāo)不增加的情況下,保證了大數(shù)據(jù)量查詢(xún)時(shí)系統(tǒng)運(yùn)行的穩(wěn)定性。

本方案在陽(yáng)光財(cái)產(chǎn)保險(xiǎn)公司計(jì)算機(jī)管理系統(tǒng)中應(yīng)用,被證明是一種解決由JVM內(nèi)存短缺引起系統(tǒng)不穩(wěn)定的切實(shí)可行的方法。

參考文獻(xiàn)

[1]朱喜福.Java程序設(shè)計(jì)[M].北京:人民郵電出版社,2006.

[2]HenryXie.J2EE經(jīng)典實(shí)例詳解[M].北京:人民郵電出版社,2003.

[3]王克宏,郝建文.Java 技術(shù)教程[M].北京:清華大學(xué)出版社,2002.

[4]呂鳳翥.Java語(yǔ)言程序設(shè)[M].北京:清華大學(xué)出版社,2007.

[5]李超燕.數(shù)據(jù)庫(kù)原理及應(yīng)用教程[M].北京:科學(xué)出版社,2004.

主站蜘蛛池模板: 亚洲视频在线青青| 色婷婷啪啪| 国产欧美视频综合二区| 免费一级无码在线网站| 久久精品一卡日本电影 | 亚洲精品亚洲人成在线| 2020精品极品国产色在线观看| 免费视频在线2021入口| 黄色网站在线观看无码| 91视频青青草| 伊人中文网| 欧美激情伊人| 国内精品手机在线观看视频| 久久这里只有精品23| 日本欧美精品| 伊人狠狠丁香婷婷综合色| 亚洲第一色视频| 激情无码字幕综合| 国产一二三区在线| 日韩欧美色综合| 综合色婷婷| 国产波多野结衣中文在线播放 | 欧美不卡视频一区发布| 国产精品成人一区二区不卡 | 国产一区二区三区精品欧美日韩| 男人天堂亚洲天堂| 91成人在线免费观看| 国产精品无码一二三视频| 怡春院欧美一区二区三区免费| 啪啪永久免费av| 亚洲中文字幕97久久精品少妇| 亚洲色图在线观看| 无码aaa视频| 免费又黄又爽又猛大片午夜| 小说区 亚洲 自拍 另类| 成人韩免费网站| 黄色一级视频欧美| 亚洲日韩第九十九页| 色天天综合| 亚洲精品第五页| 日本免费高清一区| 毛片基地视频| 国产情侣一区二区三区| 亚洲人成人伊人成综合网无码| 尤物特级无码毛片免费| 亚洲人成影院在线观看| 无码人妻免费| 一区二区日韩国产精久久| 日韩第一页在线| 久久综合丝袜日本网| 在线播放91| 欧美劲爆第一页| 国产一级二级三级毛片| 色播五月婷婷| 中文字幕av无码不卡免费| 国产丰满大乳无码免费播放| 成人年鲁鲁在线观看视频| 国产另类视频| 无码专区在线观看| 91精品啪在线观看国产91九色| 午夜一级做a爰片久久毛片| 四虎精品国产永久在线观看| 尤物午夜福利视频| 日韩天堂视频| 国产精品原创不卡在线| 狼友av永久网站免费观看| 成人毛片免费观看| 欧美成人精品一级在线观看| 香蕉视频国产精品人| 美女被躁出白浆视频播放| 亚洲欧美日韩精品专区| 岛国精品一区免费视频在线观看| 伊人欧美在线| 久久综合丝袜长腿丝袜| 永久免费无码日韩视频| 无码av免费不卡在线观看| 国产成人亚洲欧美激情| 99国产精品国产| 国产福利在线观看精品| 福利在线免费视频| 97国产在线视频| 91精品国产91欠久久久久|