zoukankan      html  css  js  c++  java
  • 方法区(Method Area)基础知识

    堆、栈、方法区堆关系

    概述

    • 方法区与堆区一样,是各个线程共享的内存区域

    • 方法区在JVM启动时就会被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的

    • 方法区的大小,跟堆空间一样,可以选择固定大小或者可拓展

    • 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:java.lang.OutOfMemoryError:PermGen space 或者 java.lang,OutOfMemoryError:Metaspace,比如:关闭JVM就会释放这个区域的内存

      • 加载大量的第三方jar包

      • Tomcat部署的工程过多

      • 大量动态生成反射类

    • 在jdk7及以前,习惯上把方法区称为永久代,jdk8开始,使用元空间取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代最大的区别在于:元空间不再虚拟机设置的内存中,而是使用本地内存

    • 本质上,方法区和永久代并不等价。仅是对hotSpot而言的。《java虚拟机规范》对如何实现方法区,不做统一要求。例如:BEA JRockit/IBM J9中不存在永久代的概念

    • 使用永久代,会导致Java程序更容易OOM(超过-XX:MaxPermSize上限)

    (Java7和Java8在方法区的实现)

    附:JVM学习目录

  • 相关阅读:
    mysql执行顺序及习题
    多表查询
    PyQt5-03-信号与槽
    PyQt5-01-安装及简单例子
    252.anaconda升级版本
    251.anaconda下载资源包慢
    250.anaconda+vscode
    61.基础语法-函数式编程
    60.基础语法-异常的处理
    59.语法基础-包
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13084890.html
Copyright © 2011-2022 走看看