1. 程式人生 > >2. 垃圾收集器與記憶體分配策略(二)

2. 垃圾收集器與記憶體分配策略(二)

上一篇我們已經討論了記憶體回收的內容,我們再來說一下,物件的記憶體分配策略

往大方向講,就是在堆上分配,物件主要分配在新生代的Eden區上,如果啟用了本地執行緒分配緩衝,將按執行緒優先在TLAB上分配。

普遍的記憶體分配規則:

(1)物件優先在Eden分配

大多數情況下,物件在Eden區中分配。當Eden區沒有足夠空間進行分配時,虛擬機器將發起一次Minor GC

(2)大物件直接進入老年代

所謂的大物件是指,需要大量連續記憶體空間的java物件,最典型的大物件就是那種很長的字串以及陣列

(3)長期存活的物件將進入老年代

既然虛擬機器採用了分代收集的思想管理記憶體,那記憶體回收時就必須能識別哪些物件在新生代、哪些在老年代。為了做到這一點,虛擬機器給每個物件定義一個物件年齡計數器。如果物件在Eden出生並經過第一次Minor GC後仍然存活,且能夠被Survivor容納的話,將被移到Survivor中,並且物件年齡設為1.物件在Survior中每熬過一次GC,年齡就增加1歲,當晉升到一定年齡(預設15歲),將會晉升到老年代中。

相關推薦

2. 垃圾收集記憶體分配策略

上一篇我們已經討論了記憶體回收的內容,我們再來說一下,物件的記憶體分配策略往大方向講,就是在堆上分配,物件主要分配在新生代的Eden區上,如果啟用了本地執行緒分配緩衝,將按執行緒優先在TLAB上分配。普

垃圾收集記憶體分配策略

參考:《深入理解Java虛擬機器》-jvm高階特性與最佳實現(周志明著) 前言 1、Java記憶體執行時區域的各個部分,其中程式計數器,虛擬機器棧,本地方法棧3個區域隨著執行緒而生,隨著執行緒而滅;在方法結束後,佔用的記憶體跟著就回收了,不需要過多考慮垃圾回收問題; 2

垃圾收集記憶體分配策略——記憶體分配回收策略

物件的記憶體分配,往大方向上講,就是在堆上分配(但也可能經過JIT編譯後被拆散為標量型別並間接地棧上分配),物件主要分配在新生代的Eden區上,如果啟動了本地執行緒分配緩衝,將按執行緒優先在TLAB上分配。少數情況下也可能會直接分配在老年代中,分配的規則並不是百分之百固定的,

深入理解Java虛擬機器讀書筆記2----垃圾收集記憶體分配策略

二 垃圾收集器與記憶體分配策略 1 JVM中哪些記憶體需要回收?     JVM垃圾回收主要關注的是Java堆和方法區這兩個區域;而程式計數器、虛擬機器棧、本地方法棧這3個區域隨執行緒而生,隨執行緒而滅,隨著方法結束或者執行緒結束記憶體自然

JVM效能優化系列-(2) 垃圾收集記憶體分配策略

目前已經更新完《Java併發程式設計》和《Docker教程》,歡迎關注【後端精進之路】,輕鬆閱讀全部文章。 Java併發程式設計: Java併發程式設計系列-(1) 併發程式設計基礎 Java併發程式設計系列-(2) 執行緒的併發工具類 Java併發程式設計系列-(3) 原子操作與CAS Java

深入理解Java虛擬機器——垃圾收集記憶體分配策略讀書筆記

判斷物件是否存活 1、引用計數法 給物件新增一個引用計數器,每當有一個地方引用它時,計數器值加1,當引用失效時,計數器值減1, 任何時刻計數器為0的物件就是不可能再被使用的。 缺點:不能解決物件之間迴圈引用的問題 2、根搜尋演算法(GC Roots Tracing)

JVM垃圾收集記憶體分配策略總結自《深入理解Java虛擬機器》

1、物件可用性判斷 垃圾收集器在回收物件前,需要判斷哪些物件沒有被廢棄,哪些物件已經廢棄了(即無法通過任何途徑使用的物件)。所以,垃圾收集器需要一種演算法來判定這個物件是否需要回收。 (1)引用計數演算法 引用計數演算法的基本思想是給一個物件新增一個引用計數器,

深入理解Java虛擬機器總結一垃圾收集記憶體分配策略()

深入理解Java虛擬機器總結一垃圾收集器與記憶體分配策略(二) 垃圾回收概述 如何判定物件為垃圾物件 垃圾回收演算法 垃圾收集器詳解 記憶體分配策略 垃圾回收概述 如何判定物件為垃圾物件 引用計數法: 在物件

第三章垃圾收集記憶體分配策略

3.2物件死亡的判斷方法 3.2.1引用計數法 給物件新增一個引用計數器,每當一個地方引用它就+1,引用失效就-1,當計數器為0時就表示物件已經死亡。 缺點是無法解決迴圈引用問題 3.2.2可達性分析 將GC root作為根節點向下遍歷,無法遍歷到的物件(GC Root到這個物件不可達)就表示該物件

《深入理解JAVA虛擬機器》詳細解讀第三章 垃圾收集記憶體分配策略

  目錄 一、垃圾收集器與記憶體分配策略 1 概述 2 物件已經死亡? 2.1引用計數法(未使用) 2.2可達性分析演算法 2.3 再談引用 2.4 生存還是死亡 2.5 回收方法區 3 垃圾收集演算法 3.1 複製演算法(Copy) 3

Java虛擬機器筆記-1Java技術體系&自動記憶體管理機制&記憶體區域記憶體溢位&垃圾收集記憶體分配策略

世界上沒有完美的程式,但寫程式是不斷追求完美的過程。 Devices(裝置、裝置)、GlassFish(商業相容應用伺服器) 目錄 1. Java技術體系包括: Java技術體系的4個平臺 虛擬機器分類 HotSpot VM 模組化、混合程式設計 多核並行

JAVA垃圾收集記憶體分配策略

3.1 概述 LISP是第一門使用記憶體動態分配和垃圾收集技術的語言。 CG需要完成的三件事: 1、哪些記憶體需要回收? 2、什麼時候回收? 3、如何回收? JAVA堆和方法區中,一個介面中的多個實現類需要的記憶體可能不一樣,一個方法中的多個分支需要的記憶體也不一

JVM(三) 垃圾收集記憶體分配策略

一 重點關注的資料區域: 堆 和 方法區 Java記憶體執行時區域中的程式計數器、虛擬機器棧、本地方法棧3個區域隨執行緒生,隨執行緒滅;每 一個棧幀中分配多少記憶體是在類結構確定下來就已知的,因此這幾個區域的記憶體分配和回收都 具備確定性. 二 垃圾回收

垃圾收集記憶體分配策略——垃圾收集演算法HotSpot虛擬機器演算法實現

垃圾收集演算法的具體實現涉及大量的程式細節,這裡只描述其演算法的基本思想和發展過程 一、常見的垃圾收集演算法對比如下 收集演算法 具體實現 優點 不足 標記-清除演算法 1、首先標記出所有需要回收的物件 2、標記完成之後,統一回

深入理解JVM讀書筆記垃圾收集記憶體分配策略

一、判斷物件死亡的兩種常用演算法:                在堆裡面存放著java世界中幾乎所有的例項物件,垃圾收集器在堆進行回收前,第一件事情就是要確定哪些物件還存活著,哪些已經死去。 1、引

jdk原始碼分析——垃圾收集記憶體分配策略

本章介紹的垃圾收集器與記憶體分配策略主要就三點。 第一點:垃圾收集(垃圾回收)。問題:哪些記憶體需要回收?什麼時候回收?如何回收? 第二點:介紹垃圾收集器。問題:有幾種型別是垃圾收集器?根據第一點的介紹,屬於那種型別的? 第三點:記憶體分配。問題:怎麼分配的? 一、垃

【深入理解JVM虛擬機器】第3章 垃圾收集記憶體分配策略

3.1 概述 垃圾收集(Garbage Collection , GC)的歷史遠遠比Java久遠。它需要完成三件事: 哪些記憶體需要回收 什麼時候回收 如何回收 程式計數器、虛擬機器棧、本地

垃圾收集記憶體分配策略

上一篇主要講解的是JVM記憶體管理,記憶體分割槽,在本篇部落格中主要講解的是垃圾收集器以及記憶體分配策略。 1、概述        JAVA語言中,JVM記憶體管理都是“自動化”的,為啥還需要繼續關注JVM記憶體管理呢?原因很簡單,JVM記憶體管理不是

第三章 垃圾收集記憶體分配策略

3.1 概述       1960年誕生的Lisp是第一門真正使用記憶體動態分配和垃圾收集技術的語言。程式計數器、虛擬機器棧、本地方法棧三個區域隨執行緒而生,隨執行緒而滅;棧中的棧幀隨著方法的進入和退出而有條不紊的執行著出棧和入棧操作。每一個棧幀中分配多少記憶體基本上是在類

JVM 第3章垃圾收集記憶體分配策略

1 概述 程式計數器、虛擬機器棧、本地方法棧這3個區域隨執行緒而生,隨執行緒而滅。每個棧幀中分配多少記憶體基本是在類結構確定下來時就已知的,因此這幾個區域的記憶體分配和回收都具備確定性。而java堆和方法區是執行緒共享的記憶體,且一個介面中的多個實現類需要的記憶體可能不一樣,一個方法中的