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

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

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

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

什么是逃逸分析

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

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

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

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

舉個例子:Hv228資訊網——每日最新資訊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   }  }}

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

有的同學可能會問,這個操作 2 不是在構造函數的最后一步嗎,它執行完構造函數也執行完了,對象不就已經完成構造了嗎?Hv228資訊網——每日最新資訊28at.com

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

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

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

棧上分配

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

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

示例代碼:Hv228資訊網——每日最新資訊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;    }}

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

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

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

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

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

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • 國行版三星Galaxy Z Fold5/Z Flip5發布 售價7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國發布會,正式在國內推出了新一代折疊屏智能手機三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 聯想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據有人爆料,聯想的下一款 ThinkBook Plus 可能更特殊,它
Top