亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

你知道數據大小嗎?

2019-11-18 12:09:15
字體:
來源:轉載
供稿:網友

  --不要花太多的功夫來隱藏類的成員(三)
  
  你知道數據大小嗎?--不要花太多的功夫來隱藏類的成員(三)  copyright(翻譯
   
  要害字   數據大小 對象大小 堆空間
   
  出處   http://www.javaworld.com/javaworld/javatips/jw-javatip130-p3.Html
   
  我們能做點什么呢?
  
  “這很好,但是我們沒有任何選擇除了使用String和其它Java提供的類型,是不是這樣呢?”我聽到你們再問,那么讓我們來找找答案吧。
  
  l     封裝類
  
  封裝類比如java.lang.Integer,看起來保存大量的數據在內存中像一個壞的選擇。假如你盡力為了內存的經濟,那么就要避免這么做。使用你自己的針對int的向量類并不難。當然,假如Java的核心函數庫已經包含了這個那就最好不過了?;蛟S這種情況在Java擁有非凡類型的時候將會大大改觀。
  
  l     多位數組
  
  對于使用多維數組的大型的數據結構,你可以時常的通過簡單的索引變換減少額外的維數/例如:轉換int[dim1][dim2]的實例到一個int[dim1*dim2]的實例,改變所有形如a[i][j]的表達式為a[i*dim1+j]。這樣你就不必花功夫在dim1上的索引檢查可以提高效率。
  
  l     java.lang.String
  
  你可以使用一些小技巧去減少你的應用中字符串的靜態內存大小。
  
  首先,你可以嘗試一種很平常的技術,就是當一個應用從一個數據文件或者網絡連接中載入或者緩存很多的字符串,并且這種字符串的值是有限變化的。舉個例子:假如你想分析一個xml文件,在這個文件中,你經常碰到某種屬性,但是這個屬性僅僅被限制在兩個可能的值。你的目標:通過一個散列映射過濾所有的字符串,減少所有相同的但是明顯字符串和目標對象引用一樣的。
  
    public String internString (String s)
    {
      if (s == null) return null;
      String is = (String) m_strings.get (s);
      if (is != null)
        return is;
      else
      {
        m_strings.put (s, s);
        return s;
      }
    }
  
    PRivate Map m_strings = new HashMap ();
  
  假如適用成功,這個技巧能夠成倍的減少你的靜態內存需求。一個富有經驗的讀者應該能夠觀察到這個技巧復制java.lang.String.intern()的功能性。有無數的理由存在來讓你避免使用String.intern()方法。其中一個就是現在的JVM幾乎沒有能實現大量數據的保留。
  
  假如你的字符串是完全不同的,會發生什么情況呢?這就是要介紹的第二個技巧,重新收集那些小的字符串空間,這些空間潛在的隱藏于char數組中,因為使用數組大概只占了字符串封裝所占用的內存的一半。因此,當我們的應用緩存許多獨特的字符傳值,我們僅僅只要保持在內存中的數組,在需要的時候轉換為字符串。假如這個字符串只是作為暫時的,很快就會拋棄,這將很有效果。一個簡單的實驗就是從一個字典文件中選出作為緩存的90000個單詞,這些數據大約5.6M的大小,假如是char的話,只需要3.4M的空間,只占用了以前的65%。
  
  第二個技巧明顯的包含一個不利條件,就是你不能支持通過一個構造函數轉換一個char[]成為字符串,因為這個構造函數沒有復制這個數組而將擁有這個數組。為什么呢?因為這個完全的public的字符串API確保每一個字符串是不可變的,所以每個字符串的構造函數顯然要復制輸入的數據然后傳入它的參數。
  
  然后,我們將使用第三個技巧。這個技巧用在當轉換一個char數組為一個字符串的代價證實太高的時候。該技巧使用java.lang.String.substr()的功能避免數據復制:這個方法的是顯示用了字符串的不變性,并且創建的一個影子字符串對象來共享字符內容,但是它的內部的開始位置和結束位置都是正確的。我們還是寫一個例子,new String(“smiles”).substring(1,5)是一個字符串,這個字符串是字符緩沖從位置1到位置4的字符結束,并且這個字符緩沖將共享原來的字符串構造函數指向的字符緩沖。你可以象一下這樣使用:給出一個大的字符串集合,你可以合并它的字符內容到一個大的字符數組,在它之上創建一個字符串,并且使用這個主串的子串來重新創建一個原來的字符串。如以下描述:
    public static String [] compactStrings (String [] strings)
    {
      String [] result = new String [strings.length];
      int offset = 0;
      for (int i = 0; i < strings.length; ++ i)
        offset += strings [i].length ();
      // Can't use StringBuffer due to how it manages capacity
      char [] allchars = new char [offset];
      offset = 0;
      for (int i = 0; i < strings.length; ++ i)
      {
        strings [i].getChars (0, strings [i].length (), allchars, offset);
        offset += strings [i].length ();
      }
      String allstrings = new String (allchars);
      offset = 0;
      for (int i = 0; i < strings.length; ++ i)
        result [i] = allstrings.substring (offset,
                         offset += strings [i].length ());
      return result;
    }
  
  以上方法返回一個新的字符串集等同于輸入的字符串集,但是在內存中更加得緊湊。重新獲得每個字符串數組的16個字節的頭部,在方法中被有效的移除。這個存儲在緩存壓縮大多數短的字符串時比較有效果。當這個方法用于同樣的90000個單詞的字典時,內存從5.6M節約到4.2M,大概節約了30%。
  
  l     這些努力是否值得呢?
  我這里提到的方法看起來都是很細微的優化,是否值得花時間去實現呢?但是,記住我們腦子里面應該記?。悍斩说膽贸绦蚰軌蚓彺娲罅康臄祿趦却嬷械脑捴v能夠大大的提高從磁盤和數據庫提取數據的性能和效率。在當前32位的JVM中,幾百兆的緩存數據代表堆中很引人注重的位置。減少30%或者更多不應該被嘲笑,它能將系統的可測性質中能提高很顯著的水平。當然這些技巧不適用于一開始就很好設計的數據結構,事實的決定要由hotspots來決定。無論如何,你現在應該更加了解你的對象消耗了多少內存。
  
  關于作者:
  Vladimir RouBTsov擁有超過12年的多種語言的編程經驗,其中包括從1995年就開始用得Java。目前,它作為資深開發者在Austin, Texas.為Trilogy開發企業級軟件。平時的業余愛好就是開發一些關于Java字節代碼或源程序代碼的工具。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级片久久久久久久| 精品亚洲夜色av98在线观看| 国产精品a久久久久久| 日本精品性网站在线观看| 国产精品一久久香蕉国产线看观看| 7m第一福利500精品视频| 亚洲另类xxxx| 亚洲乱码国产乱码精品精天堂| 国产精品露脸自拍| 国内精品模特av私拍在线观看| 国产成+人+综合+亚洲欧洲| 18性欧美xxxⅹ性满足| 欧美性xxxxx极品| 欧美电影《睫毛膏》| 色偷偷噜噜噜亚洲男人| 高清欧美性猛交xxxx| 国产精品偷伦视频免费观看国产| 国产精品一区二区3区| 日韩视频在线观看免费| 日韩免费精品视频| 日韩在线观看网址| 最近中文字幕日韩精品| 欧美激情亚洲综合一区| 亚洲欧美国产精品va在线观看| 欧美亚洲国产成人精品| 欧美日本高清视频| 日本一欧美一欧美一亚洲视频| 国产精品视频区| 国产亚洲激情视频在线| 26uuu亚洲伊人春色| 久久久久久久香蕉网| 久久精品国产成人| 亚洲黄页网在线观看| 亚洲综合大片69999| 国产精品电影在线观看| 国产不卡av在线免费观看| 国产91成人video| 高潮白浆女日韩av免费看| 欧美视频国产精品| 久久久精品免费| 少妇激情综合网| 亚洲综合在线中文字幕| 国产精品一区二区性色av| 中文字幕亚洲一区在线观看| 亚洲深夜福利在线| 国产精品尤物福利片在线观看| 国产精品偷伦视频免费观看国产| 久久男人的天堂| 欧美xxxx综合视频| 久久久精品999| 欧美性猛交99久久久久99按摩| 欧美视频在线观看免费| 日韩av电影手机在线观看| 欧美猛少妇色xxxxx| 色婷婷久久av| 成人午夜在线观看| 中文一区二区视频| 亚洲一区国产精品| 久久亚洲国产精品成人av秋霞| 欧美野外猛男的大粗鳮| 国产suv精品一区二区三区88区| 国产精品一区二区三区成人| 在线观看欧美成人| 国内精品久久久久久久久| 日韩美女av在线免费观看| 欧美亚洲另类制服自拍| 国产在线视频91| 国产成人免费av| 亚洲精品小视频| 理论片在线不卡免费观看| 懂色av影视一区二区三区| 欧美一级在线播放| 国产成人亚洲综合91| 亚洲视频欧洲视频| 国产视频999| 亚洲欧美日韩中文视频| 亚洲第一区中文字幕| 精品女同一区二区三区在线播放| 国产精品999999| xxxx欧美18另类的高清| 超碰97人人做人人爱少妇| 国外成人在线直播| 亚洲第一区中文字幕| 欧美综合在线观看| 国产一区二区黄| 国内精品久久久久久影视8| 日韩视频在线观看免费| 日本一区二区不卡| 久久夜精品香蕉| 中国日韩欧美久久久久久久久| 亚洲福利精品在线| 国产成人精品日本亚洲| 日韩hd视频在线观看| 久久精品欧美视频| 国产ts人妖一区二区三区| 亚洲欧美成人精品| 欧美激情在线播放| 美女av一区二区| 国产91色在线播放| 2019中文字幕在线| 精品高清一区二区三区| 成人妇女免费播放久久久| 综合久久五月天| 欧美一级淫片播放口| 97国产精品免费视频| 久久91精品国产91久久跳| 亚洲欧美成人一区二区在线电影| 欧美精品做受xxx性少妇| 精品国产乱码久久久久酒店| 欧美日韩国产成人高清视频| 国产精品白嫩初高中害羞小美女| 国产精品亚洲精品| 在线视频中文亚洲| 社区色欧美激情 | 91亚洲精品久久久久久久久久久久| 日本老师69xxx| 久久精品电影网站| 欧美理论在线观看| 久久国产一区二区三区| 欧美激情视频播放| 69av在线视频| 久久91精品国产91久久跳| 国产欧美在线观看| 亚洲精品国产欧美| 精品免费在线观看| 欧美俄罗斯乱妇| 8x拔播拔播x8国产精品| 国产在线精品一区免费香蕉| 中文字幕亚洲第一| 成人欧美在线视频| 欧美精品videosex极品1| 欧美午夜片欧美片在线观看| 久久久精品国产| 最新91在线视频| 日韩中文字幕网| 国产精品久久久久一区二区| 国产精品一区二区三| 成人免费高清完整版在线观看| 国产精品电影观看| 中文字幕亚洲一区在线观看| 欧美色视频日本高清在线观看| 这里只有视频精品| 日av在线播放中文不卡| 国产极品精品在线观看| 欧美专区在线播放| 成人免费高清完整版在线观看| 97av在线视频| 4438全国亚洲精品在线观看视频| 亚洲国产天堂久久综合网| 日韩一区二区三区国产| 精品偷拍各种wc美女嘘嘘| 亚洲欧美国产视频| 国产精品美女在线| 伊人久久久久久久久久久| 一区二区中文字幕| 麻豆国产精品va在线观看不卡| 国产精品第2页| 亚洲全黄一级网站| 日韩欧美精品中文字幕| 91精品综合视频| 成人做爰www免费看视频网站| 久久精品国产亚洲精品| 91精品啪在线观看麻豆免费| 国产精品影院在线观看|