一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java程序中的延遲加載功能使用

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

2019-12-26 13:16goldensun JAVA教程

這篇文章主要介紹了Java程序中的延遲加載功能使用,一定程度上有助于提升性能和降低內存使用率,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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拆箱后得到延遲賦值在條件語句的情況下
 

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

持久層框架像Hibernate時常默認延遲加載是因為在通常情況下數據庫訪問并且數據傳送代價相當高昂。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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)和其它一些情況的下應用就要在預編譯預處理情況下感受更多的響應。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品极品美女自在线 | 美女一线天 | 亚州日韩精品AV片无码中文 | 俄罗斯毛片免费大全 | 性刺激欧美三级在线现看中文 | 精品区卡一卡2卡三免费 | 国产午夜精品一区二区 | 午夜精品久久久久久久99 | 美女沟厕撒尿全过程高清图片 | 色婷婷久| 国产在线xvideos| 无限在线观看免费入口 | 日本不卡1卡2卡三卡网站二百 | 青青草一区二区免费精品 | 精品国产91久久久久久久 | 秘书在办公室疯狂被hd | 免费观看视频高清在线 | 妹妹骑上来蹭着蹭着就射了 | 日本aaaaa高清免费看 | 亚洲成色WWW久久网站夜月 | 色综合中文字幕在线亚洲 | 蹭蹭妈妈的朋友小说 | 丝瓜茄子绿巨人秋葵榴莲污 | 2020年国产精品午夜福利在线观看 | 12一14性xxxxx国外 | 日本黄视频在线播放 | 国产成人刺激视频在线观看 | chinese军人@gay| 国产剧情在线播放 | 顶级欧美做受xxx000 | 九九免费精品视频 | 成人资源影音先锋久久资源网 | 91桃花视频 | 秋霞一级成人欧美理论 | 激情乱文 | 污小说免费| 精品国产成人a区在线观看 精品国产91久久久久久久 | 四虎精品成人a在线观看 | 免费稚嫩福利 | 国产成人精品实拍在线 | 国产欧美一区二区三区免费看 |