首页 > 其他 > 详细

方法区概述

时间:2020-06-24 11:19:09      阅读:47      评论:0      收藏:0      [点我收藏+]

首先先来说说 方法区 的作用。

方法区

方法区,是用来存放有关 类、方法 信息的一块逻辑上的区域。也就说,人们想规划出一块区域,用来存储类 方法 相关信息。

除此之外,还用来存储常量、静态变量,以及一些代码缓存等数据。

想想,这些数据都有什么特点。

几乎不变;不怎么依赖于对象,独立。

方法区的故事

关于方法区,有很多的故事 和 混乱。方法区、永久代、元空间都跟他有着故事。

故事的缘由是由历史和部分概念不清晰导致的。

我们之前说到,方法区 只是一个逻辑上的概念。

具体的实现,叫做 永久代 和 元空间。

永久代是 JDK 8 之前的实现。

元空间是 JDK 8 及其之后的实现。

方法区 只是 逻辑上的功能区域概念,永久代 和 元空间 才是在 JVM 中具体的实现。

永久代

永久代,是 JDK 8 之前的实现。永久代,顾名思义,永久存在的,也就是说不怎么需要进行 垃圾回收。

从我们之前对 方法区 的特点,可以知道,方法区内的数据,的确应该长久存在。

但是,当初在设计的时候,永久代存在一个问题。

技术分享图片

可以看到,之前的 永久代 受到限定的内存大小限制,很容易发生内存溢出。

通常使用PermSize和MaxPermSize设置永久代的大小就决定了永久代的上限,但是不是总能知道应该设置为多大合适, 如果使用默认值很容易遇到OOM错误。

元空间

在 JDK8 之后,取消了 永久代,改为 元空间。元空间 位于本地内存,也就是说 只要系统内存足够大,就不会发生溢出。

当使用元空间时,可以加载多少类的元数据就不再由MaxPermSize控制, 而由系统的实际可用空间来控制。

方法区概述

原文:https://www.cnblogs.com/zhouzhiyao/p/13186253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!