freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

jee性能問題(編輯修改稿)

2024-08-31 09:22 本頁面
 

【文章內(nèi)容簡介】 下面的對象中:  1. 靜態(tài)變量   2. 長生命周期的類變量  每個類的靜態(tài)變量被JVM(JAVA虛擬機)所控制,他們存在與否和類是否已經(jīng)被初始化無關(guān)。一個類的所有實例共用一個存儲靜態(tài)變量的地方,因此在任何一個實例中修改靜態(tài)變量會影響這個類的其他實例。因此,如果一個程序在靜態(tài)變量中存放了一個對象,如果這個變量生命周期沒有到,那么這個對象就不會被JVM釋放。這些靜態(tài)對象是造成內(nèi)存泄漏的主要原因。  最后,對象能夠被放到內(nèi)部數(shù)據(jù)類型或者長生命周期類中的成員變量中,例如SERVLET。當(dāng)一個SERVLET被創(chuàng)建并且被裝載到內(nèi)存,它在內(nèi)存中僅有一個實例,采用多線程去訪問這個SERVLET實例。如果在INIT()方法中裝載配置信息,將他存儲于類變量中,那么當(dāng)需要維護(hù)的時候就可以隨時讀出這些信息,這樣所有的對象就用相同的配置。我常碰到的一個問題就是利用SERVLET類變量去存儲象頁面緩存這樣的信息。在他們自己內(nèi)部本身存貯這些緩存配置是個不錯的選擇,但存貯在SERVLET中是最糟糕的情況。如果你需要使用緩存,你最好使用第三方控制插件,例如 TANGOSOL的COHERENCE?! ‘?dāng)在頁面或者請求范圍中利用變量存放對象的時候,在他們結(jié)束的時候這些對象會自動釋放。同樣,在SESSION中存放對象的時候,當(dāng)程序明確說明此SESSION失效的或者會話執(zhí)行超時的時候,這些對象才會自動被釋放?! 『芏嗫雌饋硐髢?nèi)存泄漏的情況都是上面的那些會話中的泄漏。一個造成泄漏的會話并不是泄漏了內(nèi)存而是類似于泄漏,它消耗了內(nèi)存,但最終這些內(nèi)存都會被釋放的。如果程序服務(wù)器發(fā)生內(nèi)存溢出,判斷是內(nèi)存泄漏還是內(nèi)存缺乏的最好的方法就是:停止所有向這個服務(wù)器所發(fā)的請求的對象,等待會話超時,看內(nèi)存時候會被釋放出來。這雖然不會一定能夠達(dá)到你要的目的,但是這是最好的分段處理方法,當(dāng)你裝載測試器的時候,你應(yīng)該先掛斷你內(nèi)容巨大的會話而不是先去尋找內(nèi)存泄漏?! ⊥ǔ碚f,如果你執(zhí)行了一個很大的會話,你應(yīng)該盡量去減少它所占用的內(nèi)存空間,如果可以的話最好能重構(gòu)程序,以減少session所占據(jù)的內(nèi)存空間。下面2種方法可以降低大會話和內(nèi)存的沖突:  1. 增大堆的空間以支持你的大會話   2. 縮短會話的超時時間,讓它能夠快速的失效  一個巨大的堆會導(dǎo)致垃圾回收花費更多的時間,因此這不是一個好解決方法,但總比發(fā)生OutofMemoryError強。增加足夠的堆空間以使它能夠存儲所有應(yīng)該保存的有效值,也意味著你必須有足夠的內(nèi)存去存儲所有訪問你站點的用戶的有效會話。如果商業(yè)規(guī)則允許的話最好能縮短會話超時的時間,以減少堆占用空間的沖突。總結(jié)下,你應(yīng)該依據(jù)合理性和重要性按下面的步驟依次去執(zhí)行:  1. 重構(gòu)程序,盡量減少擁有session范圍的變量所存儲的信息量   2. 鼓勵你的客戶在他們使用完后,明確的釋放會話   3. 縮短超時的時間,以便于讓你內(nèi)存盡快的得到回收   4. 增加你堆空間的大小  無論如何,不要讓程序范圍級的變量,靜態(tài)變量,長生命周期的類存儲對象,事實上,你需要在內(nèi)存模擬器中去分析泄漏。  異常的持久空間  容易誤解JVM為持久空間分配內(nèi)存的目的。堆僅僅存儲類的實例,但JVM在堆中創(chuàng)建類實例之前,它必須把字節(jié)流文件(.class文件)裝載到程序內(nèi)存中。它利用內(nèi)存中的字節(jié)流在堆中創(chuàng)建類的實例。JVM利用程序的內(nèi)存來裝載字節(jié)流文件,這個內(nèi)存空間稱為持久空間。圖6顯示了持久空間和堆的關(guān)系:它存在于JVM程序中,并不是堆的一部分。Figure 6. The relationship between the permanent space and the heap  通常,你可能想讓你的持久空間足夠大以便于它能夠裝載你程序所有的類,因為很明顯,從文件系統(tǒng)中讀取類文件比從內(nèi)存中裝載代價高很多。JVM提供了一個參數(shù)讓你不的程序不卸載已經(jīng)裝載到持久空間中的類文件:  –noclassgc  這個參數(shù)選項告訴JVM不要跑到持久空間去執(zhí)行垃圾收集釋放其中已經(jīng)裝載的類文件。這個參數(shù)選項很聰明,但是會引起一個問題:當(dāng)持久空間滿了以后依然需要裝載新文件的時候JVM會怎么處理呢?我觀測到的資料說明:如果JVM檢測到持久空間還需要內(nèi)存,就會調(diào)用主垃圾收集程序。垃圾收集器清除堆,但它并不會對持久空間進(jìn)行任何操作,因此它的努力是白費的。于是JVM就再重新檢測持久空間,看它是否滿,然后再次執(zhí)行程序,一遍的一遍重復(fù)?!∥业谝淮闻龅竭@種問題的時候,用戶抱怨說程序性能很差勁,并且在運行了幾次后就出現(xiàn)了問題,可能是內(nèi)存溢出問題。在我調(diào)查了詳細(xì)的關(guān)于堆和程序內(nèi)存利用的收集器的記錄后,我迅速發(fā)覺堆的狀態(tài)非常正常,但程序確發(fā)生了內(nèi)存溢出。這個用戶維持了數(shù)千的JSP頁面,在裝載到內(nèi)存前把他們都編譯成了字節(jié)流文件放入持久空間。他的環(huán)境已經(jīng)造成了持久空間溢出,但是在堆中由于用了 noclassgc 選項,于是JVM并不去釋放類文件來裝載新的類文件。于是就導(dǎo)致了內(nèi)存溢出錯誤,我把他的持久空間改為512M大小,并去掉了 noclassgc 參數(shù)?! ≌駡D7顯示的,當(dāng)持久空間變滿了的時候,就引發(fā)垃圾收集,清理了樂園和幸存者空間,但是并不釋放持久空間中的一點內(nèi)存。Figure 7. Garbage collection behavior when the permanent space bees full. Click on thumbnail to view fullsized image.  注意  當(dāng)設(shè)置持久空間大小時候,一般考慮128M,除非你的程序有很多的類文件,這個時候,你就可以考慮使用256M大小。如果你想讓他能夠裝載所有的類的時候,就會導(dǎo)致一個典型的結(jié)構(gòu)錯誤。設(shè)置成512M就足夠了,它僅僅是暫時的時間的花費。把持久空間設(shè)置成512M大小就象給一個腳痛的人吃止痛藥,雖然暫時緩解了痛,但是腳還是沒有好,依然需要醫(yī)生把痛治療好,否則只是把問題延遲了而已?! 【€程池  外界同WEB或程序服務(wù)器連接的主要方法就是向他們發(fā)送請求,這些請求被放置到程序的執(zhí)行次序隊列中。和內(nèi)存最大的沖突就是程序服務(wù)器所設(shè)置的線程池的大小。線程池的大小就是程序可以同時處理的請求的數(shù)量。如果池太小,請求就需要在隊列中等待程序處理,如果太大,CPU就需要花費太多的時間在這些眾多的線程之間來回的切換?! ∶總€服務(wù)器都有一個SOCKET負(fù)責(zé)監(jiān)聽。程序把接受到的請求放到待執(zhí)行隊列中,然后將這個請求從隊列移動到線程中被程序處理。  圖8顯示了服務(wù)器的處理程序。Figure 8. 服務(wù)器處理請求的次序結(jié)構(gòu)線程池太小  每當(dāng)我碰到有人抱怨裝載速度的性能隨著裝載的數(shù)量的增加變的越來越糟糕的時候,我會首先檢查線程池。特別是,我在看到下面這些信息的時
點擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1