深入拆解虛擬機器(九)垃圾回收(下)
堆記憶體劃分
Java虛擬機器將堆分為新生代和老年代,並且對不同代採用不同的垃圾回收演算法。其中,新生代分為Eden區和兩個大小一致的Survivor區,並且其中一個Survivor區是空的
Minor GC
(1)在只針對新生代的Minor GC中,Eden區和非S空urvivor區的存活物件會被複制到空的Survivor區中,當Survivor區中的存活物件複製次數超過一定數值時,它將會被晉升到老年代
(2)因為Minor GC只針對新生代進行垃圾回收,所以在列舉GC Roots的時候,它需要考慮從老年代到新生代的引用。為了避免掃描整個老年代,Java虛擬機器引入名為卡表的技術,大致地標出可能存在老年代到新生代引用的記憶體區域
相關推薦
深入拆解虛擬機器(九)垃圾回收(下)
堆記憶體劃分 Java虛擬機器將堆分為新生代和老年代,並且對不同代採用不同的垃圾回收演算法。其中,新生代分為Eden區和兩個大小一致的Survivor區,並且其中一個Survivor區是空的 Minor GC (1)在只針對新生代的Minor GC中,Eden區和非S空
深入拆解虛擬機器(八)垃圾回收(上)
引用計數法 (1)它的做法是為每個物件新增一個引用計數器,用來統計指向該物件的引用個數。一旦某個物件 的引用計數器為0,則說明該物件已經死亡,便可以被回收了。 (2)具體實現:如果有一個引用,被賦值為某一個物件,那麼該物件的引用計數器+1。如果指向某一個物件的引用,被賦值為其他值
深入拆解虛擬機器(四)JVM是如何執行方法呼叫的?(上)
過載與重寫 (1)Java程式裡,如果同一個類出現多個名字相同,並且引數型別相同的方法,那麼它無法通過編譯 (2)在正常情況下,如果我們想要在同一個類中定義名字相同的方法,那麼它們的引數型別必須不同。這些方法之間的關係,我們稱之為過載 (3)選取過載方法的三個階段:
深入拆解虛擬機器(三)Java虛擬機器是如何載入Java類的?
引用型別 (1)類、介面、陣列類、泛型引數,由於泛型引數在編譯過程中被擦除,因此Java虛擬機器實際上只有前三種。 (2)在類、介面和陣列類中,陣列類是由Java虛擬機器直接生成的,其他兩種則有對應的位元組流。 載入 (1)載入,是指查詢位元組流。Java虛擬機器需
深入拆解虛擬機器(二)Java的基本型別
Java基本型別 (1)boolean型別在Java虛擬機器中被對映為整數型別:"true"被對映為1,"false"被對映為0。Java中的邏輯運算以及條件跳轉,都是用整數相關的位元組碼來實現的 (2)除boolean型別外,Java還有另外7個基本型別。它們擁有不同的值域,但
深入拆解虛擬機器(一)Java程式碼是咋樣執行的
Java執行方式 序號 方式 1 開發工具中執行 2 雙擊Jar檔案執行 3 命令列中執行
深入拆解虛擬機器(七)JVM是如何實現反射的?
定義 允許正在執行的Java程式觀測,甚至修改程式的動態行為 應用場景 (1)Java整合開發環境(IDE)便運用了這一功能:每當我們敲入點號的時候,IDE就會根據點號前的內容,動態展示可以訪問的欄位或者方法 (2)各種可配置框架,為了保證框架的可擴充套件性,它們往
深入拆解虛擬機器(六)JVM是如何處理異常的?
丟擲異常 (1)顯式拋異常的主體是應用程式,它指的是程式中使用’'throw "關鍵字,手動將異常例項丟擲 (2)隱式拋異常的主體是Java虛擬機器,它指的是Java虛擬機器在執行過程中,碰到無法繼續執行的異常狀態,自動丟擲異常 捕獲異常 (1)try程式碼塊:用來
深入拆解虛擬機器(五)JVM是如何執行方法呼叫的?(下)
虛方法呼叫 (1)Java中所有非私有例項方法呼叫都會被 編譯成invokevirtual指令,而介面方法呼叫會被編譯成invokevirtualface指令。這兩種指令,均屬於Java虛擬機器中的虛方法呼叫 (2)Java虛擬機器採用了一種用空間換時間的策略實現動態繫結。它為每個方
深入拆解虛擬機器(十)Java語法糖與Java編譯器
泛型與型別擦除 (1)Java程式裡的泛型資訊,在Java虛擬機器裡全部丟失了。這麼做主要是為了相容引入泛型之前的程式碼。 (2)並不是每一個泛型引數被擦除型別之後都會變成Object類。對於限定了繼承類的泛型引數,經過型別擦除後,所有的泛型引數都將變成所限定的繼承類。也就是說,
深入拆解虛擬機器(六)JVM是如何執行方法呼叫的?(下)
虛方法呼叫 (1)Java中所有非私有例項方法呼叫都會被 編譯成invokevirtual指令,而介面方法呼叫會被編譯成invokevirtualface指令。這兩種指令,均屬於Java虛擬機器中的虛方
深入理解JVM虛擬機器2:JVM垃圾回收基本原理和演算法
JVM GC基本原理與GC演算法 Java的記憶體分配與回收全部由JVM垃圾回收程序自動完成。與C語言不同,Java開發者不需要自己編寫程式碼實現垃圾回收。這是Java深受大家歡迎的眾多特性之一,能夠幫助程式設計師更好地編寫Java程式。 下面四篇教程是瞭解Jav
《深入Java虛擬機器》閱讀筆記 —— 垃圾收集器
1.概述 Java中垃圾回收器所做的工作可以概括為兩項: 1.檢測出垃圾物件。 2.回收垃圾物件所使用的堆空間並還給程式。 垃圾回收的方法大概也能分為兩種: 1.將活動的物件複製到另一個堆空間,再將原來的空間釋放掉。 2.對活動的物件進行標記,再將沒有被標記的物件進行回收。 在Ja
Java虛擬機器 記憶體管理與垃圾回收
java和C++之間有一堵由記憶體自動分配與垃圾回收所圍成的高牆,外面的人想進來,裡面的人想出去 主要內容 記憶體分佈 垃圾回收機制 垃圾收集器 Java記憶體分佈 當java虛擬機器執行程式時,會把由虛擬機器管理的記憶體劃分為不同的區域,他們的作用不同,建立和銷燬時間也不同,有的是虛擬
探祕Java虛擬機器——記憶體管理與垃圾回收
本文主要是基於Sun JDK 1.6 Garbage Collector(作者:畢玄)的整理與總結,原文請讀者在網上搜索。 1、Java虛擬機器執行時的資料區 2、常用的記憶體區域調節引數 -Xms:初始堆大小,預設為實體記憶體的1/64(<1GB);預設(MinHeapFreeRatio引數可以調
Java程式設計師從笨鳥到菜鳥之(九十五)深入java虛擬機器(四)——java虛擬機器的垃圾回收機制
Java語言從出現到現在,一直佔據程式語言前列,他很大的一個原因就是由於java應用程式所執行的平臺有關。我們大家都知道java應用程式執行在java虛擬機器上。這樣就大大減少了java應用程式和底層作業系統打交道的頻率。這也就為java程式的跨平臺提供了良好的基礎。在java虛擬機器中
Java程式設計師從笨鳥到菜鳥之(九十三)深入java虛擬機器(二)——類載入器詳解(上)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Java程式設計師從笨鳥到菜鳥之(九十四)深入java虛擬機器(三)——類的生命週期 下)類的初始化
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
《深入理解java虛擬機器》讀書筆記(三)---- 垃圾回收演算法及垃圾收集器介紹
一、垃圾回收演算法 1、標記--清除演算法 標記--清除(Mark-Sweep)演算法,分為標記和清除兩個階段,首先標記出所有需要回收的物件,在標記完成後統一回收所有被標記的物件,這是最基礎的收集演算法,後續很多演算法都是基於這種思想進行設計的。 標記--清除演算法主要的不足有兩點:一個
深入Java虛擬機器閱讀感(二)-Java垃圾回收器與記憶體分配策略
垃圾回收器主要演算法: 1、引用計數法。給物件新增一個計數器,當物件被使用時則加1,當引用失效時則減1,當計數為0時則認為該物件可以被回收。由於該算演算法無法解決物件相互引用而計數不會減為0,導致該物件無法回收,所以該演算法不是Java虛擬垃圾回收器