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

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

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)和其它一些情況的下應用就要在預編譯預處理情況下感受更多的響應。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 护士柔佳| 91麻豆精品国产自产在线观看 | 免费特黄一级欧美大片 | 亚洲国产精品综合久久一线 | 国产成人精品免费午夜 | 1024免费福利永久观看网站 | 亚洲高清在线视频 | 久久精品国产欧美日韩99热 | 亚洲国产精品无码中文字幕 | 国产自产在线 | 久操久操久操 | 草莓社区 | 色噜噜狠狠色综合 | 免费在线看 | 肉宠文很肉到处做1v1 | 欧美成人免费草草影院视频 | 91aaa免费免费国产在线观看 | 娇妻与公陈峰姚瑶最新版 | 欧美高清无砖专区欧美精品 | 能播放的欧美同性videos | 视频在线观看入口一二三2021 | 国产成人黄网在线免 | 亚洲 色 欧美 爱 视频 日韩 | 国产精品视频在这里有精品 | 九九九国产在线 | 爸爸的宝贝小说全文在线阅读 | 互换娇妻爽文100系列小说 | 欧美成人免费草草影院视频 | 99精彩免费观看 | 日本手机在线视频 | 大胸孕妇孕交pregnantsex 大象视频污 | jk制服蕾丝超短裙流白浆 | 国产主播99| 青青在线| 美女和男生搞基 | crdy在线看亚洲 | 国产高清在线精品一区二区 | 免费国产在线视频 | 末代皇帝无删减版在线观看 | 免费观看a毛片一区二区不卡 | kkkk4444在线看片|