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学习目录

  • 相关阅读:
    使用js获取表单元素的值
    分页问题
    空值转换问题
    MySQL数据库操作基础
    二叉树DFS遍历递归和非递归做法
    BFS经典算法
    stack & queue及经典例题
    Recursion & Binary search
    Leetcode之SpiralMatrix(I,II)
    Leetcode之贪心算法
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13084890.html
Copyright © 2011-2022 走看看