三年Java開發,你連基礎的JVM運行時內存布局都忘了

面:為什么要使用雙親委派機制去加載類?

答:避免多份同樣字節碼的加載,浪費內存。

類的加載方式

  • 隱式加載:new
  • 顯示加載:loadClass、forName等

類的裝載過程如下圖:

面:loadClass和forName的區別?

  • Class.forName得到的class是已經初始化完成了的 (MySQL加載驅動時,需要調用靜態代碼塊完成一些操作)
  • ClassLoader.loadClass得到的class是還沒有鏈接的。(用于Spring IoC中的延遲加載機制)

Java內存模型

JVM內存模型——JDK8如下圖所示:

  • 線程私有:程序計數器、虛擬機棧、本地方法棧
  • 線程共享:MetaSpace、Java堆

程序計數器(PC)

  • 當前線程所執行的字節碼行號指示器(邏輯)
  • 通過改變計數器的值來選取下一條需要執行的字節碼指令
  • 和線程是一對一的關系即“線程私有”
  • 對Java方法計數,如果是Native方法則計數器的值為Undefined
  • 不會發生內存泄漏

Java虛擬機棧(Stack)

  • Java方法執行的內存模型
  • 包含多個棧幀(一個棧幀包括局部變量表、操作棧、動態鏈接、返回地址等,方法的調用即對于棧幀從虛擬機Stack中入棧到出棧的過程)
  • 當線程請求的棧深度超過最大值,會拋出 StackOverflowError 異常;
  • 棧進行動態擴展時如果無法申請到足夠內存,會拋出 OutOfMemoryError 異常。

本地方法棧

與虛擬機棧相似,主要作用于標注了native的方法。

元空間(MetaSpace)

用于存放已被加載的類信息、常量、靜態變量。

面:談談元空間(MetaSpace)和永久代(PermGen)的區別?

  • 均是方法區(JVM的一種規范)的實現
  • JDK8后元空間替代了永久代
  • 元空間使用本地內存,而永久代使用的是jvm內存,這解決了空間不足的問題。

面:MetaSpace相比PermGen的優勢?

  • 字符串常量池(JDK1.7開始移動到Java堆中)存在與永久代中,容易出現性能問題和內存溢出
  • 類的方法的信息大小難以確定,給永久代的大小的指定帶來了困難
  • 永久代會為GC帶來不必要的復雜性
  • 方便HotSpot與其他JVM如Jrockit的集成(因為永久代是HotSpot獨有的)

Java堆(Heap)

  • 是對象實例的分配區域
  • GC管理的主要區域

面:說說JVM三大性能調優參數-Xms、-Xmx、-Xss的含義?

java -Xms128m -Xmx128m -Xss256k -jar xxx.jar

  • -Xss:規定了每個線程虛擬機棧(堆棧)的大小
  • -Xms:堆的初始值
  • -Xmx:堆能達到的最大值

一般將-Xms與-Xmx設置為同樣的數值,避免堆擴容時發生的內存抖動,影響程序的穩定性。

內存分配策略

  • 靜態存儲:編譯時確定每個數據目標在運行時的存儲空間需求
  • 棧式存儲:數據區需求在編譯時未知,在運行時模塊入口前確定
  • 堆式存儲:編譯時或運行時模塊入口都無法確定需求,需要動態分配

面:談談Java內存模型中堆和棧的區別與聯系?

  • 聯系:引用對象、數組時,棧里定義變量來保存堆中目標的首地址
  • 管理方式:棧自動釋放,堆需要GC
  • 空間大小:一般棧比堆小
  • 碎片相關:棧產生的內存碎片遠小于堆
  • 分配方式:棧支持靜態和動態分配,而堆僅支持動態分配
  • 效率:棧的效率比堆高(棧只有入棧與出棧)

面:請解釋下JDK6和JDK6+下intern()方法的區別?

  • JDK6:當調用intern方法時,如果字符串常量池先前已創建出該字符串對象,則返回池中的該字符串的引用。否則將此字符串對象添加到字符串常量池中,并且返回該字符串對象的引用。
  • JDK6+:當調用intern方法時,如果字符串常量池先前已創建出該字符串對象,則返回池中該字符串的引用。否則,如果該字符串對象已經存在與Java堆中,則將堆中對此對象的引用添加到字符串常量池中,并且返回該引用;如果堆中不存在該對象,則在字符串常量池中創建該字符串并返回其引用。

最后

針對最近很多人都在面試,我這邊也整理了相當多的面試專題資料,也有其他大廠的面經。希望可以幫助到大家。

下面的面試題答案都整理成文檔筆記。也還整理了一些面試資料&最新2021收集的一些大廠的面試真題(都整理成文檔,小部分截圖),有需要的可以戳這里免費領取

在這里插入圖片描述

最新整理電子書

這里免費領取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)

[外鏈圖片轉存中…(img-IAKzt7JK-1624225631036)]

最新整理電子書

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue實現可編輯的文字_蘋果還自帶文字轉語音,只要一鍵按下便可實現,今天分享給大家...

如果想將文字轉成語音,那大家平時都是怎么操作?下面小編就為大家介紹手機,電腦上都可以使用的方法,讓我們一起來看看吧!一、手機端操作1、蘋果手機其實蘋果手機就自帶了文字轉語音功能,只要打開手機&#x…

三面美團Java崗,面試竟然被這31道Java基礎題難倒了

01 分布式限流:NginxZooKeeper 1.1 分布式限流之Nginx 請解釋一下什么是 Nginx? 請列舉 x Nginx 的一些特性。 請列舉 x Nginx 和 和 Apache 之間的不同點 請解釋 x Nginx 如何處理 P HTTP 請求。 在 x Nginx 中,如何使用未定義的服務器名稱來阻止…

海龜繪圖小動物_震驚!被塑料繩勒成兩半的海龜

海洋,其實離人類很近,我們在追逐沙灘和日落,享受美味的海鮮的時候,可曾想到我們平時的一些很隨意的行為,會給一些海洋生物帶來無法恢復的傷害,甚至奪取它們的生命。或許人們的冷漠無知尚未得到懲罰&#xf…

上海大廠Java面試經歷:初步理解類加載運行機制和類加載過程

volatile相關經典面試題 談談volatile的特性volatile的內存語義說說并發編程的3大特性什么是內存可見性,什么是指令重排序?volatile是如何解決java并發中可見性的問題volatile如何防止指令重排volatile可以解決原子性嘛?為什么?v…

python生成泊松分布隨機數_泊松分布隨機數

一、功能產生泊松分布的隨機數。二、方法簡介泊松分布的概率密度函數為\[f(x)\frac{\lambda ^{x}e^{-\lambda }}{x!} \qquad x\in \left \{ 0,1,...,\lambda \right \}\]用\(P(\lambda)\)表示。泊松分布的均值為\(\lambda\),方差為\(\lambda\)。定理 若\(\lambda &g…

mysql數據庫優化面試

前言 現在Java程序員面試都是因為沒有豐富的工作經驗和自己過硬的技術,所有都不知道一般互聯網應該會問什么技術問題,加上自己可能去面試的時候沒有準備的太充分,一面試剛跟面試官扯幾個面試題就不知道自己在哪里了,被懟的體無完…

leetcode中文版python_Python版LeetCode1.兩數之和

啦啦啦,歡迎開啟LeetCode刷題的旅程,這將是一段漫長而又艱辛的旅程。這道Two Sum的題目作為LeetCode的開篇之題,乃是經典中的經典,正所謂‘平生不識TwoSum,刷盡LeetCode也枉然’,就像英語單詞書的第一個單詞…

mysql數據庫備份方式,跳槽大廠必看!

NO1:說說zookeeper是什么? ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現(Chubby是不開源的),它是集群的管理者,監視著集群中各個節點…

python淺藍色對應的代碼_淺藍色Python模塊不在m上工作

我正在嘗試通過macosx10.7.2上的Python連接到wiimote。在為此我試著用淺藍色。運行時:import lightbluePython會給我這個錯誤。在>>> import lightblueTraceback (most recent call last):File "", line 1, in File "/Library/Frameworks/P…

mysql數據庫安裝教程32位,看這一篇就夠了!

字節跳動 ?試前?????結 ?試前 頭條的?試是三家?最專業的,每次?試前有專?的HR和你約時間,確定OK后再進??試。每次都是通過視頻?試,因為都是之前都是電話?或現場?,所以視頻?試還是有點不?然。也有?覺得視頻?試…

java cron工具類_Java工具類之:包裝類

我們都知道,JDK 其實給我們提供了很多很多 Java 開發者已經寫好的現成的類,他們其實都可以理解成工具類,比如我們常見的集合類,日期相關的類,數學相關的類等等,有了這些工具類,你會發現它能很大…

mysql數據庫安裝,真香!

Spring Security觀后感——手繪思維腦(供參考) 手繪的思維導圖,是我自己根據自身的情況讀完這套阿里出品的Spring Security王者晉級文檔之后所繪的,相當于是一個知識的總結與梳理,我將其分為“核心組件”與“工作原理/認證流程”。 Spring Se…

python列表代碼_8種高級的Python列表使用技巧,都給你整理好啦(附實操代碼)...

Python中的列表是我們很常見的數據結構之一,也是很強大的數據結構之一!Python列表功能非常豐富,并且具有很多隱藏的技巧沒有被發現。一、使用Python過濾列表1.使用Filter()函數filter()函數采用兩個參數:函數和可迭代項。 在這種情況下&#…

mysql數據庫實用教程答案

前言 數據庫相關的面試題早已成為了一線互聯網大廠面試的家常菜,如果你對數據庫不太熟悉,我勸你不要輕易面試大廠。那么,為什么數據庫成了大廠面試的家常菜呢?主要原因當然還是海量數據。 無論對于剛入行的小白還是有幾年Java開…

在idea中新建的text文件_開發屬于自己的第一款 IDEA 插件!

往期熱門文章:1、《往期精選優秀博文都在這里了!》2、又一個程序員跑路刪庫跑路被抓了,導致服務器癱瘓 36 個小時!3、恕我直言,有了這款 IDEA 插件,你可能只需要寫 30% 的代碼。。。4、Java8 的 Stream API 的確牛X&am…

mysql數據庫開發的36條軍規

前言 一般的小項目,比如幾百人左右訪問的項目,訪問量幾萬的項目,如果想用緩存,單機實例完全夠用。小黃圖就是用的阿里云256MB配置的Redis緩存,日幾千的訪問量是妥妥夠用的了。Redis號稱可以支撐10wqps,當然…

mysql 替換非中文_mysql中的正則操作 匹配手機號,匹配中文,替換

mysql中的正則操作 匹配手機號,匹配中文,替換正則匹配hy_user表內tel字段的電話號碼:SELECT * FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELECT tel FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELE…

mysql數據庫引擎怎么看,值得收藏!

什么是Service Mesh 作為Service Mesh技術探索和實踐的先行者,全球第一個真正的Service Mesh項目Linkerd負責人、Buoyant公司創始人兼CEO William Morgan第一次完整地闡述了Service Mesh。按照William Morgan的定義,Service Mesh是一個致力于解決服務間…

mysql error -1_【Mysql】SQLException:?Got?error?-1?from?storage?engine?問題解決!

錯誤信息:Caused by: java.sql.BatchUpdateException: Got error -1 from storageengineatcom.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.atcom.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.atorg.apache.spark.sql.…

Mysql 查詢blob數據很慢_blob存入數據庫很慢

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航,為用戶…