Java程式中的消極式載入功能使用_java

來源:互聯網
上載者:User

使用多個對象或者大資料結構時,一種提升其效能的方式是運用消極式載入或賦值(來實現)。將費時的操作儘可能的縮短的想法,從未實現。我通過一些例子來說明消極式載入技術在Java中如何運用,給予一些指引以在其他語言中能更易(使用)並作為核心語言的一部分。

一種使用情境是通過JTable來展示數百個包含中繼資料和測量值得域對象。初始化我們的域對象在記憶體中能儲存兩種類型的對象,即便在表格中僅顯示部分中繼資料。構建該表格將花費數秒鐘的時間,(但)我們可以接受再次展示數百項(資料)。在做了一些分析過後,我們改進了我們的實現,看起來像這樣:
 

public class DomainObject { private final DataParser parser; private final Map<String, String> header = new HashMap<>(); private final List<Data> data = new ArrayList<>();  public DomainObject(DataParser aParser) {  parser = aParser; }  public String getHeaderField(String name) {  // Here we lazily parse and fill the header map  if (header.isEmpty()) {   header.addAll(parser.header());  }  return header.get(name); } public Iterable<Data> getMeasurementValues() {  // again lazy-load and parse the data  if (data.isEmpty()) {   data.addAll(parser.measurements());  }  return data; }}

這種改進改善了顯示時間的條目和顯著提高了我們處理大資料項目的(能力)。所有的資料載入僅在有人想查看測量的具體細節和雙擊某條目時才會發生。


一種java拆箱後得到延遲賦值在條件陳述式的情況下
 

// lazy and fast because the expensive operation will only execute when neededif (aCondition() && expensiveOperation()) { ... } // slow order (still lazy evaluated!)if (expensiveOperation() && aCondition()) { ... }

持久層架構像Hibernate時常預設消極式載入是因為在通常情況下資料庫訪問並且資料傳送代價相當高昂。

大多數語言功能是基於環繞延遲賦值的情況下這種理論上的功能如同第一個類所有成員最大程度上隔離降低副作用對延遲的影響。Scala混合了物件導向語言功能並引進延遲關鍵字簡化了java樣式,延遲初始代碼就像下面這樣
 

public class DomainObject(parser: DataParser) { // evaluated on first access private lazy val header = { parser.header() }  def getHeaderField(name : String) : String = {  header.get(name).getOrElse("") }  // evaluated on first access lazy val measurementValues : Iterable[Data] = {  parser.measurements() }}

結論

消極式載入不是新的革命性技術但當處理大資料或放慢資源卻是一個非常有用的工具。在這些很多情況下你能使用它提升效能或使用者親身經曆使用它。

它可以降低實現代碼的成本如果語言支援不是很好(像java)和其它一些情況的下應用就要在先行編譯預先處理情況下感受更多的響應。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.