1. 程式人生 > >jvm-方法區

jvm-方法區

jvm方法區(Method Area)

當jvm使用類裝載器裝在某個類時,它首先要定位到對應的class檔案,然後讀入這個class檔案,最後提取該檔案的內容資訊,並將這些資訊儲存到方法去,最後返回一個class例項。

方法區是系統分配的一個記憶體邏輯區域,是一塊所有執行緒共享的記憶體區域,用來儲存型別資訊(型別資訊可以理解為類的描述資訊(類的全限定名,訪問修飾符,欄位,方法等)),方法區的大小決定了系統可以包含多少個類,如果系統類太多,方法區記憶體不夠會導致方法區溢位,虛擬機器同樣會丟擲記憶體溢位資訊。方法去特點:

1.方法區是執行緒安全的,由於所有的執行緒都共享方法區,所以方法區裡的資料訪問必須被設計成執行緒安全的。例如,假如同時有兩個執行緒都企圖訪問方法區中的同一個類,而這個類還沒有被裝入jvm,那麼只允許一個執行緒去裝在它,而其他執行緒必須等待。

2.方法去的大小不必是固定的,jvm可根據應用需要動態調整,同時,方法區也不一定是連續的,方法區可以在一個堆(甚至是jvm自己的堆)中自由分配。

3.方法區也可被垃圾收集,當某個類不在被使用時,jvm將解除安裝這個類,進行垃圾收集。

方法區存放內容:

1.類的全限定名(類的全路徑名)。

2.類的直接超類的權全限定名(如果這個類是Object,則它沒有超類)。

3.類的型別(類或介面)。

4.類的訪問修飾符,public,abstract,final等。

5.類的直接介面全限定名的有序列表。

6.常量池(欄位,方法資訊,靜態變數,型別引用(class))等

類變數:

類變數為靜態變數,在方法去中有個靜態去,靜態去專門用來存放靜態變數以及靜態塊。

方法區記憶體大小設定:

jdk1.6,jdk1.7 永久區

-XX:PermSize=10M 初始化方法區大小為10M。

-XX:MaxPermSize 方法區最大記憶體為10M。

-XX:PrintGCDetails 列印日誌詳情。

jdk1.8 元資料區

-XX:MetaspaceSize=10M

-XX:MaxMetaspaceSize=10M

元資料區發生溢位,虛擬機器一樣丟擲異常,如下:

java.lang.OutOfMemoryError Metaspace

相關推薦

JVM:方法可以GC嗎?

方法區和堆一樣,都是執行緒共享的記憶體區域,被用於儲存已被虛擬機器載入的類資訊、即時編譯後的程式碼、靜態變數和常量等資料。   根據Java虛擬機器規範的規定,方法區無法滿足記憶體分配需求時,也會丟擲OutOfMemoryError異常,雖然規範規定虛擬機器可以不實現垃圾收集,

jvm-方法

jvm方法區(Method Area) 當jvm使用類裝載器裝在某個類時,它首先要定位到對應的class檔案,然後讀入這個class檔案,最後提取該檔案的內容資訊,並將這些資訊儲存到方法去,最後返回一個class例項。 方法區是系統分配的一個記憶體邏輯區域,是一塊所有執行緒

JVM方法記憶體分配

方法區記憶體 -XX:PermSize 設定初始化方法區記憶體 -XX:MaxPermSize 設定最大方法區,也稱永久區的記憶體 預設情況下,為64M 方法區 一塊所有執行緒共享的記

java虛擬機器 jvm 方法實戰

和java堆一樣,方法區是一塊所有執行緒共享的記憶體區域,用於儲存系統的類資訊,類的資訊有哪些呢。欄位、方法、常量池。方法區也有一塊記憶體區域所以方法區的記憶體大小,決定了系統可以包含多少個類,如果系

JVM內存—堆(heap)棧(stack)方法(method) (轉)

定位 箭頭 環境 構造方法 做的 語言 .com jvm的內存 系列 JAVA的JVM的內存可分為3個區:堆(heap)、棧(stack)和方法區(method) 堆區:1.存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令)

對於JVM方法,永久代,元空間以及字符串常量池的遷移和string.intern方法

ase ane 虛擬機 影響 一個 tle 自定義類加載器 機器 img 在Java虛擬機(以下簡稱JVM)中,類包含其對應的元數據,比如類的層級信息,方法數據和方法信息(如字節碼,棧和變量大小),運行時常量池,已確定的符號引用和虛方法表。 在過去(當自定義類加載器使用

java虛擬機 jvm java堆 方法 java棧

相同 分享 就會 例如 content == 不同的 avi 管理 java堆是java應用程序最密切的內存空間。差點兒全部的對象都存在堆中。java堆全然自己主動化管理,通過垃圾回收機制,垃圾對象會自己主動清理。不須要顯式釋放。 依據java垃圾回收機制的不同。

03-JVM內存模型:堆與方法

java方法 str2 模型 stat -c oid lan pre meta 一、堆(Heap) 1.1.什麽是堆   堆是用於存放對象的內存區域。因此,它是垃圾收集器(GC)管理的主要目標。其具有以下特點: 堆在邏輯上劃分為“新生代”和“老年代”。由於JAVA中的對

jvm內存模型中-棧,方法,程序計數器是線程安全的

如同 其它 必須 lan tro 應用 之前 信息 大小 文章轉自 https://www.cnblogs.com/myna/p/7567889.html 引文 JDK7及之前版本的方法區(Method Area)和Java堆一樣,是各個線程共享的內存區域,用於存

JVM記憶體中的堆疊、堆、方法

堆疊、堆、方法區 JAVA的JVM的記憶體可分為3個區:堆(heap)、堆疊(stack)和方法區(method) 堆區:(例如:存放成員變數,又稱例項變數) 提供所有類例項和陣列物件儲存區域。 jvm只有一個堆區(heap)被所有執行緒共享,堆中不存放基本型別和物件引用,只

jvm虛擬機器初識(堆,棧,方法

堆(FIFO先進先出): 存放的是物件也就是new 的資訊也包括class物件,每new一個資訊,就會為物件分配堆記憶體區域,堆分配了物件的空間,當垃圾回收器檢測到某物件未被引用,則自動銷燬該物件,如果忘記銷燬物件,那麼它的記憶體空間還在。就會導致記憶體洩漏。- 和程式開發密切相關

JVM堆記憶體、方法和棧記憶體的關係

以下程式碼展示Java堆記憶體、方法區和Java棧記憶體之間的關係 package cn.liang.jvm; public class SimpleHeap { private int id; public SimpleHeap(int id){ this.id = id;

JVM執行時資料-方法

基本概念      在hotspot jvm實現當中,在jdk8以前,方法區的實現為PermGen,即永久代,主要存放類的資訊,方法的資訊,常量池,靜態變數,符號解析;而jdk8+,則去除了PermGen,使用元空間MetaSpace代替,元空間使用的

目錄 1.1. JVM記憶體模型總體架構圖 1 1.2. JAVA堆 2 1.3. 方法 元空間(Metaspace) 2 1.4. 虛擬機器棧 3 1.5. 本地方法 4 2. 垃圾回收演算法 4 2

目錄 1.1. JVM記憶體模型總體架構圖 1 1.2. JAVA堆 2 1.3. 方法區 元空間(Metaspace) 2 1.4. 虛擬機器棧 3 1.5. 本地方法區 4 2. 垃圾回收演算法 4 2.1. 標記-清除演算法(Mark-Sweep) 4

JVM 記憶體初學 (堆(heap)、棧(stack)和方法(method) )

先了解具體的概念: JAVA的JVM的記憶體可分為3個區:堆(heap)、棧(stack)和方法區(method) 堆區: 1.儲存的全部是物件,每個物件都包含一個與之對應的class的資訊。(class的目的是得到操作指令) 2.jvm只有一個堆區(heap)被所有執行緒

Jvm堆、棧、方法理解

堆解決的是資料儲存問題,即資料怎麼放,資料放哪。 棧解決程式的執行問題,即程式如何執行,或者說如何處理資料。 方法區則是輔助棧的一塊永久區(perm),解決堆疊資訊的產生,是先決條件。 堆 java

JVM方法和永久帶的關係

群裡面有小夥伴問到這個問題,說在網上看了很多文章,但是還是沒弄明白這倆是啥關係,下面我們就來詳細的解釋一下: 什麼是方法區? 方法區(Method Area)是jvm規範裡面的執行時資料區的一個組成部分,jvm規範中的執行時資料區還包含了:pc暫存器、虛擬機器棧、

JVM 記憶體模型:方法(Method Area)

1. 前言 最近在研究Java語言底層基礎知識,發現對於JVM 記憶體模型理解不夠深入。筆者突發奇想深入理解JVM記憶體模型,特在此介紹詳細介紹一下JVM記憶體模型中的方法區。看似名稱叫做方法區,其實不然。它存放了一些類載入基本資訊、常量、靜態變數以及編譯後的程式碼等資料。下面我們來詳細

JVM——記憶體模型(三):堆與方法

前兩篇部落格我們認識了程式計數器、虛擬機器棧與本地方法棧。今天我們來一起認識一下堆與方法區。 關於堆記憶體,我之前有寫過一篇關於堆外記憶體的部落格,裡面有詳細介紹堆記憶體。這裡為了觀看方便,就直接把關於堆內記憶體的部分拿過來咯。(想了解堆內記憶體與堆外記憶體的夥伴們,可以參考:Java——堆外記

JVM記憶體結構------堆,棧,方法,以及堆和棧的區別

一 、 定義 堆:FIFO佇列優先,先進先出。JVM只有一個堆區被所有執行緒所共享!堆存放在耳機快取中,呼叫物件的速度相對慢一些,生命週期由JVM的垃圾回收機制定。 棧:FILO先進後出,暫存資料的地方。每個執行緒都包含一個棧區!棧存放在一級快取中,存取速度較快,“棧是限定