日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文讀懂JVM是什么

冬至配餃子 ? 來源:極術(shù)社區(qū) ? 作者:betterFighter ? 2022-07-28 15:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

由于先前也遇到過一些性能問題,OOM算是其中的一大類了。因此也對jvm產(chǎn)生了一些興趣。自己對jvm略做了些研究。后續(xù)繼續(xù)補充。

從oom引申出去

既然說到oom,首先需要知道oom的原因是什么。為啥會oom嘞?
oom的定義是outofmemory。當內(nèi)存想為對象分配內(nèi)存的時候,發(fā)現(xiàn)內(nèi)存不足以去分配內(nèi)存,或者gc的時候發(fā)現(xiàn)沒有可以被回收的對象或回收后的內(nèi)存也不足以為對象分配內(nèi)存。

因此拋出這個java異常。

oom
可以分為以下四類

1.堆溢出:java堆

2.棧溢出:虛擬機棧和本地方法棧

3.方法區(qū)內(nèi)存溢出:方法區(qū)和內(nèi)存時常量池

4.本機直接內(nèi)存溢出

因此,需要先了解堆,棧,方法區(qū)都是些啥

運行時數(shù)據(jù)區(qū)

先上圖

poYBAGLiO6-AYRh8AABaoIqp-Dk913.png

程序計數(shù)器:當前線程所執(zhí)行的字節(jié)碼的行號指示器。

java虛擬機的多線程是通過輪流切換線程,并為線程分配執(zhí)行時間片去運行來執(zhí)行的。每個線程都有一個自己的程序計數(shù)器。我覺得這個可以這么理解:當一個線程在運行的時候,每執(zhí)行一步程序計數(shù)器都會有個記錄,記錄當前執(zhí)行到哪一步了。如果線程被切換后又切換回來,那么通過程序計數(shù)器就能知道執(zhí)行到哪一步了,然后繼續(xù)向下執(zhí)行。

虛擬機棧:每個線程都會有一個虛擬機棧。虛擬機棧描述的是java方法執(zhí)行的內(nèi)存模型。因為線程執(zhí)行的過程就是執(zhí)行線程里的一個個方法,而每個方法都會創(chuàng)建對應(yīng)自己的棧幀。

棧幀里存的內(nèi)容如下:

局部變量表:存放了各種編譯期可知基本數(shù)據(jù)類型,對象引用(引用指針或句柄)

操作數(shù)棧:大多數(shù)指令都要從這里彈出數(shù)據(jù),執(zhí)行運算,然后把結(jié)果壓回操作數(shù)棧

動態(tài)鏈接

方法出口

64位的long和都double類型數(shù)據(jù)占用2個局部變量空間,其他數(shù)據(jù)類型占用一個,也就是每個局部變量空間為32位。

在這個地方,如果線程請求的深度大于虛擬機允許的深度,會拋出StackOverflowError.因為jvm分配給虛擬機棧的內(nèi)存是有限的,而每個方法都會有對應(yīng)的棧幀壓入到棧中,如果調(diào)用方法過多,那么棧滿了自然也就溢出了。(可能的場景:死循環(huán)代碼,大量遞歸調(diào)用,那排查問題的時候也可以由此有一個思路)??梢酝ㄟ^調(diào)整-Xss去調(diào)整棧大小。

大部分java虛擬機允許動態(tài)擴展,但如果擴展的時候也申請不到足夠內(nèi)存時,就會報OOM了。

本地方法棧:和虛擬機發(fā)揮作用相似。區(qū)別:虛擬機棧為虛擬機執(zhí)行java方法服務(wù),本地方法棧為虛擬機使用的Native方法服務(wù)。Native Method就是一個java調(diào)用非java代碼的接口,Native方法的實現(xiàn)由非java語言實現(xiàn)。讀者不用糾結(jié),略作了解即可。

:堆是所有線程共享的一塊內(nèi)存,作用是存放對象實例。堆可以分為新生代和老年代。新生代里還可細分為Eden,From survivor,To survivor等空間。后面講述GC過程時會說到。

方法區(qū):也是所有線程共享的一塊內(nèi)存,存放被虛擬機加載的類信息,常量,靜態(tài)變量,編譯器編譯后的代碼。也就是常說的永久代。

永久代的大小可以用-XX:MaxPermSize去設(shè)置。

運行時常量池:方法區(qū)的一部分。存放編譯期生成的各種字面量和符號引用。字面量就是指這個量本身。比如字面量2,就是指2.

運行時常量池有一個重要特性就是動態(tài)性。常量不一定只有編譯期才能產(chǎn)生,運行期間也可能將新的常量放入常量池。詳情可見String類的

intern()方法。

直接內(nèi)存:它不是虛擬機運行時數(shù)據(jù)區(qū)的一部分,但也頻繁的被使用。直接內(nèi)存不會受到j(luò)ava堆大小的限制,但是會受到本機總內(nèi)存的限制。

GC過程

GC分為新生代GC(minor gc)和老年代GC(full gc)。新生代GC的頻率遠遠高于老年代。而且

新生代GC的速度會比老年代的GC速度快10倍以上。根源在于新生代和老年代使用的GC算法不同。讀者們可以去仔細思考下(答案文中有,哈哈)。新生代/老年代大小默認為1:2。

新生代GC過程

新生代里可細分為Eden,From survivor,To survivor等空間。當我們需要給對象分配內(nèi)存的時候,首先我們會在Eden區(qū)為對象分配內(nèi)存,當Eden區(qū)內(nèi)存不足時,會發(fā)生minor gc,此時會把仍然存活的對象放到From survivor,并給對象標記存活次數(shù)1;然后當Eden區(qū)再次被用完后,對Eden區(qū)和From survivor區(qū)篩選出存活的對象,放到To survivor區(qū),清空Eden區(qū)和From survivor區(qū),存活次數(shù)加1,之前存活的就是2了。

以此類推,默認是當存活次數(shù)到達15次(可配置)的時候,把這個對象存入老年代中。同時也可以看到,F(xiàn)rom survivor,To survivor區(qū)始終有一個是空置的。所以新生代使用的只有9/10的空間。
然而大家可以思考一下。Eden區(qū)和survivor區(qū)的大小為8:1,那么發(fā)生minor gc后如果存活的對象
的大小比survivor區(qū)還要大。這個時候會怎么處理?

這里需要引入一個叫“內(nèi)存分配擔保機制”的概念。就是當存活的對象連survivor區(qū)都放不下的時候,這部分放不下的對象會直接進入老年代。老年代是擔保人。老年代進行擔保,前提是老年代還有剩余空間。但是每次存活下來的對象大小是不確定的。所以只好取之前每次存儲到老年代的對象大小的平均值。如果大于平均值,那么直接full gc。但是為了避免頻繁full gc,仍然會開啟handlepromotionfailure配置。如下圖

poYBAGLiO9SAQQccAAAYbuaIYlY922.png

老年代GC過程

老年代采用了標記整理,標記清楚的算法。老年代會把仍然存活的對象都整理統(tǒng)一放到一邊。整理完成后就會清楚掉邊界外的對象。這樣就避免了產(chǎn)生大量的內(nèi)存碎片的問題。但是整理算法相較于新生代采用的復(fù)制算法,復(fù)雜程度肯定更高。這也導(dǎo)致了full gc的速度要遠遠慢于minor gc。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3012

    瀏覽量

    116874
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2321

    瀏覽量

    98615
  • 虛擬機
    +關(guān)注

    關(guān)注

    1

    文章

    975

    瀏覽量

    30716
  • 內(nèi)存溢出
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    1432
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    讀懂!什么是LoRa與LoRaWAN技術(shù)?

    LoRa是種低功耗廣域網(wǎng)技術(shù),基于CSS調(diào)制,具備遠距離傳輸、低功耗和抗干擾特性,適用于物聯(lián)網(wǎng)場景。
    的頭像 發(fā)表于 04-24 11:50 ?377次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>!什么是LoRa與LoRaWAN技術(shù)?

    讀懂 MAX504/MAX515:低功耗 10 位串行 DAC 優(yōu)選

    讀懂 MAX504/MAX515:低功耗 10 位串行 DAC 優(yōu)選 、引言 在電子設(shè)計的世界里,數(shù)模轉(zhuǎn)換器(DAC)就像是數(shù)字信號與模擬世界之間的橋梁。今天我們就來深入了解
    的頭像 發(fā)表于 04-16 15:20 ?181次閱讀

    讀懂交流互感器與交直流體互感器:原理、區(qū)別及應(yīng)用(上)

    ,交直流體互感器漸入視野。很多人對兩者困惑,如工作原理、適用場景有何不同,日常如何選擇。本文將通俗拆解兩者核心原理、關(guān)鍵區(qū)別,結(jié)合實際場景,助你讀懂這兩種“核心感知設(shè)
    的頭像 發(fā)表于 04-07 09:58 ?232次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>交流互感器與交直流<b class='flag-5'>一</b>體互感器:原理、區(qū)別及應(yīng)用(上)

    讀懂愛芯元智2025年度報告

    讀懂愛芯元智2025年度報告
    的頭像 發(fā)表于 03-28 11:42 ?370次閱讀
    <b class='flag-5'>一</b>圖<b class='flag-5'>讀懂</b>愛芯元智2025年度報告

    全自動劃片機與半自動劃片機怎么選?讀懂選型關(guān)鍵

    全自動劃片機與半自動劃片機怎么選?讀懂選型關(guān)鍵在半導(dǎo)體封裝、LED制造、光伏電池加工等精密加工領(lǐng)域,劃片機作為實現(xiàn)晶圓、芯片等材料高精度切割的核心設(shè)備,其選型直接決定生產(chǎn)效率、產(chǎn)品良率及綜合
    的頭像 發(fā)表于 03-16 20:54 ?561次閱讀
    全自動劃片機與半自動劃片機怎么選?<b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>選型關(guān)鍵

    讀懂MAX20733集成式降壓開關(guān)穩(wěn)壓器

    讀懂MAX20733集成式降壓開關(guān)穩(wěn)壓器 在當今電子設(shè)備對高性能、高效率電源的迫切需求下,款優(yōu)秀的開關(guān)穩(wěn)壓器至關(guān)重要。今天我們就來深入剖析
    的頭像 發(fā)表于 03-16 10:30 ?273次閱讀

    讀懂TUSS4440:變壓器驅(qū)動超聲波傳感器IC的極致應(yīng)用

    讀懂TUSS4440:變壓器驅(qū)動超聲波傳感器IC的極致應(yīng)用 作為電子工程師的我們,在設(shè)計工業(yè)超聲波應(yīng)用系統(tǒng)時,總是在尋找高性能、功能豐富且易于集成的器件。今天要給大家詳細介紹款來
    的頭像 發(fā)表于 02-11 16:50 ?610次閱讀

    讀懂SDWAN:打破網(wǎng)絡(luò)壁壘,賦能企業(yè)數(shù)字化轉(zhuǎn)型——附云邊云科技實踐解析

    種更高效、靈活、經(jīng)濟的網(wǎng)絡(luò)解決方案。而SDWAN(軟件定義廣域網(wǎng))的出現(xiàn),正是為了解決這些難題,成為企業(yè)數(shù)字化轉(zhuǎn)型的“網(wǎng)絡(luò)基石”。今天,我們就用通俗的語言,讀懂S
    的頭像 發(fā)表于 02-09 14:51 ?793次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>SDWAN:打破網(wǎng)絡(luò)壁壘,賦能企業(yè)數(shù)字化轉(zhuǎn)型——附云邊云科技實踐解析

    讀懂VCSEL芯片為何與眾不同

    VCSEL芯片是如何誕生的?是德科技帶你走進慧芯激光產(chǎn)業(yè)園探究竟!
    的頭像 發(fā)表于 01-09 14:19 ?896次閱讀

    讀懂:CWDM和DWDM的核心差異

    光纖通信里的“兩兄弟”CWDM和DWDM,名字只差個字母,差別可大了去!今天講透核心差異,小易幫你快速分清~
    的頭像 發(fā)表于 09-17 18:19 ?1455次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>:CWDM和DWDM的核心差異

    讀懂 PWM控制背光亮度原理

    關(guān)于PWM控制背光亮度原理的詳細介紹 讀懂PWM調(diào)光:為何你的屏幕亮度可隨心而變? 你是否曾好奇,手機或電腦屏幕的亮度是如何從最暗無級調(diào)整到最亮的?這背后的魔法,主要歸功于項名為
    發(fā)表于 09-03 08:48

    讀懂儲能變流器PCS

    隨著全球能源結(jié)構(gòu)的轉(zhuǎn)型和可再生能源的快速發(fā)展,儲能技術(shù)成為解決能源供需不平衡、提高能源利用效率的關(guān)鍵技術(shù)之。儲能變流器(PCS)作為儲能系統(tǒng)中的核心設(shè)備,負責(zé)實現(xiàn)電能的高效雙向轉(zhuǎn)換,對儲能系統(tǒng)
    的頭像 發(fā)表于 08-14 11:15 ?5196次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>儲能變流器PCS

    讀懂光模塊

    隨著人工智能(AI)技術(shù)的飛速發(fā)展,AI數(shù)據(jù)訓(xùn)練及應(yīng)用往往涉及到海量的數(shù)據(jù)傳輸和實時交互,對算力和網(wǎng)絡(luò)的需求正呈現(xiàn)爆發(fā)式的增長。
    的頭像 發(fā)表于 08-11 17:16 ?5654次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>光模塊

    讀懂高速信號眼圖

    眼圖是個統(tǒng)計疊加的概念,是系列數(shù)字信號在示波器上積累而顯示的圖形,通過它可以觀察出碼間串擾和噪聲對系統(tǒng)的影響,從而估計系統(tǒng)優(yōu)劣。個完整的眼圖應(yīng)該包含從“000”到“111”的所有狀態(tài)組,且
    的頭像 發(fā)表于 07-30 17:33 ?6185次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>高速信號眼圖

    讀懂智能高側(cè)開關(guān)

    在汽車電子領(lǐng)域,“智能高側(cè)開關(guān)”與“智能高邊開關(guān)”這兩個名詞頻繁被提及,它們實則指代同事物。為表述統(tǒng),后續(xù)我們皆以“智能高側(cè)開關(guān)”?稱之。接下來,我們將從三個維度深入剖析智能高側(cè)開關(guān):其為它
    發(fā)表于 06-04 10:03 ?3204次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>讀懂</b>智能高側(cè)開關(guān)
    伊春市| 江口县| 慈利县| 金华市| 仪陇县| 衡山县| 凉城县| 桓台县| 满洲里市| 葵青区| 巴中市| 靖边县| 青神县| 海原县| 兴隆县| 邢台县| 阿荣旗| 历史| 东安县| 呼伦贝尔市| 石台县| 德阳市| 白银市| 海安县| 荣昌县| 枞阳县| 仪陇县| 新平| 赞皇县| 达州市| 桂东县| 白银市| 南通市| 辽阳县| 荆门市| 绵阳市| 平乡县| 安塞县| 乌鲁木齐市| 鸡东县| 洪湖市|