真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一個分析和解決Java應(yīng)用程序內(nèi)存浪費的實戰(zhàn)例子,值得收藏!

內(nèi)存是當(dāng)今世界上被廣泛浪費的硬件資源之一。由于編程效率低下,驚人量的內(nèi)存浪費被浪費了。這種模式在多個企業(yè)應(yīng)用程序中重復(fù)出現(xiàn)。為了證明這種情況,我們進行了一項小型研究。
我們分析了著名的spring boot pet診所應(yīng)用程序,以查看浪費了多少內(nèi)存。該應(yīng)用程序是由spring社區(qū)設(shè)計的,旨在顯示spring應(yīng)用程序框架如何用于構(gòu)建簡單但功能強大的面向數(shù)據(jù)庫的應(yīng)用程序。
環(huán)境準(zhǔn)備
Spring Boot 2.1.4
Java SDK 1.8
Tomcat 8.5.20
MySQL 5.7.26
壓力測試
我們使用了流行的開源負載測試工具Apache JMeter進行壓力測試。我們使用以下設(shè)置執(zhí)行了30分鐘的負載測試:
線程數(shù)(用戶)– 1000(連接到目標(biāo)的用戶數(shù))
加速周期(以秒為單位)–所有請求開始的時間范圍。根據(jù)我們的配置,每0.01秒,將啟動1個新線程,即100個線程/秒。
循環(huán)計數(shù)–這1000個線程背靠背執(zhí)行測試迭代。
持續(xù)時間(秒)–加速后,1000個線程連續(xù)運行1800秒?! ?/div>
我們在負載測試中采用了以下方案:
將新的寵物主人添加到系統(tǒng)。
查看有關(guān)寵物主人的信息。
向系統(tǒng)添加新寵物。
查看有關(guān)寵物的信息。
將有關(guān)訪問的信息添加到寵物的訪問歷史中。
更新有關(guān)寵物的信息。
更新有關(guān)寵物主人的信息。
通過搜索其姓名查看所有者信息。
查看所有所有者的信息。
如何測量內(nèi)存浪費?
業(yè)界有數(shù)百種工具可以顯示所使用的內(nèi)存量。但是我們很少遇到能夠測量由于編程效率低下而浪費的內(nèi)存量的工具。HeapHero是一個簡單的工具,可以分析堆轉(zhuǎn)儲并告訴您由于編程效率低而浪費了多少內(nèi)存。
測試運行時,我們從Spring Boot Pet Clinic應(yīng)用程序捕獲了堆轉(zhuǎn)儲。
我們將捕獲的堆轉(zhuǎn)儲上傳到HeapHero工具中,工具生成了這個漂亮的報告,顯示由于效率低下的編程浪費了65%的內(nèi)存。是的,這是一個簡單的原始應(yīng)用程序,應(yīng)該在其中實現(xiàn)所有最佳實踐,在一個廣為人知的框架上也浪費了65%的內(nèi)存。
分析內(nèi)存浪費
從報告中,您可以注意到以下內(nèi)容:
字符串重復(fù)導(dǎo)致浪費了15.6%的內(nèi)存
由于原始數(shù)組效率低下,浪費了14.6%的內(nèi)存
由于重復(fù)的原始數(shù)組浪費了14.3%的內(nèi)存
由于收集效率低下,浪費了12.1%的內(nèi)存
字符串重復(fù)
在此Spring啟動應(yīng)用程序(和大多數(shù)企業(yè)應(yīng)用程序)中浪費內(nèi)存的主要原因是字符串重復(fù)。該報告顯示了由于重復(fù)字符串而浪費了多少內(nèi)存,它們是什么字符串,誰在創(chuàng)建它們以及如何對其進行優(yōu)化。
您會注意到由于重復(fù)的字符串浪費了15.6%的內(nèi)存。請注意
'Goldi'字符串已被創(chuàng)建207,481次。
“Visit”字符串已創(chuàng)建132,308次?!霸L問”是我們在測試腳本中提到的描述。
“Banglore”字符串已創(chuàng)建75,374次。“ Banglore”是我們在測試腳本中指定的城市名稱。
'123123123'已被創(chuàng)建37,687次。
“ Mahesh”字符串已創(chuàng)建37,687次。
顯然,“Goldi”是通過測試腳本在屏幕上輸入的寵物的名稱。“訪問”是通過測試腳本在屏幕上輸入的描述。同樣,是值。但是有一個問題,為什么要創(chuàng)建相同的字符串對象那么幾千次。
我們都知道字符串是不可變的(即一旦創(chuàng)建,就無法修改)。鑒于為什么要創(chuàng)建成千上萬個重復(fù)的字符串?
HeapHero工具還報告創(chuàng)建這些重復(fù)字符串的代碼路徑。
收款效率低下
在彈簧靴寵物診所應(yīng)用中造成內(nèi)存浪費的另一個主要原因是收集效率低下。以下是HeapHero報告的摘錄:
您會注意到,內(nèi)存中99%的LinkedHashSet中沒有任何元素。如果沒有元素,為什么還要創(chuàng)建LinkedHashSet?當(dāng)您創(chuàng)建一個新的LinkedHashSet對象時,將在內(nèi)存中保留16個元素的空間?,F(xiàn)在為這16個元素保留的所有空間都被浪費了。如果對LinedHashset進行延遲初始化,則不會出現(xiàn)此問題。
不良做法:
最佳實踐:
同樣,另一個觀察結(jié)果是:68%的ArrayList中僅包含1個元素。創(chuàng)建ArrayList對象時,將在內(nèi)存中保留10個元素的空間。這意味著在88%的ArrayList中9個元素的空間被浪費了。如果可以使用容量初始化ArrayList,則可以避免此問題。
不良做法:使用默認(rèn)值初始化集合。
new ArrayList();
最佳實踐:使用容量初始化集合
new ArrayList(1);
內(nèi)存不便宜
一個人可以反駁說,內(nèi)存是如此便宜,那么為什么我要擔(dān)心它呢?公平的問題。但是在云計算時代,我朋友的記憶并不便宜。有4種主要的計算資源:中央處理器、內(nèi)存、網(wǎng)絡(luò)、存儲。
您的應(yīng)用程序可能在AWS EC2實例上運行的數(shù)十萬個應(yīng)用程序服務(wù)器上運行。在上述4種計算資源中,哪個資源在EC2實例中已飽和?
對于大多數(shù)應(yīng)用程序,它是內(nèi)存。CPU始終為30 – 60%??偸怯写罅康拇鎯臻g。很難飽和網(wǎng)絡(luò)(除非您的應(yīng)用程序正在流式傳輸大量視頻內(nèi)容)。因此,對于大多數(shù)應(yīng)用程序來說,首先是內(nèi)存飽和。即使CPU,存儲和網(wǎng)絡(luò)未充分利用,僅由于內(nèi)存變得飽和,您最終還是會配置越來越多的EC2實例。這將使您的計算成本增加幾倍。
另一方面,由于編程效率低下,現(xiàn)代應(yīng)用程序無一例外地浪費了30%-90%的內(nèi)存。即使在沒有太多業(yè)務(wù)邏輯的Spring Boot寵物診所之上,也浪費了65%的內(nèi)存。實際的企業(yè)應(yīng)用程序?qū)⒗速M相似的數(shù)量,甚至更多。
因此,如果您可以編寫內(nèi)存有效的代碼,那么它將降低您的計算成本。由于內(nèi)存是第一個達到飽和的資源,因此,如果可以減少內(nèi)存消耗,則可以在較少數(shù)量的服務(wù)器實例上運行應(yīng)用程序。您也許可以減少30 – 40%的服務(wù)器。這意味著您的管理層可以減少30%-40%的數(shù)據(jù)中心(或云托管提供商)成本,再加上維護和支持成本。它可以節(jié)省數(shù)百萬/數(shù)十億元的成本。
結(jié)論
除了減少計算成本,編寫內(nèi)存效率高的代碼后,您的客戶體驗也將變得更好。如果您可以減少為服務(wù)新的傳入請求而創(chuàng)建的對象數(shù)量,則響應(yīng)時間將大大縮短。由于創(chuàng)建的對象較少,因此在創(chuàng)建和垃圾回收對象上將花費較少的CPU周期。減少響應(yīng)時間將提供更好的客戶體驗。

加我VX:17324089390  回復(fù)關(guān)鍵詞“測試”領(lǐng)取限量軟件測試學(xué)習(xí)資料哦~~

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站制作、路南網(wǎng)絡(luò)推廣、微信小程序開發(fā)、路南網(wǎng)絡(luò)營銷、路南企業(yè)策劃、路南品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供路南建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com


標(biāo)題名稱:一個分析和解決Java應(yīng)用程序內(nèi)存浪費的實戰(zhàn)例子,值得收藏!
鏈接地址:http://weahome.cn/article/gsojhe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部