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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Reference 不為人知的一面

2019-11-18 13:26:06
字體:
供稿:網(wǎng)友

  java 不支持 pointer,只提供 reference,初學(xué)者經(jīng)常因此頗為困惑,非凡是修過數(shù)據(jù)
  結(jié)構(gòu)的信息系學(xué)生,他們心中第一個想到的是:「沒 pointer,這怎么成,那不就做不
  出 linked list 和 tree 的數(shù)據(jù)結(jié)構(gòu)?」殊不知 reference 就是一種智能型的 point
  er,它具有 pointer 的好處,而且不用像 pointer 一樣要程序員自行 reference (*)
  以及 dereference (&),更不會像 pointer 一樣會誤闖內(nèi)存禁區(qū)造成 crash。因為好
  處多多,所以 reference 已經(jīng)是現(xiàn)代化程序語言的重要必備功能了。什么!你說 xx 高
  級語言沒支持 reference,那你可以把它埋葬在二十世紀的歷史灰燼中。
  Java 對于資料的處理方式是:只要是基本型態(tài)(包括 boolean, byte, short, int, l
  ong, float, double, char)一律使用 pass by value,其它型態(tài)一律 pass by refer
  ence。但是我發(fā)現(xiàn)這在未來有可能變動,因為 Java language 將 byvalue 訂為 reser
  ved Word(非 keyword)。當(dāng) Java 將 byvalue 變成 keyword 之時,非基本型態(tài)的值
  就可以 pass by value 了,但我相信,此時 Java 也必須開始支持 copy constrUCtor
  作為配套措施,究竟使用 deep copy 或 shallow copy(甚至 deep 和 shallow 兼而
  有之的 copy)還是要讓 PRogrammer 決定。
  前面提到:只要是基本型態(tài)(包括 boolean、byte、short、int、long、float、doubl
  e、char)一律使用 pass by value,其它型態(tài)一律 pass by reference。到底什么是
  pass by value?什么又是 pass by reference 呢?打個比方,pass by value 就是資
  料的「分身」傳遞過去,pass by reference 就是資料的「本尊」傳遞過去。(注:自
  從 發(fā)生那件新聞,有了「本尊」和「分身」的名詞之后,我發(fā)現(xiàn)要向?qū)W生解釋 refere
  nce 的觀念也就輕易多了)。因為對象一律是 pass by reference,所以一個對象經(jīng)常
  同時被多個 variable 所指到。
  Java 提供自動內(nèi)存治理的機制,也就是俗稱的 garbage collection(垃圾收集)。當(dāng)
  一個對象不再被任何 variable 所指到,就代表此對象從此不可能再被利用,Java 虛擬
  機器內(nèi)一個負責(zé)收集垃圾的 thread 就會在適當(dāng)?shù)臅r機出來將此塊內(nèi)存回收。
  記得在 Java 之父 James Gosling 應(yīng)邀到臺灣時(1997年12月),我曾經(jīng)問他:Java
  的這種自動內(nèi)存治理方式造成某些程序(例如 debugger)的困擾,Java 有沒有打算支
  持 weak reference。 James Gosling回答:未來的版本將會支持 weak reference,果
  然在后來的 JDK 1.2 就提供此支持了。JDK 1.2 除了 weak reference(也就是 java.
  lang.ref.WeakReference)之外,還多了一個強化的 weak reference(也就是 java.l
  ang.ref.SoftReference)以及一個弱化的 weak reference(也就是 java.lang.ref.P
  hantomReference),這個設(shè)計考慮得相當(dāng)仔細。
  這些 reference 依照「強度」排列如下:
  Direct Reference > Soft Reference > Weak Reference > Phantom Reference
  其中,direct reference 就是一般的 reference。只要被任何 direct reference 所
  reference 到的對象就不會被 garbage collector 清除。其它的三種 reference(包括
  soft reference,weak reference,phantom reference)則不然,他們不會影響 gar
  bage collection。
  假如你對這些非凡的 reference 感愛好,不妨去看看 java.lang.ref 的 Javadoc,順
  便寫幾個程序試試看。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 从化市| 上高县| 秦皇岛市| 格尔木市| 莒南县| 安塞县| 庐江县| 清涧县| 手机| 北川| 双鸭山市| 隆回县| 南部县| 儋州市| 沈丘县| 济宁市| 天台县| 靖州| 文水县| 禄丰县| 林州市| 平遥县| 大埔县| 高碑店市| 吴忠市| 桦川县| 定结县| 营口市| 广昌县| 阳新县| 台前县| 池州市| 辽源市| 建宁县| 高密市| 革吉县| 庆安县| 揭西县| 若羌县| 阿图什市| 辉县市|