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

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

破除Java神話之一

2019-11-18 15:46:37
字體:
供稿:網(wǎng)友

  對于java程序員而言,垃圾收集功能是一個非常大的幫助,同時也是使用java語言的一個非常大的優(yōu)勢。 然而,實際情況應(yīng)該是不能因為垃圾收集可以清除無用的內(nèi)存就不去考慮內(nèi)存問題。這里要指明的是, 假如忽略這個問題,那么就會導(dǎo)致問題。

  首先,在不同的JVM上垃圾收集算法是不同的,因此,假如你想你的程序能夠很好的運(yùn)行在不同的JVM上,那么就不能依靠垃圾收集的特定行為。垃圾收集是一個非常活躍的研究問題,更好、更快并且更精確的收集器總在實現(xiàn)中。

  然而很多現(xiàn)代的垃圾收集器都有著同樣的問題。其中一個是當(dāng)他們運(yùn)行時并非總是釋放所有那些可以被收集的對象。

  分析表明java編程中大多對象的生存期是短暫的,因此,對于需要提高性能的收集器而言,他們會減少檢查那些具有較長生命的對象的頻度,這個是依據(jù)大多對象具有較短的生存期,而那些生存期較長的對象往往會被繼續(xù)引用,因此,沒有必要在每次檢查時都去檢查這樣的對象是否可以被回收。

  要釋放特定的對象的內(nèi)存可能需要多次調(diào)用垃圾收集。你可以通過調(diào)用System.gc方法建議(注重是建議)垃圾收集器運(yùn)行。請求這個方法的結(jié)果通常導(dǎo)致垃圾收集器進(jìn)行一次完整的收集。通常這個比VM調(diào)用垃圾收集要更徹底和完全,也會盡可能快的完成。假如程序員顯式的調(diào)用System.gc,那么推論是有更多的時間做更多的工作(請注重是有更多的事情做更多的事情,這意味著將進(jìn)行大量的檢查,還記得剛才的有關(guān)對長短生命期對象的檢查的頻度的變化嗎?而不是真正徹底的清除)。在任何一種情況下(顯式調(diào)用垃圾收集和VM調(diào)用垃圾收集)都不要假設(shè)所有可以被收集的對象會真正的被收集。

  顯式的調(diào)用System.gc有更大的機(jī)會完成徹底的收集,但不是保證會完成。

  另一個程序員會碰到的麻煩是他們往往保持對那些不再需要的對象的引用。這將阻止垃圾收集器釋放該對象。

  這種情況在你自己治理列表的時候會發(fā)生。

  考慮下面的ObjStack類。這個類使用push和pop方法治理堆棧中的對象。兩個方法都利用索引,該索引指明堆棧中下一個可用的位置。push方法存儲對新對象的引用并增加索引值,而pop方法減小索引值并返回堆棧最上面的元素。

  實例一:沒有正確實現(xiàn)pop方法的ObjStack

class ObjStack
{
 PRivate Object[] stack;
 private int index;
 public void push(Object o)
 {
  stack[index] = o;
  index++;
 }
 public Object pop()
 {
  index-;
  return stack[index];
 }
 //...
}
  現(xiàn)在創(chuàng)建一個容量為10的對象,然后調(diào)用8次push方法向它添加對象,那么此時索引值為8。

  現(xiàn)在考慮三次調(diào)用pop方法后發(fā)生什么?此時的索引值為5,但是請注重,除了這個索引值發(fā)生變化外堆棧其實沒有其它任何變化!

  雖然pop方法減小了索引值,但是實際上堆棧仍然保持著對那些對象的引用。調(diào)用pop方法往往意味著那些對象應(yīng)該被收集(大多情況是如此的,即使不是馬上,也是在稍后使用完該對象后)。然而由于堆棧仍然保留有對該對象的引用,它就不能被收集。這些對象只能在調(diào)用push后被替換才可能被收集。正確的pop的實現(xiàn)如下:

public Object pop()
{
 index-;
 Object o = stack[index];
 stack[index] = null;
 return o;
}
  在這個版本的pop方法中,當(dāng)引用被返回后,堆棧刪除對他們的引用因此垃圾收集器在以后可以回收他們。

  在你自己的編碼中,對于那些不需要的對象,不要在引用它們!程序的執(zhí)行極大收到可用內(nèi)存的影響,可用內(nèi)存越少,那么垃圾收集的執(zhí)行次數(shù)越多,這將極大的傷害性能。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丰城市| 闽侯县| 封丘县| 镶黄旗| 浦东新区| 都兰县| 延安市| 榆中县| 齐齐哈尔市| 吐鲁番市| 鞍山市| 平潭县| 柳江县| 焦作市| 三门县| 陈巴尔虎旗| 麻栗坡县| 富裕县| 遵义县| 天水市| 谢通门县| 称多县| 湟中县| 从化市| 天长市| 六安市| 无极县| 岳阳市| 庄浪县| 图木舒克市| 修武县| 青阳县| 泽普县| 佳木斯市| 昭通市| 天峻县| 荆门市| 兰考县| 宝应县| 稻城县| 中宁县|