<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發

      導航

      深入理解Java虛擬機02--Java內存區域與內存溢出異常

      一.概述

        我們在進行 Java 開發的時候,很少關心 Java 的內存分配等等,因為這些活都讓 JVM 給我們做了。不僅自動給我們分配內存,還有自動的回收無需再占用的內存空間,以騰出內存供其他人使用。但是我們經常面臨的一個問題就是內存泄漏,JVM無法完成回收工作,導致內存占用暴漲,最后可能讓程序奔潰。本章主要了解下運行時數據區域分布情況以及溢出異常。

      二.運行時數據區域

      1、程序計數器

      • 線程私有
      • 當前線程所執行的字節碼的行號指示器
      • Java 多線程是通過再一個內核中輪流執行實現的,計數器就保證了切換線程的時候可以回到原來正確的執行位置
      • 程序計數器必須每個線程單獨一個,是線程私有的內存區域
      • 程序計數器是唯一一個 JVM 沒有規范 OutOfMemoryError 的區域

      2、Java虛擬機棧(java方法)

      • 線程私有
      • Java方法執行的內存模型,即方法執行時會創建一個棧幀,保存了需要的局部變量表、操作數棧、動態鏈接、方法出口等信息;
      • 線程請求的棧深度>JVM允許的深度時,報StackOverflowError;
      • 大多數的 JVM 可以動態擴展內存,如果無法申請到足夠的內存時,報 OutOfMemoryError;

      3、本地方法棧(native方法)

      • 同Java虛擬機棧

      4、Java堆

      • 線程共享
      • 唯一目的:存放對象實例
      • 分類:新生代、老生代,或者 Eden 空間、From Survior 空間、To Survivor 空間
      • 分類目的:更好的回收和分配內存
      • 沒有內存完成實例分配,或者不能再擴展,報OutOfMemoryError 異常
      • 可以自己配置大小(-Xmx和-Xms)

      5、方法區

      • 線程共享
      • 目的:存儲類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據;
      • 該區內存回收目標:主要針對常量池的回收和對類型的卸載;
      • 無法滿足內存分配要求時,報 OutOfMemoryError 異常

      6、運行時常量池

      • 注意:運行時常量池屬于方法區
      • 目的:存儲編譯期生成的各種字面量和符號引用
      • 特征:并非只有編譯期置入 Class 文件中的常量池內容才能進入運行時常量池,在運行期間也可以置入新的常量,比如 String 的intern() 方法;
      • 無法申請足夠內存時,報 OutOfMemoryError 異常

       

      三.直接內存

      • 非運行時數據區域內存
      • Native 函數分配堆外內存,堆內的 DirectByteBuffer 作為這塊內存的引用
      • 性能顯著提高,避免了 Java 堆和 native 之間來回復制數據

      四.HotSpot虛擬機對象探秘

      1、New對象過程

      • new 指令發出
      • 檢查 new 的參數是否在常量池中存在這個 Class 的符號引用
      • 檢查對應的 Class 是否已經初始化
      1. 若沒有則先執行初始化過程
      • 分配內存,檢查堆是否規整(垃圾收集器是否帶有壓縮整理功能決定)
      1. 規整:指針碰撞方式分配內存
      2. 不規整:空閑列表方式分配內存
      • 內存空間初始化為零值(不包括對象頭)
      • 對對象進行重要的配置
      • 執行 < init > 方法


      2、對象的內存布局

      對象頭(Mark Word)

      • 自身運行時數據
      1. GC分代年齡、鎖狀態標志、線程持有的鎖、偏向線程ID
      2. 類型指針:確定對象是哪個Class的實例

      實例數據

      • 存儲有效信息,定義的各種字段
      • 相同寬度的字段總是被分配到一起

      對齊填充

      • 不一定存在
      • 實例數據沒有對齊,需要填充


      3、對象的訪問定位
      句柄(reference):

      • 堆中劃分句柄池
      • 句柄地址
      1. 到對象實例數據的地址
      2. 到對象類型的地址
      • 優勢:穩定,對象移動時,(如GC時會移動),這個時候只改變指針地址。句柄信息不變,相對穩定;

      指針:

      • 直接存儲了上述的對象地址
      • 優勢:速度快

      五.OOM

      • 堆溢出:舉例一直 new 新的實例對象
      • 棧溢出:舉例無限循環調用執行某個方法
      • 方法區和運行時常量池溢出:
      1. String.intern():如果常量池已存在,則返回 String 對象,如果不存在,則先添加到常量池,再返回 String 對象。
      2. 動態定義大量的 Class,需要注意內存的回收情況。

       

      posted on 2018-08-06 09:59  安卓筆記俠  閱讀(369)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲国产成人片在线观看无码| 人妻体内射精一区二区三区| 女人与牲口性恔配视频免费| 老司机午夜精品视频资源| 亚洲精品一区二区三区四区乱码| 94人妻少妇偷人精品| 国产精品亚洲二区在线播放| 精品亚洲无人区一区二区| 国产亚洲精品成人aa片新蒲金| 少妇xxxxx性开放| 伊人成人在线视频免费| 国产女主播一区| 天天爽夜夜爱| 亚洲人成小说网站色在线 | 国产成人综合欧美精品久久| 性做久久久久久久| 成人亚洲国产精品一区不卡| 国产熟女老阿姨毛片看爽爽| 色噜噜亚洲精品中文字幕| 亚洲精品成人一二三专区| 成人午夜av在线播放| 亚洲精品人妻中文字幕| 婷婷色香五月综合缴缴情香蕉| 国产综合色产在线精品| 色狠狠色噜噜AV一区| 久久综合色天天久久综合图片| 亚洲国产成人久久精品不卡| 国产无遮挡又黄又爽又色| 少妇午夜福利一区二区三区| 国产成人精品一区二三区在线观看 | 強壮公弄得我次次高潮A片| 亚洲高清 一区二区三区| 国产精品亚洲二区在线播放| 国产肉丝袜在线观看| 国产伦人人人人人人性| 国产精品无码久久久久AV| 亚洲一区二区中文av| 99热这里有精品| 99re6这里有精品热视频| 国产精品免费视频网站| 亚洲国产精品日韩av专区|