精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spark刷爆磁盤與Java弱引用的關系

存儲 存儲設備 Spark
今天,給大家分享下。Java的引用在大數據框架下的引用案例。

 [[351561]]

 

一 引用基本概念

 

如下面,定義兩個變量num,str,存儲模型大致如下圖:

  1. int num = 6; 
  2. String str = “浪尖聊大數據”; 

 

變量num值直接從6修改為了8;變量str只是修改了其保存的地址,從0x88修改為0x86,對象 “浪尖聊大數據 ”本身還在內存中,并沒有被修改。只是內存中新增了對象 “浪尖是帥哥”。

二 值傳遞&引用傳遞

 

舉例說明引用傳遞和值傳遞:

  1. 第一個栗子:基本類型 
  2. void foo(int value) { 
  3.     value = 88; 
  4. foo(num); // num 沒有被改變 
  5.  
  6. 第二個栗子:沒有提供改變自身方法的引用類型 
  7. void foo(String text) { 
  8.     text = "mac"
  9. foo(str); // str 也沒有被改變 
  10.  
  11. 第三個栗子:提供了改變自身方法的引用類型 
  12. StringBuilder sb = new StringBuilder("vivo"); 
  13. void foo(StringBuilder builder) { 
  14.     builder.append("5"); 
  15. foo(sb); // sb 被改變了,變成了"vivo5"。 
  16.  
  17. 第四個栗子:提供了改變自身方法的引用類型,但是不使用,而是使用賦值運算符。 
  18. StringBuilder sb = new StringBuilder("oppo"); 
  19. void foo(StringBuilder builder) { 
  20.     builder = new StringBuilder("vivo"); 
  21. foo(sb); // sb 沒有被改變,還是 "oppo"。 

三 引用的類型

  1. 單純的申明一個軟引用,指向一個person對象 
  2. 1 SoftReference pSoftReference=new SoftReference(new Person(“張三”,12)); 
  3.  
  4. 聲明一個引用隊列 
  5. ReferenceQueue<Person> queue = new ReferenceQueue<>(); 
  6.  
  7. 聲明一個person對象,李四,obj是其強引用 
  8. Person obj = new Person(“李四”,13); 
  9.  
  10. 使軟引用softRef指向李四對應的對象,并且將該軟引用關聯到引用隊列 
  11. 2 SoftReference softRef = new SoftReference<Object>(obj,queue); 
  12.  
  13. 聲明一個person對象,名叫王酒,并保證其僅含軟引用,且將軟引用關聯到引用隊列queue 
  14. 3 SoftReference softRef = new SoftReference<Object>(new Person(“王酒”,15),queue); 
  15.  
  16. 使用很簡單softRef.get即可獲取對應的value。 

  1. WeakReference<Person> weakReference = new WeakReference<>(new Person(“浪尖”,18)); 
  2.  
  3. 聲明一個引用隊列 
  4. ReferenceQueue<Person> queue = new ReferenceQueue<>(); 
  5.  
  6. 聲明一個person對象,李四,obj是其強引用 
  7. Person obj = new Person(“李四”,13); 
  8.  
  9. 聲明一個弱引用,指向強引用obj所指向的對象,同時該引用綁定到引用隊列queue。 
  10. WeakReference weakRef = new WeakReference<Object>(obj,queue); 
  11.  
  12. 使用弱引用也很簡單,weakRef.get 

  1. 聲明引用隊列 
  2. ReferenceQueue queue = new ReferenceQueue(); 
  3.  
  4. 聲明一個虛引用 
  5. PhantomReference<Person> reference = new PhantomReference<Person>(new Person(“浪尖”,18), queue); 
  6.  
  7. 獲取虛引用的值,直接為null,因為無法通過虛引用獲取引用對象。 
  8. System.out.println(reference.get()); 

 

 

 


 

 

四 Threadlocal如何使用弱引用


 

 

五 spark如何使用弱引用進行數據清理

 

 


 

 

shuffle相關的引用,實際上是在ShuffleDependency內部實現了,shuffle狀態注冊到ContextCleaner過程:

  1. _rdd.sparkContext.cleaner.foreach(_.registerShuffleForCleanup(this)) 

然后,我們翻開registerShuffleForCleanup函數源碼可以看到,注釋的大致意思是注冊ShuffleDependency目的是在垃圾回收的時候清除掉它對應的數據:

  1. /** Register a ShuffleDependency for cleanup when it is garbage collected. */ 
  2.   def registerShuffleForCleanup(shuffleDependency: ShuffleDependency[_, _, _]): Unit = { 
  3.     registerForCleanup(shuffleDependency, CleanShuffle(shuffleDependency.shuffleId)) 
  4.   } 

其中,registerForCleanup函數如下:

  1. /** Register an object for cleanup. */ 
  2.   private def registerForCleanup(objectForCleanup: AnyRef, task: CleanupTask): Unit = { 
  3.     referenceBuffer.add(new CleanupTaskWeakReference(task, objectForCleanup, referenceQueue)) 
  4.   } 

referenceBuffer主要作用保存CleanupTaskWeakReference弱引用,確保在引用隊列沒處理前,弱引用不會被垃圾回收。

  1. /** 
  2.    * A buffer to ensure that `CleanupTaskWeakReference`s are not garbage collected as long as they 
  3.    * have not been handled by the reference queue. 
  4.    */ 
  5.   private val referenceBuffer = 
  6.     Collections.newSetFromMap[CleanupTaskWeakReference](new ConcurrentHashMap) 

ContextCleaner內部有一個線程,循環從引用隊列里取被垃圾回收的RDD等相關弱引用,然后完成對應的數據清除工作。

  1. private val cleaningThread = new Thread() { override def run(): Unit = keepCleaning() } 

其中,keepCleaning函數,如下:

  1. /** Keep cleaning RDD, shuffle, and broadcast state. */ 
  2.   private def keepCleaning(): Unit = Utils.tryOrStopSparkContext(sc) { 
  3.     while (!stopped) { 
  4.       try { 
  5.         val reference = Option(referenceQueue.remove(ContextCleaner.REF_QUEUE_POLL_TIMEOUT)) 
  6.           .map(_.asInstanceOf[CleanupTaskWeakReference]) 
  7.         // Synchronize here to avoid being interrupted on stop() 
  8.         synchronized { 
  9.           reference.foreach { ref => 
  10.             logDebug("Got cleaning task " + ref.task) 
  11.             referenceBuffer.remove(ref) 
  12.             ref.task match { 
  13.               case CleanRDD(rddId) => 
  14.                 doCleanupRDD(rddId, blocking = blockOnCleanupTasks) 
  15.               case CleanShuffle(shuffleId) => 
  16.                 doCleanupShuffle(shuffleId, blocking = blockOnShuffleCleanupTasks) 
  17.               case CleanBroadcast(broadcastId) => 
  18.                 doCleanupBroadcast(broadcastId, blocking = blockOnCleanupTasks) 
  19.               case CleanAccum(accId) => 
  20.                 doCleanupAccum(accId, blocking = blockOnCleanupTasks) 
  21.               case CleanCheckpoint(rddId) => 
  22.                 doCleanCheckpoint(rddId) 
  23.             } 
  24.           } 
  25.         } 
  26.       } catch { 
  27.         case ie: InterruptedException if stopped => // ignore 
  28.         case e: Exception => logError("Error in cleaning thread", e) 
  29.       } 
  30.     } 
  31.   } 

shuffle數據清除的函數是doCleanupShuffle,具體內容如下:

  1. /** Perform shuffle cleanup. */ 
  2.   def doCleanupShuffle(shuffleId: Int, blocking: Boolean): Unit = { 
  3.     try { 
  4.       logDebug("Cleaning shuffle " + shuffleId) 
  5.       mapOutputTrackerMaster.unregisterShuffle(shuffleId) 
  6.       shuffleDriverComponents.removeShuffle(shuffleId, blocking) 
  7.       listeners.asScala.foreach(_.shuffleCleaned(shuffleId)) 
  8.       logDebug("Cleaned shuffle " + shuffleId) 
  9.     } catch { 
  10.       case e: Exception => logError("Error cleaning shuffle " + shuffleId, e) 
  11.     } 
  12.   } 

細節就不細展開了。

 

ContextCleaner的start函數被調用后,實際上啟動了一個調度線程,每隔30min主動調用了一次System.gc(),來觸發垃圾回收。

  1. /** Start the cleaner. */ 
  2.   def start(): Unit = { 
  3.     cleaningThread.setDaemon(true
  4.     cleaningThread.setName("Spark Context Cleaner"
  5.     cleaningThread.start() 
  6.     periodicGCService.scheduleAtFixedRate(() => System.gc(), 
  7.       periodicGCInterval, periodicGCInterval, TimeUnit.SECONDS) 
  8.   } 

具體參數是:

  1. spark.cleaner.periodicGC.interval 

本文轉載自微信公眾號「浪尖聊大數據」,可以通過以下二維碼關注。轉載本文請聯系浪尖聊大數據公眾號。

 

 

責任編輯:武曉燕 來源: 浪尖聊大數據
相關推薦

2013-08-19 17:14:04

.Net強引用弱引用

2020-12-02 09:01:40

Java基礎

2015-11-02 17:20:00

Java弱引用

2009-06-16 11:26:22

弱引用內存泄露

2020-11-12 07:49:18

MySQL

2021-01-07 14:20:55

JavaGC

2024-05-20 08:58:13

Java引用類型垃圾回收器

2021-12-09 15:45:09

Python弱引用代碼

2017-10-13 10:36:33

SparkSpark-Strea關系

2009-06-19 16:19:23

Java對象引用

2021-10-08 21:00:52

數據弱引用對象

2013-06-09 13:24:00

程序員Bug

2022-01-02 06:55:08

Node.js ObjectWrapAddon

2021-11-25 07:42:11

命令Linux系統

2017-12-15 16:03:27

2013-09-16 16:48:50

Android優化軟引用

2021-02-21 00:22:32

技術團隊工具

2020-12-28 11:13:24

比特幣數據匿名幣

2021-10-18 15:50:49

Android強引用軟引用

2018-11-16 16:10:28

JavaOOM編程語言
點贊
收藏

51CTO技術棧公眾號

亚洲午夜久久久久久久久红桃| 亚洲国产精品影视| 亚洲国产无线乱码在线观看| 久久裸体网站| 精品国产一区久久| 欧美成人黑人猛交| 最新国产露脸在线观看| 99久久久久久| 国产专区欧美专区| 国内自拍视频在线播放| 亚洲国产老妈| 亚洲跨种族黑人xxx| √天堂资源在线| 欧美电影免费观看| 一区二区免费看| 日韩欧美一区二区三区四区 | 狠色狠色综合久久| 国产午夜精品全部视频在线播放| 人妻换人妻仑乱| 久久久人成影片一区二区三区在哪下载| 亚洲欧美色一区| 日日夜夜精品网站| 天天射天天操天天干| 激情五月婷婷综合网| 日韩免费观看av| 日韩美女一级片| 欧美~级网站不卡| 色妞欧美日韩在线| 久操视频在线观看免费| 日韩av系列| 精品国偷自产国产一区| 久久人人爽人人片| 91丨精品丨国产| 欧美日韩亚洲高清一区二区| 日韩av三级在线| 91制片在线观看| 一区二区三区精品在线观看| 亚洲AV无码成人精品一区| av午夜在线| 国产欧美综合在线| 欧美激情一区二区三区在线视频| 天天干天天草天天射| 高清不卡在线观看av| 91免费在线视频网站| 中文字幕无线码一区| 日韩av一区二区在线影视| 97成人精品区在线播放| 国产手机在线视频| 亚洲精品人人| 2019中文字幕在线观看| 国产农村妇女aaaaa视频| 一区二区三区国产盗摄| 欧美一级电影免费在线观看| 午夜精品三级久久久有码| 一区在线播放| 81精品国产乱码久久久久久| 91porny在线| 麻豆久久婷婷| 国产福利视频一区二区| 亚洲图片欧美日韩| 久久国产三级精品| 成人激情黄色网| www.色呦呦| 成人精品国产一区二区4080| 极品日韩久久| 狠狠v欧美ⅴ日韩v亚洲v大胸| 久久精品在线免费观看| 亚洲狠狠婷婷综合久久久| 国产在线激情| 亚洲成人自拍网| 凹凸国产熟女精品视频| abab456成人免费网址| 欧美日韩国产综合视频在线观看| 人人爽人人爽av| 国产精品色呦| 一本色道久久综合狠狠躁篇的优点 | 成人国产一区| 日韩一区二区三区四区五区六区| 俄罗斯黄色录像| 精品在线99| 综合网中文字幕| 青娱乐国产在线| 99视频在线精品国自产拍免费观看| 欧美一区二区三区图| 波多野结衣不卡| 国产精品资源在线观看| 久久99欧美| 色老头视频在线观看| 亚洲午夜免费电影| 九九热免费精品视频| 日本一区二区三区电影免费观看| 日韩精品免费综合视频在线播放| 日本午夜精品视频| 亚洲性感美女99在线| 国产97免费视| 不卡的日韩av| 国产欧美久久久精品影院| 欧美日韩中文字幕在线播放 | 日产日韩在线亚洲欧美| 国产熟女一区二区丰满| 久久久一区二区三区| 一区中文字幕在线观看| 天堂√中文最新版在线| 6080亚洲精品一区二区| 日韩中文字幕电影| 国产精品v亚洲精品v日韩精品| 国产脚交av在线一区二区| 亚洲高清视频在线播放| 中文字幕在线一区免费| 国产午夜伦鲁鲁| 亚洲电影一区| 日韩有码在线观看| 福利网址在线观看| 成人综合婷婷国产精品久久蜜臀 | 波多野结衣一本| 伊人久久大香线蕉精品组织观看| 91精品国产777在线观看| 99精品人妻无码专区在线视频区| 久久久精品人体av艺术| 日日摸日日碰夜夜爽无码| 9999在线精品视频| 最新国产精品亚洲| 老熟妇一区二区三区| av电影一区二区| 国产va亚洲va在线va| 日韩欧美久久| 操日韩av在线电影| 91av国产精品| 国产精品久久久久久妇女6080| 国产淫片免费看| 第一区第二区在线| 欧美国产高跟鞋裸体秀xxxhd| 亚洲最大成人av| 国产亚洲1区2区3区| 日本一区二区黄色| 日本欧美韩国国产| 51ⅴ精品国产91久久久久久| 黑人乱码一区二区三区av| 怡红院av一区二区三区| 99999精品| 午夜久久tv| 99国产超薄肉色丝袜交足的后果| 九色porny在线| 777奇米成人网| 欧美日韩色视频| 国产一区中文字幕| 好吊色这里只有精品| 精品国产一区二区三区2021| 国产精品一区二区果冻传媒| 欧美性videosxxxxx| 无码h肉动漫在线观看| 亚洲一区区二区| 免费一区二区三区在在线视频| 日本在线啊啊| 亚洲性生活视频| 在线视频精品免费| 国产精品不卡在线| 亚洲第一天堂久久| 亚洲区综合中文字幕日日| 91九色国产视频| 在线观看av免费| 日韩欧美国产精品一区| 日本特黄特色aaa大片免费| 成人午夜私人影院| 久久久久久久中文| 激情五月综合网| 国产免费一区二区三区在线观看| 欧美极品视频| 欧美mv日韩mv| 欧美h在线观看| 欧美韩国一区二区| 制服丝袜中文字幕第一页| 你懂的国产精品| 国产精品一区二区免费| 蜜臀国产一区| 色狠狠av一区二区三区香蕉蜜桃| 国产精品一级视频| 亚洲成av人片一区二区梦乃| 国产aⅴ激情无码久久久无码| 看电视剧不卡顿的网站| 99久久99久久精品| 亚洲精品国产动漫| 91精品久久久久久久久久久| 黄色在线观看视频网站| 亚洲视频视频在线| www.av导航| 在线这里只有精品| 久草视频在线资源站| 久久网站最新地址| 992kp免费看片| 裸体素人女欧美日韩| 免费成人深夜夜行网站视频| 日韩理论电影中文字幕| 国产日韩欧美中文| 三级在线看中文字幕完整版| x99av成人免费| 四虎电影院在线观看| 欧美福利视频一区| 国产精品久免费的黄网站| 亚洲欧洲一区二区三区| 成人免费av片| 国产乱码精品1区2区3区| 十八禁视频网站在线观看| 综合天堂av久久久久久久| 欧美精品欧美精品| 欧美在线在线| 欧美性猛交xxxx乱大交蜜桃| 久久精品久久精品国产大片| 原纱央莉成人av片| 美女久久久久久久久久久| 黄色影院在线播放| 精品日韩99亚洲| 亚洲一区二区三区高清视频| 精品久久久久久中文字幕一区奶水 | 亚洲精品tv| 日本成人精品在线| av电影在线免费| 欧美成人在线网站| 米奇精品一区二区三区| 国产亚洲一区二区精品| 天天在线女人的天堂视频| 日韩午夜中文字幕| 91肉色超薄丝袜脚交一区二区| 欧美天堂在线观看| 中日韩精品视频在线观看| 亚洲另类春色国产| 一级性生活免费视频| 国产欧美精品区一区二区三区| 国产美女视频免费观看下载软件| 国产精品一区二区果冻传媒| 日韩欧美亚洲另类| 久久91精品国产91久久小草| 欧美两根一起进3p做受视频| 香蕉久久夜色精品| 国产91在线视频观看| 一区二区毛片| 久久免费视频3| 国产精品久久久久久模特| 久久这里只有精品23| 韩国在线一区| 亚洲欧洲美洲综合色网| 在线观看国产免费视频| 不卡一卡二卡三乱码免费网站| 不卡的一区二区| 国产精品一区二区三区99| 男女视频在线观看网站| 狠狠久久亚洲欧美| 992kp免费看片| 国产精品一区二区在线观看网站| 香蕉视频xxxx| 国产成人免费视频| 折磨小男生性器羞耻的故事| 暴力调教一区二区三区| 亚洲久久久久久| 91天堂素人约啪| 老牛影视av老牛影视av| 国产精品天干天干在线综合| 久久精品国产亚洲AV成人婷婷| 一区在线观看免费| 久久人人爽人人爽人人| 婷婷中文字幕综合| 国产精品人人人人| 在线观看亚洲成人| 91午夜交换视频| 日韩一区二区三区在线视频| 日本高清视频在线| 亚洲人成伊人成综合网久久久| 成人影院免费观看| 久热精品视频在线观看一区| 日韩成人伦理| 欧美一区亚洲一区| 久久人人视频| 高清视频在线观看一区| 天堂俺去俺来也www久久婷婷| 日本高清不卡三区| 五月婷婷六月综合| 成人免费播放器| 久久男女视频| 亚洲一区二区三区四区精品| 成人一区二区三区| 日韩福利在线视频| 一二三四社区欧美黄| 天干夜夜爽爽日日日日| 欧美日韩国产综合一区二区| 国产77777| 丝袜一区二区三区| av3级在线| 国产一区二区色| 久久中文资源| 在线综合视频网站| 夜夜嗨一区二区| 在线观看免费不卡av| 成人福利视频网站| 青青操在线播放| 亚洲大片精品永久免费| 丝袜美腿玉足3d专区一区| 成人短视频在线| 91chinesevideo永久地址| 日韩国产91| 精品乱子伦一区二区三区| 日韩系列欧美系列| 高清在线观看免费| 国产一区不卡在线| jizz中文字幕| 亚洲成av人片在线观看| 国产精品探花视频| 国产亚洲精品久久久| 国产亚av手机在线观看| 国产精品啪视频| 五月国产精品| 国产高清av在线播放| 精品一区二区三区久久| 久久丫精品忘忧草西安产品| 午夜精品一区二区三区电影天堂| 国产精品视频一区二区三区,| 国产亚洲精品日韩| а√在线天堂官网| 18成人在线| 999成人精品视频线3| 国产精品第12页| 91在线看国产| 日本三级黄色大片| 欧美mv日韩mv国产网站app| 欧美成人二区| 国产精品一区二区三区久久久| 丝袜av一区| 无码粉嫩虎白一线天在线观看 | 亚洲黄色小说在线观看| 中文字幕人成不卡一区| 中文字幕精品在线观看| 亚洲视频在线视频| 欧美色网一区| 欧美一二三区| 久久精品中文| www.自拍偷拍| 色综合视频一区二区三区高清| 无码精品人妻一区二区三区影院| 欧美黑人性生活视频| 青草伊人久久| 黄色一级大片免费| 国产凹凸在线观看一区二区| 国产极品国产极品| 欧美一区二区三区日韩| 黄黄的网站在线观看| 91久久综合亚洲鲁鲁五月天| 999成人网| 可以看的av网址| 亚洲一区二区三区四区五区黄| 国产高清在线观看视频| 九九久久精品一区| 中文无码日韩欧| 国产av人人夜夜澡人人爽麻豆| av日韩在线网站| 东京热一区二区三区四区| 亚洲人a成www在线影院| 日韩电影av| 一区二区精品国产| 国产一区二区三区免费观看| 久久97人妻无码一区二区三区| 精品久久久三级丝袜| 丝袜诱惑一区二区| 日韩精品久久一区| 蓝色福利精品导航| 国内偷拍精品视频| 亚洲国产欧美一区二区三区同亚洲 | 欧美日本精品| 亚洲图片综合网| 色av一区二区| 欧美激情视频在线播放| 亚洲最大福利网站| 99精品国产在热久久婷婷| 一区二区三区久久久久| 欧美日韩国产a| heyzo在线播放| 日韩动漫在线观看| 国产激情一区二区三区| 国产成人无码精品亚洲| 在线视频免费一区二区| 国产一区二区高清在线| 国产午夜福利在线播放| 国产精品少妇自拍| 亚洲爱爱综合网| 国产va免费精品高清在线| 99欧美视频| 国产成人无码一区二区在线观看| 在线精品视频免费播放| 精品日韩av| 视频三区二区一区| 高清免费成人av| 怡春院在线视频| 国内成人精品视频| 色婷婷综合网| 亚洲成人av免费在线观看| 欧美日韩在线亚洲一区蜜芽| av影片在线| 综合网五月天| 久久久久久久久99精品| 精品人妻伦一二三区久久| 国产成人在线一区二区| 黄色成人在线网址|