AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

最近一周,十人面試,十人全掛在這個(gè)問題上!

來源: 責(zé)編: 時(shí)間:2024-05-16 09:09:44 165觀看
導(dǎo)讀從開始學(xué)習(xí)Java的時(shí)候,我們就接觸了這樣一種觀點(diǎn):Java中的對(duì)象是在堆上創(chuàng)建的,對(duì)象的引用是放在棧里的,這個(gè)觀點(diǎn)真的是正確的嗎?關(guān)于面試題面試題:Java中的對(duì)象是在堆上分配的嗎?有些小伙伴心里會(huì)想:我從一開始學(xué)習(xí)Java時(shí),就知

uW128資訊網(wǎng)——每日最新資訊28at.com

從開始學(xué)習(xí)Java的時(shí)候,我們就接觸了這樣一種觀點(diǎn):Java中的對(duì)象是在堆上創(chuàng)建的,對(duì)象的引用是放在棧里的,這個(gè)觀點(diǎn)真的是正確的嗎?uW128資訊網(wǎng)——每日最新資訊28at.com

關(guān)于面試題

面試題:Java中的對(duì)象是在堆上分配的嗎?uW128資訊網(wǎng)——每日最新資訊28at.com

有些小伙伴心里會(huì)想:我從一開始學(xué)習(xí)Java時(shí),就知道了:Java中的對(duì)象是在堆上創(chuàng)建的,對(duì)象的引用是存儲(chǔ)到棧中的,那Java中的對(duì)象是在堆上分配的??!難道不是嗎?uW128資訊網(wǎng)——每日最新資訊28at.com

如果你這樣回答,就會(huì)被直接Pass掉。uW128資訊網(wǎng)——每日最新資訊28at.com

或許有些小伙伴還是不太明白,那我們繼續(xù)往下看。uW128資訊網(wǎng)——每日最新資訊28at.com

面試題答案

首先,我們先給出這個(gè)題目的答案,這里我先簡(jiǎn)短的回答下這個(gè)面試題,后續(xù)我們會(huì)進(jìn)行相關(guān)分析。uW128資訊網(wǎng)——每日最新資訊28at.com

你可以這樣回答:Java中的對(duì)象不一定是在堆上分配的,因?yàn)镴VM通過逃逸分析,能夠分析出一個(gè)新對(duì)象的使用范圍,并以此確定是否要將這個(gè)對(duì)象分配到堆上。uW128資訊網(wǎng)——每日最新資訊28at.com

這里,我們接觸了一個(gè)新名詞:逃逸分析。相信很多小伙伴不是很明白,那我們繼續(xù)往下看。uW128資訊網(wǎng)——每日最新資訊28at.com

逃逸分析的概念

先以官方的形式來說下什么是逃逸分析。逃逸分析就是:一種確定指針動(dòng)態(tài)范圍的靜態(tài)分析,它可以分析在程序的哪些地方可以訪問到指針。uW128資訊網(wǎng)——每日最新資訊28at.com

在JVM的即時(shí)編譯語境下,逃逸分析將判斷新建的對(duì)象是否逃逸。即時(shí)編譯判斷對(duì)象是否逃逸的依據(jù):一種是對(duì)象是否被存入堆中(靜態(tài)字段或者堆中對(duì)象的實(shí)例字段),另一種就是對(duì)象是否被傳入未知代碼。uW128資訊網(wǎng)——每日最新資訊28at.com

直接說這些概念,確實(shí)有點(diǎn)暈啊,那我們就來兩個(gè)示例。uW128資訊網(wǎng)——每日最新資訊28at.com

對(duì)象逃逸示例

一種典型的對(duì)象逃逸就是:對(duì)象被復(fù)制給成員變量或者靜態(tài)變量,可能被外部使用,此時(shí)變量就發(fā)生了逃逸。uW128資訊網(wǎng)——每日最新資訊28at.com

我們可以用下面的代碼來表示這個(gè)現(xiàn)象。uW128資訊網(wǎng)——每日最新資訊28at.com

/** * @author binghe * @description 對(duì)象逃逸示例1 */public class ObjectEscape{    private User user;    public void init(){        user = new User();    }}

在ObjectEscape類中,存在一個(gè)成員變量user,我們?cè)趇nit()方法中,創(chuàng)建了一個(gè)User類的對(duì)象,并將其賦值給成員變量user。此時(shí),對(duì)象被復(fù)制給了成員變量,可能被外部使用,此時(shí)的變量就發(fā)生了逃逸。uW128資訊網(wǎng)——每日最新資訊28at.com

另一種典型的場(chǎng)景就是:對(duì)象通過return語句返回。如果對(duì)象通過return語句返回了,此時(shí)的程序并不能確定這個(gè)對(duì)象后續(xù)會(huì)不會(huì)被使用,外部的線程可以訪問到這個(gè)變量,此時(shí)對(duì)象也發(fā)生了逃逸。uW128資訊網(wǎng)——每日最新資訊28at.com

我們可以用下面的代碼來表示這個(gè)現(xiàn)象。uW128資訊網(wǎng)——每日最新資訊28at.com

/** * @author binghe * @description 對(duì)象逃逸示例2 */public class ObjectReturn{    public User createUser(){        User user = new User();        return user;    }}

給出兩個(gè)示例,相信小伙伴們對(duì)JVM的逃逸分析多少有點(diǎn)了解了吧,沒錯(cuò),JVM通過逃逸分析,能夠分析出新對(duì)象的使用范圍,從而決定新對(duì)象是否要在堆上進(jìn)行分配。uW128資訊網(wǎng)——每日最新資訊28at.com

還沒完,我們繼續(xù)看下逃逸分析的優(yōu)點(diǎn),以便于小伙伴們能夠更好的理解逃逸分析。uW128資訊網(wǎng)——每日最新資訊28at.com

逃逸分析的優(yōu)點(diǎn)

逃逸分析的優(yōu)點(diǎn)總體上來說可以分為三個(gè):對(duì)象可能分配在棧上、分離對(duì)象或標(biāo)量替換、消除同步鎖。我們可以使用下圖來表示。uW128資訊網(wǎng)——每日最新資訊28at.com

圖片uW128資訊網(wǎng)——每日最新資訊28at.com

對(duì)象可能分配在棧上

JVM通過逃逸分析,分析出新對(duì)象的使用范圍,就可能將對(duì)象在棧上進(jìn)行分配。棧分配可以快速地在棧幀上創(chuàng)建和銷毀對(duì)象,不用再將對(duì)象分配到堆空間,可以有效地減少 JVM 垃圾回收的壓力。uW128資訊網(wǎng)——每日最新資訊28at.com

分離對(duì)象或標(biāo)量替換

當(dāng)JVM通過逃逸分析,確定要將對(duì)象分配到棧上時(shí),即時(shí)編譯可以將對(duì)象打散,將對(duì)象替換為一個(gè)個(gè)很小的局部變量,我們將這個(gè)打散的過程叫做標(biāo)量替換。將對(duì)象替換為一個(gè)個(gè)局部變量后,就可以非常方便的在棧上進(jìn)行分配了。uW128資訊網(wǎng)——每日最新資訊28at.com

同步鎖消除

如果JVM通過逃逸分析,發(fā)現(xiàn)一個(gè)對(duì)象只能從一個(gè)線程被訪問到,則訪問這個(gè)對(duì)象時(shí),可以不加同步鎖。如果程序中使用了synchronized鎖,則JVM會(huì)將synchronized鎖消除。uW128資訊網(wǎng)——每日最新資訊28at.com

這里,需要注意的是:這種情況針對(duì)的是synchronized鎖,而對(duì)于Lock鎖,則JVM并不能消除。uW128資訊網(wǎng)——每日最新資訊28at.com

要開啟同步消除,需要加上 -XX:+EliminateLocks 參數(shù)。因?yàn)檫@個(gè)參數(shù)依賴逃逸分析,所以同時(shí)要打開 -XX:+DoEscapeAnalysis 選項(xiàng)。uW128資訊網(wǎng)——每日最新資訊28at.com

所以,并不是所有的對(duì)象和數(shù)組,都是在堆上進(jìn)行分配的,由于即時(shí)編譯的存在,如果JVM發(fā)現(xiàn)某些對(duì)象沒有逃逸出方法,就很有可能被優(yōu)化成在棧上分配。uW128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-88381-0.html最近一周,十人面試,十人全掛在這個(gè)問題上!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot3.x 和 WebSocket 在物聯(lián)網(wǎng)設(shè)備管理中的應(yīng)用

下一篇: 聊聊Vue.js 基礎(chǔ)語法詳解

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 6月安卓手機(jī)性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會(huì)以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 轎車從天而降電動(dòng)車主被撞身亡 超速搶道所致:現(xiàn)場(chǎng)視頻讓網(wǎng)友吵翻

    近日,上海青浦區(qū)法院判決轎車從天而降電動(dòng)車主被撞身亡案,轎車車主被判有期徒刑一年。案件顯示當(dāng)時(shí)男子駕駛轎車在上海某路段行駛,前車忽然轉(zhuǎn)彎提速超車,
  • 0糖0卡0脂 旭日森林仙草烏龍茶優(yōu)惠:15瓶到手29元

    旭日森林無糖仙草烏龍茶510ml*15瓶平時(shí)要賣為79.9元,今日下單領(lǐng)取50元優(yōu)惠券,到手價(jià)為29.9元。產(chǎn)品規(guī)格:0糖0卡0脂,添加草本仙草汁,清涼爽口,富含茶多酚,保留
  • 三言兩語說透設(shè)計(jì)模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計(jì)模式,它所創(chuàng)建的對(duì)象只有一個(gè)實(shí)例,且該實(shí)例易于被外界訪問。單例對(duì)象由于只有一個(gè)實(shí)例,所以它可以方便地被系統(tǒng)中的其他對(duì)象共享,從而減少
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實(shí)現(xiàn)原理和應(yīng)用
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對(duì)帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡(jiǎn)單而
  • “又被陳思誠(chéng)騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國(guó)產(chǎn)懸疑電影,成了陳思誠(chéng)的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠(chéng)再度風(fēng)頭無兩。你可以說陳思誠(chéng)的
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評(píng)論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會(huì)上,幾個(gè)財(cái)經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道”展開討論。有
  • 引領(lǐng)旗艦級(jí)影像能力向中端機(jī)普及 OPPO K11 系列發(fā)布 1799 元起

    7月25日,OPPO正式發(fā)布K系列新品—— OPPO K11 。此次 K11 在中端手機(jī)市場(chǎng)長(zhǎng)期被忽視的影像板塊發(fā)力,突破性地搭載索尼 IMX890 旗艦大底主攝,支持 OIS
Top