1. 程式人生 > >JVM從頭學(二)—— 堆記憶體模型與GC

JVM從頭學(二)—— 堆記憶體模型與GC

堆記憶體模型與CG

GC可以手動GC,也可能JVM自動GC。GC分menor GC和Full GC,fullGC耗時長,消耗資源多而menor GC耗時短一些。。

說GC前,必須瞭解一下java堆記憶體模型。

堆記憶體模型

java堆記憶體模型分為young generation(新生代),old generation(老生代),permanent space(不變的)。新生代就是存新的物件,老生代存新生代多次minor GC之後還存活的物件,permanent space存一些載入的jar,載入的class之內的記憶體。新生代中有Eden,from,to三種記憶體,預設分配8:1:1。

jvm堆記憶體模型)

GC過程

Eden存的新的物件,eden滿了就執行minor GC,minor GC之後存活的複製到from,繼續eden滿,minor GC,這次GC,from和eden都會GC,接著把eden,from的物件複製到to,清空eden,from,接著把from和to的身份互換,這時eden空的,from有值,to空的。當一個物件複製16次後,複製進old。old滿了,full GC。

GC的觸發條件

minor GC

  1. eden滿了

full GC

  1. old 滿了
  2. 主動觸發,可能

怎麼進old

  1. 在from,to中複製次數超過16次

  2. to的容量不夠,from和to複製過來的物件,物件進old

相關推薦

JVM從頭—— 記憶體模型GC

堆記憶體模型與CG GC可以手動GC,也可能JVM自動GC。GC分menor GC和Full GC,fullGC耗時長,消耗資源多而menor GC耗時短一些。。 說GC前,必須瞭解一下java堆記憶體模型。 堆記憶體模型 java堆記憶體模型分為y

JVM原理類載入機制GC演算法

一. 類的載入機制 過程 將.class的二進位制資料讀入記憶體,放入方法區中 在堆中建立一個java.lang.Class物件,封裝類在方法區中的資料結構,並提供訪問方法區資料結構的介面 類的生命週期 類的載入過程

《深入理解java虛擬機器》讀書筆記---- Java記憶體區域記憶體溢位異常

執行時資料區域 java虛擬機器所管理的記憶體將會包括以下幾個執行時資料區域: 1、程式計數器 程式計數器是一塊較小的記憶體空間,它可以看作是當前執行緒所執行位元組碼的行號指示器。在虛擬機器的概念模型裡,位元組碼直譯器的工作就是通過改變這個計數器的值來選取下一條需要執

深入理解 Java 虛擬機器Java 記憶體模型執行緒

執行緒安全 Java 語言中的執行緒安全 根據執行緒安全的強度排序,Java 語言中各種操作共享的資料可以分為 5 類:不可變、絕對執行緒安全、相對執行緒安全、執行緒相容、執行緒對立。 不可變 不可變的物件一定是執行緒安全的,如果共享資料是一個基本資料型別,那麼

計算機圖形——微表面模型

計算機圖形學中基於物理建模的渲染技術之所以能給人極佳的視覺體驗,是因為利用這些渲染技術能夠很真實的反映出每種物體獨有的“質感”。我們能通過人眼觀察來感受物體表面“質感”的原因,也是因為物體表面反射周圍環境的特性不同而造成的,因此對物體表面的物理建模對於其表面本身的質感表現至關重要。對物體表面的建模,最簡單的是

深入JVM系列記憶體模型記憶體分配

Java 方法棧也是執行緒私有的,每個 Java 方法棧都是由一個個棧幀組成的,每個棧幀是一個方法執行期的基礎資料結構,它儲存著區域性變量表、運算元棧、動態連結、方法出口等資訊。當執行緒呼叫呼叫了一個 Java 方法時,一個棧幀就被壓入(push)到相應的 Java 方法棧。當執行緒從一個 Java 方法

JVM調優JVM記憶體分配引數

設定最大堆記憶體 -Xmx引數指定。最大堆是新生代和老年代的大小之和的最大值,他是java應用程式的堆上限。 使用-Xmx可以設定系統的最大堆。 設定最小堆記憶體 使用-Xms可以設定系統的最小堆空間,也就是jvm啟動時,所佔據的作業系統的記憶體大小。 設定新生代

VC++ 記憶體機理的個人理解——和棧

     說完了地址和指標,我們來說說堆和棧的不同,在此之前,感謝Polaris給我的幫助,在這個問題是他給我講了很多,也舉了很多例子,讓我懂了很多關於堆疊的東西。     首先,關於堆和棧的資料結構小凡就不多說什麼了,是先進先出還是後進先出也不是我們討論的範圍。     但

計算機圖形輸出圖元_3_畫線算法_2_DDA算法

通過 程序 之間 tro 取整 xen git 方程 class DDA算法? ? ? ? 數字微分分析儀(digital differential analyzer, DDA)方法是一種線段掃描轉換算法。基於使用等式(3

JVM學習筆記--方法調用之靜態分配和動態分配

extends AD 找到 n! sse 運行時 面試 static sys 本篇文章從JVM的角度來理解Java學習中經常提到的重載和重寫。 方法調用:方法調用不等同於方法執行,在Java虛擬機中,方法調用僅僅是為了確定調用哪個版本的方法。方法調用分為解析調用和分派。解析

JVM調優經驗參數設置

too 語言 相關 jdk5 nta 回收算法 from 情況 根據 調優設置具體解析   堆大小設置     JVM 中最大堆大小有三方面限制:相關操作系統的數據模型(32-bt還是64-bit)限制;系統的可用虛擬內存限制;系統的可用物理內存限制。32位系統下,一般限

jvm 複習概要 java 物件的建立

1.物件的建立 按順序為: 1.給物件分配記憶體 2.初始化物件 3.執行構造方法 2.物件的結構 2.1 Header(物件頭)  -自身執行時的資料     --雜湊值  GC分帶年齡  鎖狀態標誌&nb

jvm 複習概要 java 記憶體結構

一、記憶體結構 從大結構來說,JAVA虛擬機器記憶體主要分為 執行緒共享區和 執行緒獨佔區,如下圖 1.執行緒共享區 執行緒共享區主要包括java堆和方法區 1.1 java堆 主要存放物件,分為edan區,新生代,老年代,是垃圾收集器的主要管理區域 1.2 方法區

Java基礎Java記憶體區域

Java記憶體區域包括5部分:程式計數器、Java棧、本地方法棧、Java堆、方法區。 1、程式計數器(執行緒私有) 存放當前執行緒執行的位元組碼的行號指示器。 2、Java棧(執行緒私有) 存放棧幀,棧幀中存放區域性變量表、運算元棧、動態連結、方法返回地址等。 其中,區域性變量

JVM-----------------Java記憶體模型

        Java記憶體模型(Java Memory Model)本身是一個抽象概念,並不真實存在,它描述的是一種規範,Java記憶體模型的主要目標是通過這組規範去定義程式中各個變數的訪問規則,即在虛擬機器中將變數儲存到記憶體和從記憶體中取出變數這樣底層細節。此處的變數

深入理解JVM十一——Java記憶體模型執行緒

計算機運算的速度,與它的儲存和通訊子系統相差太大,大量的時間花費在磁碟IO,網路通訊和資料庫上。 衡量一個服務效能的高低好壞,每秒事務處理數TPS是最重要的指標。 對於計算量相同的任務,程式執行緒併發協調的越有條不紊,效率越高;反之,執行緒之間頻繁阻塞或是死鎖,將大大降低併發能力。

jvm學習記憶體模型區域詳解

1,引言     在記憶體管理區域java與c、c++語言不同的是jvm負責管理記憶體控制和垃圾回收的功能,而c、c++程式設計師需要程式碼裡面管理記憶體,這樣雖然方便了java的開發,但出現記憶體溢位和洩漏等問題也不好排查,讓我們先了解下虛擬機器記憶體模型。

JVM記憶體模型JMM

JMM是一種規範,目的是解決由於多執行緒通過共享記憶體進行通訊時,存在的本地記憶體資料不一致、編譯器會對程式碼指令重排序、處理器會對程式碼亂序執行等帶來的問題。 主記憶體與工作記憶體 主記憶體:所有的例項欄位、靜態欄位和構成陣列物件的元素都儲存在主記憶體,但不包括區域性變數與方法引數。

pandas資料分析輕鬆——讀取Excel檔案

該系列部落格,均來自劉鐵猛老師的視訊內容,網址如下: 一、IDE環境:anaconda+PyCharm,python3.6 二、新建.py檔案(注意檔案命名) 三、具體讀取資料操作如下: Excel檔案頭部和尾部行資料的讀取 import pandas as

投資 MOOC

行業的涵義與分類 行業和行業存在超額收益率差異? 行業在多大程度上決定企業和企業之間的差別? 高階定製服裝和普通服裝不屬於同一個行業 合理的定義行業 謹防競爭者近視症狀 行業的生命週期