成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java內(nèi)存區(qū)域全解析:一次被面試官“逼瘋”的回憶錄

開發(fā) 前端
每個咖啡師(線程)都會拿著一張便簽紙,寫著他現(xiàn)在做到哪一步,比如“正在煮咖啡”,“正在加奶油”。這就是程序計數(shù)器——它記錄當前線程正在執(zhí)行哪一行字節(jié)碼指令。


哈嘍大家好,我是你們的老朋友小米,今年31歲,Java搬磚第10年,Bug修復無數(shù),面試經(jīng)驗滿滿。今天咱不講框架、不講中間件,我們來聊聊——JVM 內(nèi)存區(qū)域這個老生常談的面試題。

題目是這樣問的:“請你說一下 JVM 的主要組成部分以及各自的作用。”

看到這個問題,我眼前一黑,腦子開始高速回憶各種堆啊、棧啊、方法區(qū)啊……還真別說,這問題看似基礎,答起來真有點講究。

所以,今天我就來和大家聊聊,當年我是怎么一步一步搞懂這道題,并順利在面試中脫穎而出的——順便,也讓你少走點彎路。

一個關于“卡殼”的故事

先說說我第一次被問到這個問題的場景。

那是一家特別講究“基礎扎實”的互聯(lián)網(wǎng)公司,面試官大叔不茍言笑,一開口就問:

“JVM的主要內(nèi)存區(qū)域有哪些?能說下它們各自的作用嗎?”

我當時一愣,“呃……堆、棧、方法區(qū)、程序計數(shù)器,還有本地方法棧?”

大叔點點頭:“繼續(xù)。”

我繼續(xù):“嗯……堆是用來存放對象實例的,棧用來存放局部變量……方法區(qū)用來存放類信息……”

說到這,我就卡殼了。

那個瞬間,空氣凝固了三秒鐘,我的腦門開始冒汗。面試官嘆了口氣,說:

“你還是回去好好復習一下《深入理解JVM》吧。”

那天我落荒而逃,回到家就開始痛定思痛,打開《深入理解Java虛擬機》,開啟了長達三晚的“Java內(nèi)存苦修”模式。

JVM 內(nèi)存結(jié)構(gòu)大揭秘

要搞懂 JVM 的內(nèi)存區(qū)域,先來認識一下 JVM 的整體結(jié)構(gòu)(放心,不用背圖,我用故事講清楚):

JVM 就像一個智能大管家,掌管著內(nèi)存的調(diào)配,分成幾個“分區(qū)”來處理不同的事兒。它的主要組成包括:

圖片

接下來我用一個比喻幫你理解。

用“咖啡師工作室”類比 JVM 內(nèi)存區(qū)域

想象 JVM 是一個咖啡店的工作室,里面有一位超級忙碌的咖啡師,他每天需要處理各種訂單、材料、配方和機器指令。我們把這些比喻一下:

1、程序計數(shù)器:你的“備忘小便簽”

每個咖啡師(線程)都會拿著一張便簽紙,寫著他現(xiàn)在做到哪一步,比如“正在煮咖啡”,“正在加奶油”。這就是程序計數(shù)器——它記錄當前線程正在執(zhí)行哪一行字節(jié)碼指令。

它是線程私有的,因為每個咖啡師做的事不一樣,不能共用便簽。

2、Java虛擬機棧:你的“工具箱”

每個咖啡師有一個工具箱,里面有當前正在處理訂單的方法調(diào)用棧幀,裝著局部變量(杯子、糖、勺子)、返回地址等。

方法一調(diào)用,就入棧;方法一執(zhí)行完,就出棧。棧深不夠,就棧溢出了(StackOverflowError)。

3、本地方法棧:備用老設備

有時候需要用上古機器來完成任務,比如一個只能通過老式電話撥號器完成的任務,這些“非Java”的方法叫做本地方法(Native)。本地方法棧專門為它們服務。

4、堆:所有原材料的大倉庫

你要制作一杯拿鐵,需要咖啡豆、牛奶、杯子等等,這些對象都統(tǒng)一放在堆里。

Java中所有對象實例和數(shù)組都放在堆里。JVM的垃圾回收器(GC)主要盯著這塊區(qū)域,及時回收用不到的原材料。

5、方法區(qū)(元空間):配方手冊與規(guī)則存檔

這里是存儲類的結(jié)構(gòu)信息、方法、常量池、靜態(tài)變量的地方。以前叫方法區(qū),JDK8之后移到了本地內(nèi)存中,叫元空間(Metaspace)。

每一塊區(qū)域的深度八卦

來,我們一個個深入聊聊它們到底“藏”了多少秘密。

1、程序計數(shù)器

  • 非常小,但很重要。
  • 如果線程切換,就靠它記錄上一次執(zhí)行的位置。
  • 它是唯一一個不會內(nèi)存溢出的區(qū)域!

2、虛擬機棧

  • 方法每調(diào)用一次,就生成一個棧幀。
  • 局部變量表、操作數(shù)棧、方法返回地址等都在里面。
  • 如果方法遞歸太深,可能會導致StackOverflowError。
  • 如果棧擴展失敗,則可能是OutOfMemoryError。

3、本地方法棧

  • 用得少,但別小看。
  • JNI調(diào)用C函數(shù)時就要靠它。
  • 異常一般不容易發(fā)生,除非調(diào)用了大量 native 方法。

4、堆(Heap)

  • Java內(nèi)存最大的一塊。
  • 所有的 new 出來的對象都在這里。
  • GC經(jīng)常掃它,有“新生代”“老年代”的分代概念。
  • 如果對象太多來不及回收,就會出現(xiàn)OutOfMemoryError: Java heap space。

5、方法區(qū)(元空間)

  • 存儲類元數(shù)據(jù)、常量池、靜態(tài)變量。
  • JDK 8 之前叫永久代(PermGen),容易報OutOfMemoryError: PermGen space。
  • JDK 8 之后改為元空間,直接用本地內(nèi)存,更靈活,但也可能爆OutOfMemoryError: Metaspace。

如何在面試中回答這個問題?

回到那個面試官的問題——“說一下 JVM 的主要組成部分及其作用?”

我在第二次面試時,這樣回答的:

“JVM主要內(nèi)存結(jié)構(gòu)可以分為五大部分:


  • 程序計數(shù)器(線程私有):記錄字節(jié)碼指令執(zhí)行位置;
  • Java虛擬機棧(線程私有):存儲方法調(diào)用相關的棧幀、局部變量;
  • 本地方法棧(線程私有):調(diào)用native方法時使用;
  • Java堆(線程共享):存儲所有對象實例,是GC關注的重點;
  • 方法區(qū)/元空間(線程共享):保存類結(jié)構(gòu)、靜態(tài)變量、常量池等元信息。


其中,堆和方法區(qū)是線程共享的,其余是線程私有的。GC主要關注堆區(qū),JDK8后永久代被元空間替代。”

大叔聽完,點了點頭,說:“這個問題你答得挺清楚的。”

我心里那塊大石頭總算落地。

小結(jié):一圖勝千言

最后我分享給大家一個總結(jié)圖:

圖片圖片

記住關鍵點:線程共享 vs 線程私有、GC關注堆、JDK8 改了方法區(qū)……

END

那場失敗的面試,曾讓我對 JVM 的印象變得“又怕又恨”。但現(xiàn)在回頭看,它成了我技術成長的分水嶺。

如果你也曾在 JVM 面前崩潰過,別氣餒,它確實難,但也值得!

責任編輯:武曉燕 來源: 軟件求生
相關推薦

2020-05-12 11:05:54

MySQL索引數(shù)據(jù)庫

2023-04-07 19:25:04

后端開發(fā)

2012-06-07 09:00:06

2021-07-05 22:09:53

面試官CollectionsJDK7

2020-04-09 08:47:38

Java對象線程

2013-04-06 18:52:20

2020-08-03 07:04:54

測試面試官應用程序

2021-03-10 08:05:10

Nginx面試并發(fā)

2024-04-17 08:18:22

MyBatis批量插入SQL

2020-06-22 07:47:46

提交面試官訂單

2012-09-07 14:30:31

工作回憶錄

2013-08-28 11:21:05

2024-02-22 15:36:23

Java內(nèi)存模型線程

2021-12-17 07:30:42

排序算法效率

2023-12-25 09:03:33

MySQL索引數(shù)據(jù)庫

2021-03-17 08:39:24

作用域作用域鏈JavaScript

2021-03-16 22:25:06

作用域鏈作用域JavaScript

2022-06-07 12:03:33

Java內(nèi)存模型

2019-10-21 09:56:37

MySQLCOUNTInnoDB

2020-11-06 07:11:40

內(nèi)存虛擬Redis
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av网站在线看 | 一级毛片在线播放 | 国产精品三级 | 日韩免费毛片视频 | 天天躁日日躁狠狠的躁天龙影院 | 国产在线看片 | 日韩中文字幕在线观看 | 成人精品一区二区 | 91精品国产91久久久久青草 | 久久久精彩视频 | 亚洲精品1区 | 日韩中文字幕在线免费 | 国产成人99久久亚洲综合精品 | 高清欧美性猛交xxxx黑人猛交 | 天天草天天操 | 精品欧美二区 | 国产午夜精品一区二区三区嫩草 | 日韩一区二区三区在线 | 亚洲欧洲中文 | 欧美综合自拍 | 亚洲视频在线免费观看 | 国产精品成人一区二区三区 | 日本超碰| 久草免费在线视频 | 久久国产福利 | 国产精品18hdxxxⅹ在线 | 99久久婷婷国产综合精品首页 | 亚洲精品久久久久久国产精华液 | 国产福利91精品一区二区三区 | www.久 | 国产精品久久国产精品 | a级免费观看视频 | 日韩欧美在线观看 | 岛国精品 | 操操操av| 日韩欧美国产精品一区二区 | 超碰网址 | 国产剧情一区 | 精品无码久久久久久国产 | 看真人视频一级毛片 | 欧美一区二区在线视频 |