最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的逃逸問題心得

 更新時間:2018年02月10日 15:42:28   投稿:laozhang  
本篇文章是作者在學習了Java中的逃逸相關知識后的心得分享,一起跟著小編學習下。

大家一般認為new出來的對象都是被分配在堆上,但這并不是完全正確,通過對Java對象分配過程分析,我們發(fā)現(xiàn)對象除了可以被分配在堆上,還可以在?;騎LAB中分配空間。而棧上分配對象的技術基礎是逃逸分析和標量替換,本文主要介紹下逃逸分析。

逃逸分析的定義

逃逸分析,是一種可以有效減少Java 程序中同步負載和內存堆分配壓力的跨函數(shù)全局數(shù)據(jù)流分析算法。
通過逃逸分析,Java Hotspot編譯器能夠分析出一個新的對象的引用的使用范圍從而決定是否要將這個對象分配到堆上。

Java在Java SE 6u23以及以后的版本中支持并默認開啟了逃逸分析的選項。Java的 HotSpot JIT編譯器,能夠在方法重載或者動態(tài)加載代碼的時候對代碼進行逃逸分析。

逃逸分析的基本行為就是分析對象的動態(tài)作用域:當一個對象在方法中被定義后,它可能被外部方法所引用。
方法逃逸:例如作為調用參數(shù)傳遞到其他方法中。

線程逃逸:有可能被外部線程訪問到,譬如賦值給類變量或可以在其他線程中訪問的實例變量。

逃逸分析的理論基礎

基于 Jong-Deok Choi, Manish Gupta, Mauricio Seffano,Vugranam C. Sreedhar, Sam Midkiff等在論文《Escape Analysis for Java》中描述的算法進行逃逸分析。

該算法引入了連通圖,用連通圖來構建對象和對象引用之間的可達性關系,并在次基礎上,提出一種組合數(shù)據(jù)流分析法。由于該算法是上下文相關和流敏感的,并且模擬了對象任意層次的嵌套關系,所以分析精度較高,只是運行時間和內存消耗相對較大。

絕大多數(shù)逃逸分析的實現(xiàn)都基于“封閉世界(closed world)”的前提:所有可能被執(zhí)行的,方法在做逃逸分析前都已經得知,并且,程序的實際運行不會改變它們之間的調用關系 。但當真實的 Java 程序運行時,這樣的假設并不成立。Java 程序擁有的許多特性,例如動態(tài)類加載、調用本地函數(shù)以及反射程序調用等等,都將打破所謂“封閉世界”的約定。

逃逸分析之后的處理操作

經過逃逸分析之后,可以得到對象三種可能的逃逸狀態(tài):

GlobalEscape(全局逃逸): 即一個對象的引用逃出了方法或者線程。例如,一個對象的引用是復制給了一個類變量,或者存儲在在一個已經逃逸的對象當中,或者這個對象的引用作為方法的返回值返回給了調用方法。

ArgEscape(參數(shù)級逃逸):即在方法調用過程當中傳遞對象的應用給一個方法。這種狀態(tài)可以通過分析被調方法的二進制代碼確定。

NoEscape(沒有逃逸):一個可以進行標量替換的對象。該對象可以不被分配在傳統(tǒng)的堆上。

編譯器可以使用逃逸分析的結果,對程序進行優(yōu)化:

堆分配對象變成棧分配對象:一個方法當中的對象,對象的引用沒有發(fā)生逃逸,那么這個方法可能會被分配在棧內存上而非常見的堆內存上。

消除同步:線程同步的代價是相當高的,同步的后果是降低并發(fā)性和性能。逃逸分析可以判斷出某個對象是否始終只被一個線程訪問,如果只被一個線程訪問,那么對該對象的同步操作就可以轉化成沒有同步保護的操作,這樣就能大大提高并發(fā)程度和性能。

矢量替代:逃逸分析方法如果發(fā)現(xiàn)對象的內存存儲結構不需要連續(xù)進行的話,就可以將對象的部分甚至全部都保存在CPU寄存器內,這樣能大大提高訪問速度。

相關文章

  • Java 替換字符串右側出現(xiàn)的第一個子串方式

    Java 替換字符串右側出現(xiàn)的第一個子串方式

    這篇文章主要介紹了Java 替換字符串右側出現(xiàn)的第一個子串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatis Reflector反射類的具體使用

    mybatis Reflector反射類的具體使用

    Reflector類是MyBatis反射模塊的核心,負責處理類的元數(shù)據(jù),以實現(xiàn)屬性與數(shù)據(jù)庫字段之間靈活映射的功能,本文主要介紹了mybatis Reflector反射類的具體使用,感興趣的可以了解一下
    2024-02-02
  • java web實現(xiàn)用戶權限管理

    java web實現(xiàn)用戶權限管理

    這篇文章主要介紹了java web實現(xiàn)用戶權限管理,設計并實現(xiàn)一套簡單的權限管理功能,感興趣的小伙伴們可以參考一下
    2015-11-11
  • IDEA創(chuàng)建Java項目導出Jar包運行

    IDEA創(chuàng)建Java項目導出Jar包運行

    這篇文章主要介紹了IDEA創(chuàng)建Java項目導出Jar包運行,需要的朋友可以參考下
    2021-01-01
  • 在Struts2中的結果集類型

    在Struts2中的結果集類型

    本篇文章,小編為大家介紹關于在Struts2中的結果集類型,有需要的朋友可以參考一下
    2013-04-04
  • Java基礎之方法重寫詳解

    Java基礎之方法重寫詳解

    這篇文章主要介紹了Java基礎之方法重寫詳解,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • springboot自帶線程池ThreadPoolTaskExecutor使用

    springboot自帶線程池ThreadPoolTaskExecutor使用

    本文主要介紹了springboot自帶線程池ThreadPoolTaskExecutor使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • PowerJob的WorkerHealthReporter工作流程源碼解讀

    PowerJob的WorkerHealthReporter工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的WorkerHealthReporter工作流程源碼解讀,
    2023-12-12
  • java學習之理解自動拆裝箱特性

    java學習之理解自動拆裝箱特性

    這篇文章主要介紹java自動拆裝箱特性以及java自動拆裝箱的應用,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09
  • Java如何使用httpclient檢測url狀態(tài)及鏈接是否能打開

    Java如何使用httpclient檢測url狀態(tài)及鏈接是否能打開

    這篇文章主要介紹了Java如何使用httpclient檢測url狀態(tài)及鏈接是否能打開,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

上蔡县| 黑河市| 岳阳市| 永平县| 延安市| 隆子县| 新密市| 湘阴县| 农安县| 左云县| 垫江县| 巴彦县| 富蕴县| 哈密市| 屏山县| 泰兴市| 苍溪县| 米泉市| 娄底市| 连山| 绥中县| 溆浦县| 鹿泉市| 柞水县| 白朗县| 青铜峡市| 江门市| 新竹县| 大石桥市| 南郑县| 泽普县| 象山县| 应城市| 西藏| 兰坪| 商南县| 桐庐县| 肇州县| 巴林左旗| 乐业县| 盈江县|