方法區(永久代)的垃圾回收
方法區在HotSpot中也被成為永久代,該部分垃圾收集的效率比較低。
永久代主要針對廢棄常量和無用的類兩部分內容進行回收。
廢棄常量的回收:以常量池中字面量的回收為例,在當前系統中沒有任何地方引用某個字面量時,那麼如果此時發生垃圾回收,而且必要的話,該字面常量將會被回收掉。常量池中的其他類(介面),方法,欄位的符號引用的回收與此類似。
無用的類:同時滿足下面三個條件的類,才可以被回收,但是僅僅是可以,並非不使用了必然會回收,受虛擬機器引數控制。
1. 該類所有的例項都已經被回收,也就是Java堆中不存在該類的任何例項。
2. 載入類的ClassLoader已經被回收。
3. 該類對應的java.lang.Class物件沒有在任何地方被引用,無法在任何地方通過發射訪問該類的方法。
在大量使用反射、動態代CGLib等ByteCode框架、動態生成JSP以及OSGI這類頻繁自定義ClassLoader的場景都需要虛擬機器具備類解除安裝的功能,以保證永久代不會溢位。
相關推薦
方法區(永久代)的垃圾回收
方法區在HotSpot中也被成為永久代,該部分垃圾收集的效率比較低。 永久代主要針對廢棄常量和無用的類兩部分內容進行回收。 廢棄常量的回收:以常量池中字面量的回收為例,在當前系統中沒有任何地方引用某個字面量時,那麼如果此時發生垃圾回收,而且必要的話,該字面常量將會被回收掉
java GC 棧(虛擬機器棧,本地方法棧),堆(新生代、老年代), 方法區(永久帶)等引數配置
-Xms 初始堆大小。如:-Xms256m -Xmx 最大堆大小。如:-Xmx512m -Xmn 新生代大小。通常為 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 個 Su
對於JVM中方法區,永久代,元空間以及字符串常量池的遷移和string.intern方法
ase ane 虛擬機 影響 一個 tle 自定義類加載器 機器 img 在Java虛擬機(以下簡稱JVM)中,類包含其對應的元數據,比如類的層級信息,方法數據和方法信息(如字節碼,棧和變量大小),運行時常量池,已確定的符號引用和虛方法表。 在過去(當自定義類加載器使用
JVM 記憶體模型:方法區(Method Area)
1. 前言 最近在研究Java語言底層基礎知識,發現對於JVM 記憶體模型理解不夠深入。筆者突發奇想深入理解JVM記憶體模型,特在此介紹詳細介紹一下JVM記憶體模型中的方法區。看似名稱叫做方法區,其實不然。它存放了一些類載入基本資訊、常量、靜態變數以及編譯後的程式碼等資料。下面我們來詳細
JVM中的方法區(Method Area)
下面我們描述一下main()方法的第一條指令的位元組碼是如何被執行的。不同的JVM實現的差別很大,這裡只是可能的其中之一的情形。 為了執行這個程式,你以某種方式把“Volcano”傳給了JVM。有了這個名字,JVM找到了這個類檔案(Volcano.class)並讀入,它從類檔案提取了型別
對比Ruby和Python的垃圾回收(2):代式垃圾回收機制
上週,我根據之前在RuPy上做的一個名為“Visualizing Garbage Collection in Ruby and Python.”的報告寫了這篇文章的上半部分。在上篇中,我解釋了標準Ruby(也被稱為Matz的Ruby直譯器或是MRI)是如何使用名為
JVM 之(4)垃圾回收演算法(標記 -清除、複製、標記-整理、分代收集)
1、標記 -清除演算法(Mark-Sweep)“標記-清除”演算法,如它的名字一樣,演算法分為“標記”和“清除”兩個階段:首先標記出所有需要回收的物件,在標記完成後統一回收掉所有被標記的物件。之所以說它是最基礎的收集演算法,是因為後續的收集演算法都是基於這種思路並對其缺點進行
(一)Python入門-6面向對象編程:04__del__方法(析構函數)和垃圾回收機制-__call__方法和可調用對象
int 例如 垃圾回收 編程 nth object () 語句 計數 一:__del__方法(析構函數)和垃圾回收機制 __del__方法稱為“析構方法”,用於實現對象被銷毀時所需的操作。比如:釋放對象 占用的資源,例如:打開的文件資源、網絡連
JVM內存—堆(heap)棧(stack)方法區(method) (轉)
定位 箭頭 環境 構造方法 做的 語言 .com jvm的內存 系列 JAVA的JVM的內存可分為3個區:堆(heap)、棧(stack)和方法區(method) 堆區:1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)
Java棧,PC寄存器,本地方法棧,堆,方法區(靜態區)和運行常量池
局部變量 fan log 變量 實例 分析 創建 china java棧 https://my.oschina.net/wangsifangyuan/blog/711329 前言:當要判斷一個變量存在什麽空間上時,先分析它是哪一種(是實例變量還是局部變量),實例變量存在於所
JVM(二)—— 垃圾回收
class 隨著 策略 兩種 oid 獨立 內存管理 最大 就會 垃圾回收 垃圾回收主要解決三個問題(回收哪些Which,什麽時候回收WHEN,如何回收HOW) 一、回收哪些 這三個問題,最主要的還是第一個,Which回收哪些,評斷回收還是不回收的標準是看對象是否被引用 引
JVM調優總結(三)-垃圾回收面臨的問題
也會 直接 問題 行程 完成 情況 出現 基本類型 不能 如何區分垃圾 上面說到的“引用計數”法,通過統計控制生成對象和刪除對象時的引用數來判斷。垃圾回收程序收集計數為0的對象即可。但是這種方法無法解決循環引用。所以,後來實現的垃圾判斷算法
深入拆解虛擬機器(九)垃圾回收(下)
堆記憶體劃分 Java虛擬機器將堆分為新生代和老年代,並且對不同代採用不同的垃圾回收演算法。其中,新生代分為Eden區和兩個大小一致的Survivor區,並且其中一個Survivor區是空的 Minor GC (1)在只針對新生代的Minor GC中,Eden區和非S空
深入拆解虛擬機器(八)垃圾回收(上)
引用計數法 (1)它的做法是為每個物件新增一個引用計數器,用來統計指向該物件的引用個數。一旦某個物件 的引用計數器為0,則說明該物件已經死亡,便可以被回收了。 (2)具體實現:如果有一個引用,被賦值為某一個物件,那麼該物件的引用計數器+1。如果指向某一個物件的引用,被賦值為其他值
《深入理解java虛擬機器》讀書筆記(三)---- 垃圾回收演算法及垃圾收集器介紹
一、垃圾回收演算法 1、標記--清除演算法 標記--清除(Mark-Sweep)演算法,分為標記和清除兩個階段,首先標記出所有需要回收的物件,在標記完成後統一回收所有被標記的物件,這是最基礎的收集演算法,後續很多演算法都是基於這種思想進行設計的。 標記--清除演算法主要的不足有兩點:一個
php垃圾回收機制(PHP新的垃圾回收機制:Zend GC詳解)
概述 在5.2及更早版本的PHP中,沒有專門的垃圾回收器GC(Garbage Collection),引擎在判斷一個變數空間是否能夠被釋放的時候是依據這個變數的zval的refcount的值,如果refcount為0,那麼變數的空間可以被釋放,否則就不釋放,這是一種
詳解JVM中堆、棧、方法區(對象、值)是如何調用執行的
沒有 自定義 成了 coo 裏的 原始類型 元素 動手 完成 這兩天看了一下深入淺出JVM這本書,推薦給高級的java程序員去看,對你了解JAVA的底層和運行機制有比較大的幫助。 先了解具體的概念:JAVA的JVM的內存可分為3個區:堆(heap)、棧(stack)和方法區
Java 虛擬機器學習筆記(3)——垃圾回收機制
一. 為什麼需要“垃圾”回收 1.什麼是“垃圾”? 此處講的“垃圾”分為兩種: 廢棄常量和無用的類。 廢棄常量,主要是判斷當前系統中有沒有物件引用這個常量; 無用類則比較嚴格,需要滿足下面三個條件: (1)該類的
性能測試三十四:jvm內存結構(棧、堆、永久代)
內容 清理 配置 線程 通過 棧內存 所有 不足 會有 Java內存管理機制 Java采用了自動管理內存的方式Java程序是運行在Jvm之中的Java的跨平臺的基於Jvm的跨平臺特性內存的分配和對象的創建是在Jvm中用戶可以通過一系列參數來配置Jvm Jvm運行
方法區(關於java虛擬機器記憶體的那些事)
《深入理解 java 虛擬機器》 讀書擴充套件 作者:淮左白衣 寫於 2018年4月13日21:26:05 目錄 方法區 儲存在著被載入過的每一個類的資訊;這些資訊由類載入器在載入類的時候,從類的原始檔中抽取出來;static變