欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java程序中的延遲加載功能使用

 更新時(shí)間:2015年07月10日 12:11:50   投稿:goldensun  
這篇文章主要介紹了Java程序中的延遲加載功能使用,一定程度上有助于提升性能和降低內(nèi)存使用率,需要的朋友可以參考下

使用多個(gè)對(duì)象或者大數(shù)據(jù)結(jié)構(gòu)時(shí),一種提升其性能的方式是運(yùn)用延遲加載或賦值(來(lái)實(shí)現(xiàn))。將費(fèi)時(shí)的操作盡可能的縮短的想法,從未實(shí)現(xiàn)。我通過(guò)一些例子來(lái)說(shuō)明延遲加載技術(shù)在Java中如何運(yùn)用,給予一些指引以在其他語(yǔ)言中能更易(使用)并作為核心語(yǔ)言的一部分。

一種使用場(chǎng)景是通過(guò)JTable來(lái)展示數(shù)百個(gè)包含元數(shù)據(jù)和測(cè)量值得域?qū)ο蟆3跏蓟覀兊挠驅(qū)ο笤趦?nèi)存中能保存兩種類型的對(duì)象,即便在表格中僅顯示部分元數(shù)據(jù)。構(gòu)建該表格將花費(fèi)數(shù)秒鐘的時(shí)間,(但)我們可以接受再次展示數(shù)百項(xiàng)(數(shù)據(jù))。在做了一些分析過(guò)后,我們改進(jìn)了我們的實(shí)現(xiàn),看起來(lái)像這樣:
 

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;
 }
}

這種改進(jìn)改善了顯示時(shí)間的條目和顯著提高了我們處理大數(shù)據(jù)項(xiàng)的(能力)。所有的數(shù)據(jù)載入僅在有人想查看測(cè)量的具體細(xì)節(jié)和雙擊某條目時(shí)才會(huì)發(fā)生。


一種java拆箱后得到延遲賦值在條件語(yǔ)句的情況下
 

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

持久層框架像Hibernate時(shí)常默認(rèn)延遲加載是因?yàn)樵谕ǔG闆r下數(shù)據(jù)庫(kù)訪問(wèn)并且數(shù)據(jù)傳送代價(jià)相當(dāng)高昂。

大多數(shù)語(yǔ)言功能是基于環(huán)繞延遲賦值的情況下這種理論上的功能如同第一個(gè)類所有成員最大程度上隔離降低副作用對(duì)延遲的影響。Scala混合了面向?qū)ο笳Z(yǔ)言功能并引進(jìn)延遲關(guān)鍵字簡(jiǎn)化了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()
 }
}

結(jié)論

延遲加載不是新的革命性技術(shù)但當(dāng)處理大數(shù)據(jù)或放慢資源卻是一個(gè)非常有用的工具。在這些很多情況下你能使用它提升性能或使用者親身經(jīng)歷使用它。

它可以降低實(shí)現(xiàn)代碼的成本如果語(yǔ)言支持不是很好(像java)和其它一些情況的下應(yīng)用就要在預(yù)編譯預(yù)處理情況下感受更多的響應(yīng)。

相關(guān)文章

  • RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解

    RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解

    這篇文章主要為大家介紹了RocketMQ源碼解析topic創(chuàng)建機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • SpringBoot  jdbctemplate使用方法解析

    SpringBoot jdbctemplate使用方法解析

    這篇文章主要介紹了SpringBoot jdbctemplate使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Mybatis-Plus?CRUD操作方法

    Mybatis-Plus?CRUD操作方法

    通用?Service?CRUD?封裝?IService?接口,進(jìn)一步封裝?CRUD?采用?get?查詢、remove?刪除?、list?查詢集合、page?分頁(yè)的前綴命名方式區(qū)分?Mapper?層避免混淆,這篇文章主要介紹了Mybatis-Plus?CRUD的相關(guān)知識(shí),需要的朋友可以參考下
    2023-10-10
  • java編程之xpath介紹

    java編程之xpath介紹

    這篇文章主要介紹了java編程之xpath介紹,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • thymeleaf中前后端數(shù)據(jù)交互方法匯總

    thymeleaf中前后端數(shù)據(jù)交互方法匯總

    這篇文章主要介紹了thymeleaf中前后端數(shù)據(jù)交互小結(jié),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-07-07
  • JAVA中實(shí)現(xiàn)原生的 socket 通信機(jī)制原理

    JAVA中實(shí)現(xiàn)原生的 socket 通信機(jī)制原理

    本篇文章主要介紹了JAVA中實(shí)現(xiàn)原生的 socket 通信機(jī)制原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • jvm類加載器基礎(chǔ)解析

    jvm類加載器基礎(chǔ)解析

    這篇文章主要介紹了jvm類加載器基礎(chǔ)解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • SpringBoot整合FastDFS方法過(guò)程詳解

    SpringBoot整合FastDFS方法過(guò)程詳解

    這篇文章主要介紹了SpringBoot整合FastDFS方法過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別

    這篇文章主要介紹了java中Class.getMethods()和Class.getDeclaredMethods()方法的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Spring Boot中整合Spring Security并自定義驗(yàn)證代碼實(shí)例

    Spring Boot中整合Spring Security并自定義驗(yàn)證代碼實(shí)例

    本篇文章主要介紹了Spring Boot中整合Spring Security并自定義驗(yàn)證代碼實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論