摘要:概念方法區(qū)是虛擬機規(guī)范定義的,是所有線程共享的內存區(qū)域,保存系統(tǒng)的類的信息。比如類的字段方法常量池構造函數(shù)的字節(jié)碼內容代碼代碼永久代是對方法區(qū)的實現(xiàn)。
概念
方法區(qū)是虛擬機規(guī)范定義的,是所有線程共享的內存區(qū)域,保存系統(tǒng)的類的信息。比如:類的字段、方法、常量池、構造函數(shù)的字節(jié)碼內容、代碼、JIT 代碼
永久代、metaspace 是對方法區(qū)的實現(xiàn)。
Hotspot 實行分代管理內存(新生代、老年代、永久代)
jdk8 實現(xiàn)方法區(qū)用 metaspace 堆外內存
方法區(qū)溢出虛擬機參數(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)文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,您的鼓勵是作者寫作最大的動力。
作 者 : @mousycoder
原文出處 : http://mousycoder.com/thinking-in-jvm/9/
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/75434.html
摘要:一內存區(qū)域虛擬機在運行時,會把內存空間分為若干個區(qū)域,根據(jù)虛擬機規(guī)范版的規(guī)定,虛擬機所管理的內存區(qū)域分為如下部分方法區(qū)堆內存虛擬機棧本地方法棧程序計數(shù)器。前言 在JVM的管控下,Java程序員不再需要管理內存的分配與釋放,這和在C和C++的世界是完全不一樣的。所以,在JVM的幫助下,Java程序員很少會關注內存泄露和內存溢出的問題。但是,一旦JVM發(fā)生這些情況的時候,如果你不清楚JVM內存的...
摘要:虛擬機性能監(jiān)控與故障處理工具詳解概述本文參考的是周志明的深入理解虛擬機第四章,為了整理思路,簡單記錄一下,方便后期查閱。虛擬機堆轉儲快照分析工具功能用于分析生成的。 虛擬機性能監(jiān)控與故障處理工具 詳解 4.1 概述 本文參考的是周志明的 《深入理解Java虛擬機》 第四章 ,為了整理思路,簡單記錄一下,方便后期查閱。 JDK本身提供了很多方便的JVM性能調優(yōu)監(jiān)控工具,除了集成式的Vis...
摘要:運行時數(shù)據(jù)區(qū)域的學習,是學習以及機制的基礎,也是深入理解對象創(chuàng)建及運行過程的前提。了解內存區(qū)域劃分,是學習概念的前提。 Java 運行時數(shù)據(jù)區(qū)域的學習,是學習 jvm 以及 GC 機制的基礎,也是深入理解 java 對象創(chuàng)建及運行過程的前提。廢話不多說,直接進入正題: 一張圖總結 showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...
摘要:堆內存的劃分在里面的示意圖垃圾回收一判斷對象是否要回收的方法可達性分析法可達性分析法通過一系列對象作為起點進行搜索,如果在和一個對象之間沒有可達路徑,則稱該對象是不可達的。 工作之余,想總結一下JVM相關知識。 Java運行時數(shù)據(jù)區(qū): Java虛擬機在執(zhí)行Java程序的過程中會將其管理的內存劃分為若干個不同的數(shù)據(jù)區(qū)域,這些區(qū)域有各自的用途、創(chuàng)建和銷毀的時間,有些區(qū)域隨虛擬機進程的啟動而...
摘要:而字節(jié)碼運行在之上,所以不用關心字節(jié)碼是在哪個操作系統(tǒng)編譯的,只要符合規(guī)范,那么,這個字節(jié)碼文件就是可運行的。好處防止內存中出現(xiàn)多份同樣的字節(jié)碼安全性角度特別說明類加載器在成功加載某個類之后,會把得到的類的實例緩存起來。 前言 只有光頭才能變強 JVM在準備面試的時候就有看了,一直沒時間寫筆記。現(xiàn)在到了一家公司實習,閑的時候就寫寫,刷刷JVM博客,刷刷電子書。 學習JVM的目的也很簡單...
閱讀 1216·2021-11-24 09:39
閱讀 3685·2021-09-02 15:21
閱讀 2231·2021-08-24 10:01
閱讀 779·2021-08-19 10:55
閱讀 2499·2019-08-30 15:55
閱讀 1280·2019-08-30 14:16
閱讀 3079·2019-08-29 15:17
閱讀 3301·2019-08-29 13:53