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. [Go] Cookie 使用简介

    Golang 的 Cookie web 开发免不了要和 cookie 打交道.Go 的 http 库也提供了 cookie 的相关操作. type Cookie struct { Name strin ...

  2. 正确识别希捷Backup Plus新睿品1TB正品,杜绝奸商猖獗

    刚刚在百度希捷贴吧发了此贴, 马上被删除, 无奈只能发于个人博客,  望看到的朋友能转载到"合适"位置,让更多的朋友看到. 避免上当. 最近准备买个移动硬盘备份电脑资料,看上了睿品 ...

  3. AngularJS中自定义过滤器

    AngularJS中为我们提供了一些内置的过滤器,这里列举一些自定义过滤器的场景. 自定义过滤器,不带参赛 //过滤 不带参赛 app.filter('ordinal', function () { ...

  4. C#交换两个变量值的多种写法

    在学习.Net/C#或者任何一门面向对象语言的初期,大家都写过交换两个变量值,通常是通过临时变量来实现.本篇使用多种方式实现两个变量值的交换. 假设int x =1; int y = 2;现在交换两个 ...

  5. 创建 HelloWorld 项目

    在 Eclipse 的导航栏中点击 File →New →Android Application Project ,此时会弹出创建 Android 项目的对话框.其中 Application Name ...

  6. tms web core介绍

    tms web core介绍 TMS Web CORE是基于将Delphi UI代码编译为javascript并以此方式创建的 称为单页应用程序.TMS Web核心应用程序可以包含多个表单. 这些多个 ...

  7. Java 数组的 12 个最佳方法

    1.  声明一个数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c&q ...

  8. WordPress主题开发:截取标题或内容

    截取可以用wp_trim_words() 用法: <?php $trimmed = wp_trim_words( $text, $num_words = 55, $more = null ); ...

  9. SharePoint Online 创建网站集

    前言 本文介绍如何在Office 365中创建SharePoint网站集. 正文 通过登录地址登录到Office 365环境中,我们可以在左上角的按钮中点开,进入管理员,也可以直接在页面中点击管理: ...

  10. md5目录下的文件包括子目录

    find ./ -type f -print0 | xargs -0 md5sum