国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

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

使用多個對象或者大數據結構時,一種提升其性能的方式是運用延遲加載或賦值(來實現)。將費時的操作盡可能的縮短的想法,從未實現。我通過一些例子來說明延遲加載技術在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)和其它一些情況的下應用就要在預編譯預處理情況下感受更多的響應。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛坪县| 额尔古纳市| 肥乡县| 吴旗县| 文山县| 微博| 义乌市| 平舆县| 重庆市| 邹城市| 南阳市| 田林县| 巴楚县| 永顺县| 岳西县| 潜山县| 右玉县| 邮箱| 泽州县| 彭泽县| 乌恰县| 锡林浩特市| 桦甸市| 东平县| 景宁| 陵水| 信阳市| 新沂市| 建始县| 宜兰市| 巴林左旗| 开江县| 株洲市| 金寨县| 和政县| 利川市| 白玉县| 岳普湖县| 桐庐县| 宜宾市| 宜宾市|