<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 12,comments - 1,trackbacks - 0
    眾所周知,java和c++不一樣,在java中,對象只能用new操作符在heap中分配,不可以象c++一樣在棧上分配。

    一般來說,在堆上分配的效率要低于棧,。例如堆是全局的,在多線程程序中要使用鎖來進行同步,不巧的是,絕大部分的java程序都是多線程的。另一方面,隨著對象的生成和銷毀,堆上會產生碎片,需要一個或多個freelist來維護,這樣也造成額外的開銷,以及空間利用的低效。

    但這是一般c程序員理解的heap管理機制,也因此有c程序員指責java的內存管理效率低下。其實在jvm的實現中,它會用自己的方式來管理堆,增強java的效率。以Hotspot為例,每個線程都會擁有一段自己的空間稱為TLAB(Thread Local Alloc Buffer),這塊空間因為屬于線程獨有,所以在其中分配對象不需要加鎖,其實和棧一樣,分配對象只要將一個指針增加sizeof(object)即可。如果對象太大超出了tlab的剩余空間,此時有多種選擇,
        在heap的share空間中分配,
        重新分配一塊tlab
        在old generation中分配
        觸發gc,釋放已有空間。
    具體選擇何種方式由內存的利用情況和jvm的內存管理策略決定。由多個參數可以進行調整。所以在絕大部分情況下(〉90%),jvm中對象的分配和棧一樣高效。

    關于對象的釋放,就是java中著名的gc來負責了,關于gc的介紹多如牛毛,而且其中的方式和策略層出不窮,這片文章就不介紹了。

    從上面的介紹可以看出,這種方式可以加速對象的分配,但對釋放不能作到象stack那樣高效,其實有很多對象只是生存期很短的臨時對象,如何識別這些對象并在tlab中更有效的釋放應該是jvm可以進一步優化的方向。據我所知,jdk6的jvm已經使用了相關的技術。

    posted on 2007-10-01 23:10 白色天堂 閱讀(488) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 18国产精品白浆在线观看免费| 人妻无码中文字幕免费视频蜜桃| 91免费国产视频| 最新国产AV无码专区亚洲| 一级做a免费视频观看网站| 亚洲性久久久影院| 产传媒61国产免费| 国产成人亚洲精品狼色在线 | 亚洲国产美女福利直播秀一区二区 | 亚洲欧洲中文日韩久久AV乱码| 亚洲成AV人影片在线观看| 国产成人在线观看免费网站 | 思思久久99热免费精品6| MM131亚洲国产美女久久| 中国性猛交xxxxx免费看| 亚洲AV无码乱码国产麻豆穿越| 国产成人一区二区三区视频免费| 亚洲天堂中文字幕| 国产免费久久精品99re丫y| 亚洲成a人无码亚洲成www牛牛| 免费日本黄色网址| 色www永久免费网站| 亚洲男人天堂影院| 国产精品99久久免费| 国产午夜无码片免费| 噜噜噜亚洲色成人网站∨ | 国产亚洲福利一区二区免费看| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 中国一级全黄的免费观看| 日产亚洲一区二区三区| 成人免费午间影院在线观看| 免费一级毛片在线播放视频免费观看永久| 国产亚洲情侣一区二区无码AV| 99在线热视频只有精品免费| 亚洲日本在线电影| 亚洲毛片av日韩av无码| 久9久9精品免费观看| 亚洲av日韩综合一区久热| 亚洲精品国偷自产在线| 亚洲人成网站免费播放| 丁香花在线观看免费观看图片|