日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用String.intern()减少内存使用

發(fā)布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用String.intern()减少内存使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

時不時地會有一個垂死的生產(chǎn)應(yīng)用程序。 而且您知道您需要盡快對其進行修補。 我們也一樣,并認為分享最近的一個戰(zhàn)爭故事將很有趣。 在這種情況下,我們就有機會使用String.intern()之類的簡單補丁來修補應(yīng)用程序。 但是,讓我從頭開始。

當前的應(yīng)用程序正遭受內(nèi)存不足的困擾,甚至在最近的更改后都無法啟動。 癥狀包括JVM重新啟動后CPU使用率過高,然后幾分鐘后出現(xiàn)致命的OutOfMemoryError:日志中的堆空間 。 快速查看堆內(nèi)容使我們產(chǎn)生了疑問-應(yīng)用程序正在將數(shù)百萬個對象加載到某個內(nèi)部數(shù)據(jù)結(jié)構(gòu)中。

與開發(fā)團隊進行的背景調(diào)查顯示,最近加載的對象數(shù)量乘以兩倍-而不是大約500萬個對象,應(yīng)用程序現(xiàn)在必須處理大約一千萬個內(nèi)存實例。 實際上,這可能會占用一些堆空間。 但是,知道可能的原因并不會給我們帶來太大幫助-企業(yè)主絕不愿意放棄他們剛剛獲取的寶貴數(shù)據(jù)。

深入研究手頭的數(shù)據(jù)結(jié)構(gòu),我們發(fā)現(xiàn)其在下面過度使用了字符串。 對于我們的任何讀者來說,這都不奇怪。 但是其中一些字符串包含重復的表示內(nèi)容。 您可以將地址元素(例如街道名稱和/或國家/地區(qū))視為等效的情況。

快速解決方案開始在我們的腦海中醞釀。 如果我們內(nèi)部化那些重復的字符串怎么辦? 與應(yīng)用程序的開發(fā)人員Swift核實之后,我們獲得了綠燈。 開發(fā)人員保證,將包含實習的副作用,例如記住String.intern()與我們內(nèi)部化的Strings進行比較的所有字符串。 感謝上帝的封裝。

現(xiàn)在我們只需要了解內(nèi)部化要引入多少CPU開銷。 令我們驚訝的是,實習到大約1000萬個琴弦只花了不到四分鐘的時間。 并為我們節(jié)省了大約不足的500MB內(nèi)存。 因此,節(jié)省了時間。

現(xiàn)在,在您跳至應(yīng)用程序并開始內(nèi)部化將要查找的所有Strings之前,我必須事先警告您。 有很多可能出錯的地方:

  • 您內(nèi)部化的字符串將從堆中消失,并重新定位到永久代。 因此,請確保您在permgen空間中有足夠的空間。
  • 確保將要與內(nèi)部化的字符串進行比較的所有字符串內(nèi)部化。 否則,您將在應(yīng)用程序中創(chuàng)建最討厭的錯誤類型。
  • 確保可以忍受內(nèi)部化時的CPU開銷。 這是一個本機方法調(diào)用,因此它將完全取決于您的特定平臺,因此請確保在進行生產(chǎn)更改之前嘗試一下

我們承認這種情況很少見–數(shù)據(jù)結(jié)構(gòu)包含許多重復的String對象,并以一種使我們能夠隔離快速修復的方式與應(yīng)用程序集成。 甚至在我們的情況下,該修復程序很快也被開發(fā)人員刪除,他們將數(shù)據(jù)結(jié)構(gòu)重新設(shè)計為更合理的圖形表示形式。

但是除了警告-Java虛擬機中內(nèi)置了有趣且有用的工具。 知道如何使用它們,并提防它們的副作用,它們將成為您的朋友。 謹慎使用它們,您可以輕松終止應(yīng)用程序。 您最好的朋友將永遠是一個基于您自己的應(yīng)用程序構(gòu)建的實際測試用例。

參考: Plumbr博客上的JCG合作伙伴 Nikita Salnikov Tarnovski的 String.intern()減少了內(nèi)存使用 。

翻譯自: https://www.javacodegeeks.com/2013/06/reducing-memory-usage-with-string-intern.html

總結(jié)

以上是生活随笔為你收集整理的使用String.intern()减少内存使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。