资讯专栏INFORMATION COLUMN

【深入浅出-JVM】(9): 方法区

BigTomato / 1422人阅读

摘要:概念方法区是虚拟机规范定义的,是所有线程共享的内存区域,保存系统的类的信息。比如类的字段方法常量池构造函数的字节码内容代码代码永久代是对方法区的实现。

概念

方法区是虚拟机规范定义的,是所有线程共享的内存区域,保存系统的类的信息。比如:类的字段、方法、常量池、构造函数的字节码内容、代码、JIT 代码

永久代、metaspace 是对方法区的实现。

Hotspot 实行分代管理内存(新生代、老年代、永久代)

jdk8 实现方法区用 metaspace 堆外内存

方法区溢出

虚拟机参数:

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;



/**

 * 方法区溢出

 * 

 * @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

感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写作最大的动力。

作 者 : @mousycoder

原文出处 : http://mousycoder.com/thinking-in-jvm/9/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75434.html

相关文章

  • JVM系列(一):深入详解JVM 内存域总结!

    摘要:一内存区域虚拟机在运行时,会把内存空间分为若干个区域,根据虚拟机规范版的规定,虚拟机所管理的内存区域分为如下部分方法区堆内存虚拟机栈本地方法栈程序计数器。前言 在JVM的管控下,Java程序员不再需要管理内存的分配与释放,这和在C和C++的世界是完全不一样的。所以,在JVM的帮助下,Java程序员很少会关注内存泄露和内存溢出的问题。但是,一旦JVM发生这些情况的时候,如果你不清楚JVM内存的...

    Aldous 评论0 收藏0
  • 深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具

    摘要:虚拟机性能监控与故障处理工具详解概述本文参考的是周志明的深入理解虚拟机第四章,为了整理思路,简单记录一下,方便后期查阅。虚拟机堆转储快照分析工具功能用于分析生成的。 虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 《深入理解Java虚拟机》 第四章 ,为了整理思路,简单记录一下,方便后期查阅。 JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的Vis...

    gself 评论0 收藏0
  • 深入理解java虚拟机》学习笔记系列——java内存域划分

    摘要:运行时数据区域的学习,是学习以及机制的基础,也是深入理解对象创建及运行过程的前提。了解内存区域划分,是学习概念的前提。 Java 运行时数据区域的学习,是学习 jvm 以及 GC 机制的基础,也是深入理解 java 对象创建及运行过程的前提。废话不多说,直接进入正题: 一张图总结 showImg(https://segmentfault.com/img/bVOMAn?w=685&h=5...

    史占广 评论0 收藏0
  • JVM 完整深入解析

    摘要:堆内存的划分在里面的示意图垃圾回收一判断对象是否要回收的方法可达性分析法可达性分析法通过一系列对象作为起点进行搜索,如果在和一个对象之间没有可达路径,则称该对象是不可达的。 工作之余,想总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而...

    shenhualong 评论0 收藏0
  • 学习JVM是如何从入门到放弃的?

    摘要:而字节码运行在之上,所以不用关心字节码是在哪个操作系统编译的,只要符合规范,那么,这个字节码文件就是可运行的。好处防止内存中出现多份同样的字节码安全性角度特别说明类加载器在成功加载某个类之后,会把得到的类的实例缓存起来。 前言 只有光头才能变强 JVM在准备面试的时候就有看了,一直没时间写笔记。现在到了一家公司实习,闲的时候就写写,刷刷JVM博客,刷刷电子书。 学习JVM的目的也很简单...

    Joyven 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<