<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中,對(duì)象只能用new操作符在heap中分配,不可以象c++一樣在棧上分配。

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

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

    關(guān)于對(duì)象的釋放,就是java中著名的gc來負(fù)責(zé)了,關(guān)于gc的介紹多如牛毛,而且其中的方式和策略層出不窮,這片文章就不介紹了。

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

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

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成a人v在线观看| 亚洲AV无码一区二区乱孑伦AS| 成人午夜免费福利| 亚洲国产精品成人久久| 9久热这里只有精品免费| 午夜性色一区二区三区免费不卡视频 | 亚洲国产亚洲片在线观看播放| 亚洲男女一区二区三区| 曰批免费视频播放免费| 亚洲人午夜射精精品日韩| 国产精品亚洲精品日韩动图| 精品无码AV无码免费专区| 亚洲精品国产免费| 免费大片黄在线观看yw| 亚洲乱码无人区卡1卡2卡3| 国产乱弄免费视频| 中国一级毛片免费看视频| 亚洲久本草在线中文字幕| 黄页网站在线观看免费| 成年网站免费视频A在线双飞| 亚洲色偷偷偷鲁综合| 国产精品久久亚洲一区二区| 国产成人免费高清在线观看| 杨幂最新免费特级毛片| 亚洲国产精品乱码一区二区| 免费观看美女用震蛋喷水的视频| 国产国拍精品亚洲AV片| 午夜视频在线免费观看| 亚洲中文字幕一二三四区| 免费不卡视频一卡二卡| 免费的黄色的网站| 久久久无码精品亚洲日韩按摩| 亚洲国产日韩综合久久精品| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 日韩免费观看的一级毛片| 日韩久久无码免费毛片软件| 亚洲国产另类久久久精品黑人 | 在线观看亚洲免费| 亚洲AV无码乱码国产麻豆穿越| 国产亚洲精品免费| 亚洲一区二区成人|