国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的

瀏覽:44日期:2022-08-20 17:10:31

眾所周知,Java進(jìn)程在啟動(dòng)的時(shí)候我們可以通過 -Xms 和-Xmx來設(shè)置內(nèi)存的上限和下限。直到我發(fā)現(xiàn)使用top命令監(jiān)控的Java進(jìn)程在-Xms設(shè)置4g的情況下占用的內(nèi)存并不是4g,這就產(chǎn)生了一個(gè)疑問Linux服務(wù)器的內(nèi)存到底是如何進(jìn)行分配的。

于是乎,我查閱了一些知乎,課程以及Linux相關(guān)的書籍。這里分享并記錄的一下相關(guān)的知識。

在Linux上運(yùn)行的進(jìn)程不僅限于Java。都有一個(gè)概念,邏輯內(nèi)存(Logic Memory),而物理機(jī)真是持有的內(nèi)存,我們稱為 物理內(nèi)存(Physic Memory)。

java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的

進(jìn)程在開始運(yùn)行時(shí)并不會直接分配物理內(nèi)存,進(jìn)程只是傻乎乎的以為自己持有了內(nèi)存,也就是邏輯內(nèi)存。當(dāng)程序運(yùn)行需要內(nèi)存分配的時(shí)候,Linux服務(wù)器會以頁的(Page)至小4k的方式分配,并一對一映射物理內(nèi)存和邏輯內(nèi)存的關(guān)系,看到了嗎這里其實(shí)用了代理的思想是得內(nèi)存的分配進(jìn)行了解耦。

這樣做的好處是什么呢? 1進(jìn)程之間相互隔離 2進(jìn)程自己認(rèn)為占有了一段獨(dú)立連續(xù)的內(nèi)存 3可以申請比物理內(nèi)存更大的內(nèi)存空間。

第三點(diǎn)怎么理解呢?其實(shí)Linux在這里設(shè)計(jì)了一種機(jī)制叫Swap 就是在進(jìn)程分配的內(nèi)存空間超過物理內(nèi)存的時(shí)候,如果各個(gè)進(jìn)程運(yùn)行所占的內(nèi)存真的有這么多,超過了物理內(nèi)存就會觸發(fā)Swap,把不持有CPU的部分進(jìn)程的內(nèi)存數(shù)據(jù)和磁盤進(jìn)行io數(shù)據(jù)交換。因?yàn)镃PU一時(shí)間不可能超過所有占有的內(nèi)存,所以這種優(yōu)化就造就了能多申請一些內(nèi)存,大概是原來內(nèi)存的2-3倍,這就很可觀了,畢竟內(nèi)存是非常貴的。

Swap雖然好,也帶來了一些問題。

比如頻繁的Swap,這會導(dǎo)致內(nèi)存操作轉(zhuǎn)化為磁盤的的IO操作,拖慢應(yīng)用進(jìn)程的運(yùn)行速度。所以說Swap在我的理解里屬于可以應(yīng)急不使進(jìn)程崩潰,適當(dāng)使用可以減少成本,過分了不當(dāng)人的使用就會被反噬的機(jī)制。

當(dāng)然如果太不當(dāng)人,進(jìn)程還是會崩潰了,Swap是一個(gè)類似Buffer的機(jī)制,有大小的。超過設(shè)置的上限,Kernel內(nèi)核就會觸發(fā)OOM Killer,殺死一部分進(jìn)程騰空間。

以上就是java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的的詳細(xì)內(nèi)容,更多關(guān)于java 進(jìn)程內(nèi)存分配的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 义马市| 和龙市| 恩平市| 武胜县| 东阿县| 泗水县| 来安县| 南宫市| 广安市| 顺义区| 中山市| 临汾市| 德庆县| 如东县| 夏邑县| 汶上县| 丰台区| 当雄县| 盐津县| 泗水县| 来凤县| 泗阳县| 临洮县| 安新县| 从化市| 邹城市| 永和县| 汉沽区| 玉溪市| 吴堡县| 调兵山市| 淮滨县| 永兴县| 河南省| 汉寿县| 繁峙县| 乃东县| 富蕴县| 垦利县| 大厂| 射阳县|