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

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

微博二面:所有對象都一定被分配在堆中么?

來源: 責編: 時間:2023-10-27 09:14:45 288觀看
導讀什么是逃逸分析所謂逃逸,包括方法逃逸和線程逃逸,線程逃逸的逃逸程度高于方法逃逸(線程逃逸 > 方法逃逸):當一個對象在方法里面被定義后,它如果被外部方法所引用(例如作為調(diào)用參數(shù)傳遞到其他方法中),這種稱為方法逃逸;可能被外

什么是逃逸分析

所謂逃逸,包括方法逃逸和線程逃逸,線程逃逸的逃逸程度高于方法逃逸(線程逃逸 > 方法逃逸):DU128資訊網(wǎng)——每日最新資訊28at.com

當一個對象在方法里面被定義后,它如果被外部方法所引用(例如作為調(diào)用參數(shù)傳遞到其他方法中),這種稱為方法逃逸;DU128資訊網(wǎng)——每日最新資訊28at.com

可能被外部其他線程訪問到,譬如賦值給可以在其他線程中訪問的實例變量,這種稱為線程逃逸;DU128資訊網(wǎng)——每日最新資訊28at.com

this 引用逃逸就是一種線程逃逸:在構(gòu)造器構(gòu)造還未徹底完成前(即實例初始化階段還未完成),將自身 this 引用向外拋出并被其他線程復制(訪問)了該引用,那么其他線程就可能會訪問到該還未被初始化的變量。DU128資訊網(wǎng)——每日最新資訊28at.com

舉個例子:DU128資訊網(wǎng)——每日最新資訊28at.com

public class FinalReferenceEscapeTest {     final int i;     static FinalReferenceEscapeTest obj;     public FinalReferenceEscapeTest () {          i = 1;                   // 1. 寫 final 域  obj = this;              // 2. this 引用在此 "逸出" } // 線程 A public static void writer() {   new FinalReferenceEscapeExample();  } // 線程  B public static void reader() {   if (obj != null) {      // 3    int temp = obj.i;   // 4   }  }}

假設(shè)一個線程 A 執(zhí)行 writer() 方法,另一個線程 B 執(zhí)行 reader() 方法。這里的操作 2 將自身 this 引用向外拋出,使得 FinalReferenceEscapeTest 對象還未完成構(gòu)造前就為其他線程可見。DU128資訊網(wǎng)——每日最新資訊28at.com

有的同學可能會問,這個操作 2 不是在構(gòu)造函數(shù)的最后一步嗎,它執(zhí)行完構(gòu)造函數(shù)也執(zhí)行完了,對象不就已經(jīng)完成構(gòu)造了嗎?DU128資訊網(wǎng)——每日最新資訊28at.com

But 這里的操作 1 和操作 2 之間可能被重排序。如下圖所示,線程 B 不能正確地讀到 i = 1,而是未初始化的 i = 0:DU128資訊網(wǎng)——每日最新資訊28at.com

所以,我們可以得出這樣的結(jié)論:在構(gòu)造函數(shù)返回前,被構(gòu)造對象的引用不能為其他線程所見,因為此時的各個字段(域)可能還沒有被初始化。DU128資訊網(wǎng)——每日最新資訊28at.com

如果虛擬機能夠確定一個對象不會發(fā)生方法逃逸和線程逃逸,或者逃逸程度比較低(只發(fā)生方法逃逸,不發(fā)生線程逃逸),則(JIT 即時編譯器)可以為這個對象實例采取不同程度的優(yōu)化,比如鎖消除 Lock Elimination(也稱為 “同步消除 Synchronization Elimination”)、還有 棧上分配(Stack Allocations) 和 標量替換(Scalar Replacement)等DU128資訊網(wǎng)——每日最新資訊28at.com

棧上分配

棧上分配(Stack Allocations)是 JIT 即時編譯器的一項優(yōu)化技術(shù):如果確定一個對象不會逃逸出線程之外(不發(fā)生逃逸或逃逸程度較低 - 方法逃逸),那讓這個對象在棧(線程私有)上分配內(nèi)存將會是一個很不錯的主意,對象所占用的內(nèi)存空間就可以隨棧幀出棧而銷毀。DU128資訊網(wǎng)——每日最新資訊28at.com

在一般應用中,完全不會逃逸的局部對象和不會逃逸出線程的對象所占的比例是很大的,如果能使用棧上分配,那大量的對象就會隨著方法的結(jié)束而自動銷毀了,垃圾收集子系統(tǒng)的壓力將會下降很多DU128資訊網(wǎng)——每日最新資訊28at.com

示例代碼:DU128資訊網(wǎng)——每日最新資訊28at.com

public class StackAllocationExample {    private static final int MAX = 10000000;        public static void main(String[] args) {        long start = System.currentTimeMillis();        for (int i = 0; i < MAX; i++) {            allocateOnStack();        }        long end = System.currentTimeMillis();        System.out.println("Time taken: " + (end - start) + "ms");    }        private static void allocateOnStack() {        Point p = new Point();        p.x = 1;        p.y = 2;    }        private static class Point {        int x;        int y;    }}

在這個示例代碼中,我們定義了一個私有的靜態(tài)內(nèi)部類 Point,它包含兩個 int 類型的成員變量 x 和 y。在 main 方法中,我們循環(huán)調(diào)用 allocateOnStack 方法,該方法內(nèi)部創(chuàng)建一個 Point 對象并將其成員變量賦值為 1 和 2。由于 allocateOnStack 方法沒有返回 Point 對象,換言之 Point 對象是不會被暴露給其他線程的,即不會發(fā)生線程逃逸,因此編譯器可以將該對象分配在棧上而不是堆上。DU128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15315-0.html微博二面:所有對象都一定被分配在堆中么?

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

上一篇: DFA算法,高效實現(xiàn)敏感詞檢測與替換!

下一篇: Python字典全解析:從基礎(chǔ)到高級應用

標簽:
  • 熱門焦點
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰(zhàn)略發(fā)布會結(jié)束之后,Redmi總經(jīng)理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 小米平板5 Pro 12.4簡評:多專多能 兼顧影音娛樂的大屏利器

    疫情帶來了網(wǎng)課,網(wǎng)課盤活了安卓平板,安卓平板市場雖然中途停滯了幾年,但好的一點就是停滯的這幾年行業(yè)又有了新的發(fā)展方向,例如超窄邊框、高刷新率、多攝鏡頭組合等,這就讓安卓
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 共享單車的故事講到哪了?

    來源丨海克財經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點新聞關(guān)照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發(fā)報道稱,成都、天津、鄭州等地多個共享單
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 半導體需求下滑 三星電子DS業(yè)務(wù)部門今年營業(yè)虧損預計超10萬億韓元

    7月17日消息,據(jù)外媒報道,去年下半年開始的半導體需求下滑,影響到了三星電子、SK海力士、英特爾等諸多廠商,營收明顯下滑,部分廠商甚至出現(xiàn)了虧損。作為
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據(jù)10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業(yè)領(lǐng)先的性能,令人印象深刻的電池續(xù)航,精美豐
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top