Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen)。也称为方法区。
Oracle JDK8的HotSpot VM去掉“持久代”,以“元数据区”(Metaspace)替代之。

Oracle是在JDK7的时候宣布移除PermGen内存区域,但是知道JDK8才最终移除。

在JDK7之前,所谓的Permanet Generation内存区域其实包含了两个部分:

  1. 方法区
  2. Internded String

方法区主要存储了class的一些信息,包括运行时常量池、Classloader的引用,字段数据,方法数据等等。
Interned String内存区域是在JDK 7的时候从JVM内存区域里面移除的。
这里有一篇关于移除PermGen内存区域的说明,有兴趣可以看下:
http://mail.openjdk.java.net/pipermail/hotspot-dev/2012-September/006679.html

JDK8引入了一个新的native的内存区块,Metaspace(也就是题主所说的“元数据”区域)。也就是说,之后你在调优或者调查JVM问题的时候就不用和PermGen区域打交道了,也不会有java.lang.OutOfMemoryError: PermGen 这种内存不足的问题来骚扰你。

作者:Tony Tang
链接:https://www.zhihu.com/question/27429881/answer/36600315
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?的更多相关文章

  1. 作为程序员必须掌握的Java虚拟机中的22个重难点

    Java虚拟机一直是比较重要的知识点,是Java高级开发必会的.本文为你总结了关于JVM的22个重点.难点,图文并茂的向你展示和JVM有关的重点知识.全文共7000字左右. 概念 虚拟机:指以软件的方 ...

  2. Java 虚拟机中的运行时数据区分析

    本文基于 JDK1.8 阐述分析 运行过程 我们都知道 Java 源文件通过编译器编译后,能产生相应的 .Class 文件,也就是字节码文件.而字节码文件通过 Java 虚拟机中的解释器,编译成特定机 ...

  3. 深入理解Java虚拟机--中

    深入理解Java虚拟机--中 第6章 类文件结构 6.2 无关性的基石 无关性的基石:有许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码(ByteCode),从而 ...

  4. 垃圾回收相关(深入理解Java虚拟机中的内容)

    程序计数器.虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收.垃圾回收主要是针对 Java 堆和方法区进行. 判断一个对 ...

  5. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  6. Jsp中如何通过Jsp调用Java类中的方法

    Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...

  7. Java虚拟机栈 和 方法区 的联系

    1.Java虚拟机栈 java方法执行时的内存模型 1.1 栈帧 每个方法都会在虚拟机栈中创建一个对应的栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息. 一个方法的调用到结束就对应这一个 ...

  8. Java虚拟机中Java内存区域

      Java虚拟机所管理的内存将会包括以下几个运行时数据区域. 程序计数器 可以看作是当前线程所执行的字节码的行号指示器. 每一个线程都需要有一个独立的程序计数器. 如果线程正在执行的是一个Java方 ...

  9. Java虚拟机中的内存分配

    java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途以及创建和销毁的时间. 栈:存放的是局部变量,包括:1.用来保存基本数据类型的值:2.保存类 ...

随机推荐

  1. BTrace housemd TProfiler

    http://blog.csdn.net/y461517142/article/details/26269529 http://calvin1978.blogcn.com/articles/btrac ...

  2. Reactor与Proactor比较

    from http://www.cnblogs.com/dawen/archive/2011/05/18/2050358.html 1.标准定义 两种I/O多路复用模式:Reactor和Proacto ...

  3. Gef最简单入门-HelloWold(2)

    ok .上代码 模型类 package testgef.model; public class HelloModel { private String text = "Hello word& ...

  4. 如何:声明、实例化和使用委托(C# 编程指南)

    委托的声明如下所示: C#   public delegate void Del<T>(T item); public void Notify(int i) { } C#   Del< ...

  5. vs断点未能绑定

    原文链接:http://blog.csdn.net/pc0de/article/details/41790063 突然发现所有的c++项目在调试的时候加断点都会报错:”不能设置下面的断点.....断点 ...

  6. SharePoint Online 创建图片库

    前言 本文介绍如何在Office 365中创建图片库,以及图片库的一些基本设置. 正文 通过登录地址登录到Office 365的SharePoint Online站点中,我们可以在右上角的设置菜单中, ...

  7. 支持辉光效果的Label

    支持辉光效果的Label 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 中的 FBGlowLabel // // FBGlo ...

  8. UITextField的简易封装

    UITextField的简易封装 效果 源码 https://github.com/YouXianMing/UI-Component-Collection 中的 UITextFieldView // ...

  9. JUnit4单元测试入门教程

    本文按以下顺序讲解JUnit4的使用 下载jar包 单元测试初体验 自动生成测试类 执行顺序 @Test的属性 下载jar包## 下载地址 在github上,把以下两个jar包都下载下来.     下 ...

  10. 【VC++积累】之八、PreTranslageMessage;TranslageMessage;GetMessage和PeekMessage的区别

    先来看windows消息机制: 首先系统(也就是windows)把来自硬件(鼠标,键盘等消息)和来自应用程序的消息 放到一个系统消息队列中去. 而应用程序需要有自己的消息队列,也就是线程消息队列,每一 ...