無處不抽象,從JVM內存管理想到的

最近剛換了個東家,因爲項目擴容需求,須要作分佈式部署和各類性能調優以應對大規模併發,Tou說都沒啥經驗,索性把這個任務就交給我這個閒人作了,讓我給出可行性方案,正好我一直就手癢癢想去搞搞分佈式用到的東東,集羣、熱備、緩存、性能調優、數據庫master/slave我就這樣來了,不信搞不死你,大家不死我也得活O(_)O哈哈~web

先從JVM說說,其餘的待續數據庫

太陽的JVM內存管理模型是誰抽象出來的呢,居然和公司的管理機制一模一樣,不得不讓我感嘆一聲,現實生活如此軟件亦如此,一切皆爲抽象..緩存

一句話歸納JVM管理策略併發

JVM把內存分三代【新生代{又包括eden區、倖存區}、舊生代、持久代】,而後各代就能夠按照不一樣的策略折騰了jvm

爲啥說和公司管理機制像呢,個人分析以下:分佈式

按照公司的管理機制我把21世紀最貴的東西—「人才」在公司的地位分爲三類,新人區、中層區、高管區對比在JVM中的object存在的三個代,對好比下:性能

JVM管理機制學習

公司管理機制spa

新生代設計

JVM新生代分爲eden區和倖存區

Eden直譯過來就是伊甸園,創造生命的地方,一般新建立的一個對象都會放在這裏,生命力強而且走運的就進入了倖存區,若是倖存區裏生命力仍是很強,那通過不停的折磨後就有機會進入舊生代,過上幸福日子,不然就夭折了,到此game over.可是若是這個object佔用內存空間很大,新生代作了垃圾回收(minor gc)以後仍是放不下它,JVM就直接把它放進舊生代,若是舊生代仍是放不下,那就說明系統設計不合理了,致使內存溢出。

新人區

一般一個運做相對成熟的公司招聘來的新人(對應jvm中的object)不會直接放到舉足輕重的部門,須要有個試用的過程,能力不錯滴、聽話的、禁得住蹂躪地好同志能夠混過試用期繼而進入中層區(對應JVM舊生代)過上相對穩定的生活,固然也不乏NB份子(對應JVM建立的大對象),譬如其自身能力突出又有個大名鼎鼎的李剛老子,那確定要走捷徑了,能夠直接進入中層區,若是中層區容不下這小子,那公司確定會有麻煩滴,高管層確定會高度重視,不然會出亂子的。

舊生代

能進入這個區的objcet,基本上都是生命特徵比較明顯的.進了這個區並不意味着能夠一勞永逸了,major GC仍是照樣會蹂躪你的,只是不會像對待新生代那樣的頻繁,可是還會進行優勝劣汰

中層區

新人可以進入中層區,至少說明已通過了試用期成爲了所謂的「老人或正式員工」,可是照樣要遵循公司的管理制度,爲了生活還須要不斷學習保持進步,不然遲早會被淘汰掉,這裏只能說明是相對穩定

持久帶

持久帶存放JVM本身的反射對象,好比類對象和方法對象、jar包相關meta信息,須要JVM啓動時把相關信息都初始化準備好,新生代、舊生代對象能夠使用這裏的資源,可是基本很難混到這裏保持一勞永逸,這個區也會作垃圾回收(FullGC),一般會在舊生代空間不足時促發該操做。

高管區

能進入這個層的人若是公司不倒閉基本能夠穩定了,要麼是公司的BOSS級人物,要麼是BOSS層助手(如財務、行政),BOSS層助手也須要爲新人區和中層區服務,可是這裏的職位一般很穩定,新人區和中層區很難擠到這裏來,這裏的利益劃分一般是在公司成立之初就定好了滴

總結

不說也罷,每一個區都有本身的活法,你們懂的

相關文章
相關標籤/搜索