激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
708
主站蜘蛛池模板: 亚洲婷婷日日综合婷婷噜噜噜 | 欧美日韩大片在线观看 | 色999久久久精品人人澡69 | 电影av在线 | 欧美毛片免费观看 | 一级黄色影院 | 小情侣嗯啊哦视频www | 久久国产免费 | 斗罗破苍穹在线观看免费完整观看 | 亚洲第一页中文字幕 | 久久亚洲精品视频 | 天天透天天狠天天爱综合97 | 18欧美性xxxx极品hd | 国产成人精品区 | 欧美精品成人一区二区三区四区 | 亚洲特黄a级毛片在线播放 久久久入口 | 日韩视频一区二区三区在线观看 | 天天干导航 | 欧美精品成人一区二区在线观看 | 中文字幕一区久久 | 麻豆视频在线观看 | 成人在线观看免费高清 | 91网站在线观看视频 | 亚洲精品午夜在线 | 成人免费网站在线观看视频 | 99国产精品欲a | 国产精品久久久久久婷婷天堂 | 久久99国产精品视频 | 999插插插 | 91九色网址| 久久久久久久久久亚洲精品 | 免费a级片在线观看 | 国产精品爱久久久久久久 | 免费久久精品 | 叉逼视频| 亚洲一区二区三区高清 | 女教师~淫辱の动漫在线 | 欧美一极视频 | 国产深夜福利视频在线播放 | 久久综合一区二区 | 日日鲁夜夜视频热线播放 |