日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

逃逸分析:分離對象、標量替換、同步鎖消除

來源: 責編: 時間:2024-01-17 10:14:41 244觀看
導讀在JVM的實現中,為了提高JVM的性能和節省內存空間,JVM提供了一種叫做“逃逸分析”的特性,而且對于“逃逸分析”這種特性,也是近年來大廠面試常問的知識點。今天,我們就一起來聊聊什么是逃逸分析。逃逸分析的概念先以官方的

在JVM的實現中,為了提高JVM的性能和節省內存空間,JVM提供了一種叫做“逃逸分析”的特性,而且對于“逃逸分析”這種特性,也是近年來大廠面試常問的知識點。今天,我們就一起來聊聊什么是逃逸分析。U6p28資訊網——每日最新資訊28at.com

逃逸分析的概念

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

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

直接說這些概念,確實有點暈啊,那我們就來兩個示例。U6p28資訊網——每日最新資訊28at.com

對象逃逸示例

一種典型的對象逃逸就是:對象被復制給成員變量或者靜態變量,可能被外部使用,此時變量就發生了逃逸。U6p28資訊網——每日最新資訊28at.com

我們可以用下面的代碼來表示這個現象。U6p28資訊網——每日最新資訊28at.com

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

在ObjectEscape類中,存在一個成員變量user,我們在init()方法中,創建了一個User類的對象,并將其賦值給成員變量user。此時,對象被復制給了成員變量,可能被外部使用,此時的變量就發生了逃逸。U6p28資訊網——每日最新資訊28at.com

另一種典型的場景就是:對象通過return語句返回。如果對象通過return語句返回了,此時的程序并不能確定這個對象后續會不會被使用,外部的線程可以訪問到這個變量,此時對象也發生了逃逸。U6p28資訊網——每日最新資訊28at.com

我們可以用下面的代碼來表示這個現象。U6p28資訊網——每日最新資訊28at.com

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

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

還沒完,我們繼續看下逃逸分析的優點,以便于小伙伴們能夠更好的理解逃逸分析。U6p28資訊網——每日最新資訊28at.com

逃逸分析的優點

逃逸分析的優點總體上來說可以分為三個:對象可能分配在棧上、分離對象或標量替換、消除同步鎖。我們可以使用下圖來表示。U6p28資訊網——每日最新資訊28at.com

圖片圖片U6p28資訊網——每日最新資訊28at.com

對象可能分配在棧上

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

分離對象或標量替換

當JVM通過逃逸分析,確定要將對象分配到棧上時,即時編譯可以將對象打散,將對象替換為一個個很小的局部變量,我們將這個打散的過程叫做標量替換。將對象替換為一個個局部變量后,就可以非常方便的在棧上進行分配了。U6p28資訊網——每日最新資訊28at.com

同步鎖消除

如果JVM通過逃逸分析,發現一個對象只能從一個線程被訪問到,則訪問這個對象時,可以不加同步鎖。如果程序中使用了synchronized鎖,則JVM會將synchronized鎖消除。U6p28資訊網——每日最新資訊28at.com

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

要開啟同步消除,需要加上 -XX:+EliminateLocks 參數。因為這個參數依賴逃逸分析,所以同時要打開 -XX:+DoEscapeAnalysis 選項。U6p28資訊網——每日最新資訊28at.com

所以,并不是所有的對象和數組,都是在堆上進行分配的,由于即時編譯的存在,如果JVM發現某些對象沒有逃逸出方法,就很有可能被優化成在棧上分配。U6p28資訊網——每日最新資訊28at.com

衍生出的面試題

其實,針對逃逸分析還會衍生出一些典型的面試題,例如:Java中的對象一定是在堆上分配的嗎? 只要我們充分掌握了逃逸分析的原理,回答這種面試題就非常簡單了。U6p28資訊網——每日最新資訊28at.com

關于面試題

Java中的對象一定是在堆上分配的嗎?U6p28資訊網——每日最新資訊28at.com

面試官這樣問,如果大家不了解逃逸分析的話,那肯定就有些小伙伴心里會想:我從一開始學習Java時,就知道了:Java中的對象是在堆上創建的,對象的引用是存儲到棧中的,那Java中的對象是在堆上分配的啊!難道不是嗎?U6p28資訊網——每日最新資訊28at.com

如果你這樣回答,就會被直接Pass掉。U6p28資訊網——每日最新資訊28at.com

今天,我們介紹完什么是逃逸分析后,相信各位小伙伴就知道如何去完美的回答這道面試題了吧。U6p28資訊網——每日最新資訊28at.com

面試題解答思路

總體思路上,你可以這樣回答:Java中的對象不一定是在堆上分配的,因為JVM通過逃逸分析,能夠分析出一個新對象的使用范圍,并以此確定是否要將這個對象分配到堆上。U6p28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-63230-0.html逃逸分析:分離對象、標量替換、同步鎖消除

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Pro-Chat: 一款面向未來的開源智能聊天組件

下一篇: 批量執行Redis命令的四種方式!

標簽:
  • 熱門焦點
  • 學習JavaScript的10個理由...

    作者 | Simplilearn編譯 | 王瑞平當你決心學習一門語言的時候,很難選擇到底應該學習哪一門,常用的語言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 量化指標是與非:挽救被量化指標扼殺的技術團隊

    作者 | 劉新翠整理 | 徐杰承本文整理自快狗打車技術總監劉新翠在WOT2023大會上的主題分享,更多精彩內容及現場PPT,請關注51CTO技術棧公眾號,發消息【WOT2023PPT】即可直接領取
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了——貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾“低價”口號。而過去與他們錯位競爭的拼多多,靠
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • onebot M24巧系列一體機采用輕薄機身設計,現已在各平臺開售

    onebot M24 巧系列一體機目前已在線上線下各平臺同步開售。onebot M24 巧系列采用一體化輕薄機身設計,最薄處為 10.15mm,擁有寶石紅、午夜藍、石墨綠、雅致
Top 主站蜘蛛池模板: 赞皇县| 张掖市| 岗巴县| 台湾省| 合江县| 元阳县| 兴海县| 邢台县| 光山县| 虹口区| 南部县| 临江市| 东山县| 鄄城县| 寻甸| 新河县| 瑞丽市| 荣昌县| 邳州市| 和政县| 南丹县| 廉江市| 景德镇市| 方城县| 台中县| 湖南省| 凌海市| 博客| 准格尔旗| 桓台县| 阳高县| 宁陵县| 横峰县| 改则县| 南澳县| 维西| 腾冲县| 新沂市| 溆浦县| 丹棱县| 常山县|