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.

主站蜘蛛池模板: 2021精品国产自在现线看| 日本在线亚洲| 国产第四页| 玖玖免费视频在线观看| 久久人妻xunleige无码| 国产精品极品美女自在线网站| 蜜芽一区二区国产精品| 精品国产美女福到在线直播| 伊人狠狠丁香婷婷综合色| 婷婷色中文| 国产特级毛片| 五月天丁香婷婷综合久久| а∨天堂一区中文字幕| 91久久性奴调教国产免费| 国产成人凹凸视频在线| 久久夜色精品国产嚕嚕亚洲av| 女人爽到高潮免费视频大全| 国产人人射| 思思99热精品在线| 国产精品视频白浆免费视频| 波多野结衣第一页| 国产jizz| 成人午夜久久| 国产在线啪| 亚洲综合香蕉| 亚洲区欧美区| 亚洲欧美激情小说另类| 欧美高清国产| 广东一级毛片| 欧美一区国产| 亚洲欧美日韩中文字幕一区二区三区 | 最新国语自产精品视频在| 国产精品欧美在线观看| 国产第一福利影院| 欧美 国产 人人视频| 亚洲无卡视频| 亚洲日韩精品无码专区97| 日韩精品亚洲一区中文字幕| 日本午夜三级| 欧美中文字幕在线视频| 精品国产免费人成在线观看| 伊人欧美在线| 亚洲欧美激情小说另类| 亚洲男人天堂2018| 免费国产高清视频| 精品国产一区二区三区在线观看 | 日韩123欧美字幕| 中国一级特黄大片在线观看| 精品一区二区三区波多野结衣| 久久久久九九精品影院| 亚洲一区二区三区麻豆| 日韩在线播放中文字幕| 国产99视频免费精品是看6| 99久视频| 中字无码av在线电影| 中国国产A一级毛片| 国产素人在线| 国产视频一二三区| 欧美三级不卡在线观看视频| 亚洲91在线精品| 国产白浆视频| 亚洲综合二区| 五月婷婷亚洲综合| 精品国产一区二区三区在线观看| 欧美精品成人一区二区在线观看| 欧美高清国产| 免费无码AV片在线观看国产| 国产高清不卡视频| 国产日韩欧美中文| JIZZ亚洲国产| 天天视频在线91频| 久久96热在精品国产高清| aⅴ免费在线观看| 欧美无专区| 亚洲精品桃花岛av在线| 欧美精品伊人久久| 亚洲综合色在线| 国内毛片视频| 久久99国产综合精品女同| 成年A级毛片| 2021国产v亚洲v天堂无码| 欧美人在线一区二区三区|