摘要:概念方法區(qū)是虛擬機(jī)規(guī)范定義的,是所有線程共享的內(nèi)存區(qū)域,保存系統(tǒng)的類的信息。比如類的字段方法常量池構(gòu)造函數(shù)的字節(jié)碼內(nèi)容代碼代碼永久代是對(duì)方法區(qū)的實(shí)現(xiàn)。
概念
方法區(qū)是虛擬機(jī)規(guī)范定義的,是所有線程共享的內(nèi)存區(qū)域,保存系統(tǒng)的類的信息。比如:類的字段、方法、常量池、構(gòu)造函數(shù)的字節(jié)碼內(nèi)容、代碼、JIT 代碼
永久代、metaspace 是對(duì)方法區(qū)的實(shí)現(xiàn)。
Hotspot 實(shí)行分代管理內(nèi)存(新生代、老年代、永久代)
jdk8 實(shí)現(xiàn)方法區(qū)用 metaspace 堆外內(nèi)存
方法區(qū)溢出虛擬機(jī)參數(shù):
jdk1.7
-XX:PermSize=5M -XX:MaxPermSize=10M
jdk1.8
-XX:MaxMetaspaceSize=150M
代碼
package com.mousycoder.mycode.thinking_in_jvm; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * 方法區(qū)溢出 * * @version 1.0 * @author: mousycoder * @date: 2019-06-22 15:44 */ public class PermgenOOM { public static void main(String[] args) throws InterruptedException { int i = 0; while (true) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(User.class); enhancer.setUseCache(false); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { return methodProxy.invokeSuper(o,objects); } }); enhancer.create(); Thread.sleep(1000); } } } class User { private long id; private String name; }
jdk1.7
jdk1.8
感謝您的耐心閱讀,如果您發(fā)現(xiàn)文章中有一些沒表述清楚的,或者是不對(duì)的地方,請(qǐng)給我留言,您的鼓勵(lì)是作者寫作最大的動(dòng)力。
作 者 : @mousycoder
原文出處 : http://mousycoder.com/thinking-in-jvm/9/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75434.html
摘要:一內(nèi)存區(qū)域虛擬機(jī)在運(yùn)行時(shí),會(huì)把內(nèi)存空間分為若干個(gè)區(qū)域,根據(jù)虛擬機(jī)規(guī)范版的規(guī)定,虛擬機(jī)所管理的內(nèi)存區(qū)域分為如下部分方法區(qū)堆內(nèi)存虛擬機(jī)棧本地方法棧程序計(jì)數(shù)器。前言 在JVM的管控下,Java程序員不再需要管理內(nèi)存的分配與釋放,這和在C和C++的世界是完全不一樣的。所以,在JVM的幫助下,Java程序員很少會(huì)關(guān)注內(nèi)存泄露和內(nèi)存溢出的問題。但是,一旦JVM發(fā)生這些情況的時(shí)候,如果你不清楚JVM內(nèi)存的...
摘要:虛擬機(jī)性能監(jiān)控與故障處理工具詳解概述本文參考的是周志明的深入理解虛擬機(jī)第四章,為了整理思路,簡單記錄一下,方便后期查閱。虛擬機(jī)堆轉(zhuǎn)儲(chǔ)快照分析工具功能用于分析生成的。 虛擬機(jī)性能監(jiān)控與故障處理工具 詳解 4.1 概述 本文參考的是周志明的 《深入理解Java虛擬機(jī)》 第四章 ,為了整理思路,簡單記錄一下,方便后期查閱。 JDK本身提供了很多方便的JVM性能調(diào)優(yōu)監(jiān)控工具,除了集成式的Vis...
摘要:運(yùn)行時(shí)數(shù)據(jù)區(qū)域的學(xué)習(xí),是學(xué)習(xí)以及機(jī)制的基礎(chǔ),也是深入理解對(duì)象創(chuàng)建及運(yùn)行過程的前提。了解內(nèi)存區(qū)域劃分,是學(xué)習(xí)概念的前提。 Java 運(yùn)行時(shí)數(shù)據(jù)區(qū)域的學(xué)習(xí),是學(xué)習(xí) jvm 以及 GC 機(jī)制的基礎(chǔ),也是深入理解 java 對(duì)象創(chuàng)建及運(yùn)行過程的前提。廢話不多說,直接進(jìn)入正題: 一張圖總結(jié) showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...
摘要:堆內(nèi)存的劃分在里面的示意圖垃圾回收一判斷對(duì)象是否要回收的方法可達(dá)性分析法可達(dá)性分析法通過一系列對(duì)象作為起點(diǎn)進(jìn)行搜索,如果在和一個(gè)對(duì)象之間沒有可達(dá)路徑,則稱該對(duì)象是不可達(dá)的。 工作之余,想總結(jié)一下JVM相關(guān)知識(shí)。 Java運(yùn)行時(shí)數(shù)據(jù)區(qū): Java虛擬機(jī)在執(zhí)行Java程序的過程中會(huì)將其管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域,這些區(qū)域有各自的用途、創(chuàng)建和銷毀的時(shí)間,有些區(qū)域隨虛擬機(jī)進(jìn)程的啟動(dòng)而...
摘要:而字節(jié)碼運(yùn)行在之上,所以不用關(guān)心字節(jié)碼是在哪個(gè)操作系統(tǒng)編譯的,只要符合規(guī)范,那么,這個(gè)字節(jié)碼文件就是可運(yùn)行的。好處防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼安全性角度特別說明類加載器在成功加載某個(gè)類之后,會(huì)把得到的類的實(shí)例緩存起來。 前言 只有光頭才能變強(qiáng) JVM在準(zhǔn)備面試的時(shí)候就有看了,一直沒時(shí)間寫筆記?,F(xiàn)在到了一家公司實(shí)習(xí),閑的時(shí)候就寫寫,刷刷JVM博客,刷刷電子書。 學(xué)習(xí)JVM的目的也很簡單...
閱讀 1164·2021-11-24 09:39
閱讀 3632·2021-09-02 15:21
閱讀 2173·2021-08-24 10:01
閱讀 735·2021-08-19 10:55
閱讀 2458·2019-08-30 15:55
閱讀 1218·2019-08-30 14:16
閱讀 3001·2019-08-29 15:17
閱讀 3242·2019-08-29 13:53