java永久区_Java方法区和永久代

2023-11-06

目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9。

JRockit是oracle发明的,用于其WebLogic服务器,IBM JVM是IBM发明的用于其Websphere服务器(因此在某行开发的时候,他们用的是IBM的JDK,由于他们使用的IBM的应用程序服务器Websphere,使用其余JDK可能存在兼容性问题)。spring

JRockit和J9不存在永久代这种说法。这里只讨论HotSpot虚拟机,这也是目前使用的最多的JVM。Sun JDK7 HotSpot虚拟机的内存模型以下图所示:服务器

09e7f5a52f804c1894cd92da.html

一、什么是方法区

在Java虚拟机中,方法区是可供各线程共享的运行时内存区域。并发

在不一样的JDK版本中,方法区中存储的数据是不同的。oracle

在JDK1.6及以前,运行时常量池是方法区的一个部分,同时方法区里面存储了类的元数据信息、静态变量、即时编译器编译后的代码(好比spring 使用IOC或者AOP建立bean时,或者使用cglib,反射的形式动态生成class信息等)等。性能

在JDK1.7及之后,JVM已经将运行时常量池从方法区中移了出来,在JVM堆开辟了一块区域存放常量池。优化

二、方法区和永久代的关系

在Java虚拟机规范中,方法区在虚拟机启动的时候建立,虽然方法区是堆的逻辑组成部分,可是为了与堆进行区分,一般又叫“非堆”。可是简单的虚拟机实现能够选择不在方法区实现垃圾回收与压缩。这个版本的虚拟机规范也不限定实现方法区的内存位置和编译代码的管理策略。因此不一样的JVM厂商,针对本身的JVM可能有不一样的方法区实现方式。线程

在HotSpot中,设计者将方法区归入GC分代收集。HotSpot虚拟机堆内存被分为新生代和老年代,对堆内存进行分代管理,因此HotSpot虚拟机使用者更愿意将方法区称为老年代。设计

方法区和永久代的关系很像Java中接口和类的关系,类实现了接口,而永久代就是HotSpot虚拟机对虚拟机规范中方法区的一种实现方式。接口

咱们知道在HotSpot虚拟机中存在三种垃圾回收现象,minor GC、major GC和full GC。对新生代进行垃圾回收叫作minor GC,对老年代进行垃圾回收叫作major GC,同时对新生代、老年代和永久代进行垃圾回收叫作full GC。许多major GC是由minor GC触发的,因此很难将这两种垃圾回收区分开。major GC和full GC一般是等价的,收集整个GC堆。但由于HotSpot VM发展了这么多年,外界对各类名词的解读已经彻底混乱了,当有人说“major GC”的时候必定要问清楚他想要指的是上面的full GC仍是major GC。内存

三、元空间

上面说过,HotSpot虚拟机在1.8(包括)以后已经取消了永久代,改成元空间,类的元信息被存储在元空间中,而常量池依旧存在于堆内存中。元空间没有使用堆内存,而是与堆不相连的本地内存区域。因此,理论上系统可使用的内存有多大,元空间就有多大,因此不会出现永久代存在时的内存溢出问题。这项改造也是有必要的,永久代的调优是很困难的,虽然能够设置永久代的大小,可是很难肯定一个合适的大小,由于其中的影响因素不少,好比类数量的多少、常量数量的多少等。永久代中的元数据的位置也会随着一次full GC发生移动,比较消耗虚拟机性能。同时,HotSpot虚拟机的每种类型的垃圾回收器都须要特殊处理永久代中的元数据。将元数据从永久代剥离出来,不只实现了对元空间的无缝管理,还能够简化Full GC以及对之后的并发隔离类元数据等方面进行优化。

四、元空间取代永久代的好处:

一、字符串存在永久代中,容易出现性能问题和内存溢出。

二、类及方法的信息等比较难肯定其大小,所以对于永久代的大小指定比较困难,过小容易出现永久代溢出,太大则容易致使老年代溢出。

三、永久代会为 GC 带来没必要要的复杂度,而且回收效率偏低。

四、Oracle 可能会将HotSpot 与 JRockit 合二为一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java永久区_Java方法区和永久代 的相关文章

  • HCNP——水平分割、毒性逆转、触发更新、毒性路由

    一 水平分割 原理是 RIP路由器从某个接口收到的路由不会再从该接口通告回去 这个机制很大程度上消除了RIP路由的环路隐患 二 毒性逆转 毒性逆转是另一种防止路由环路的有效机制 其原理是 RIP从某个接口学到路由后 当他从该接口发送Resp
  • linux的mtime的用法,Find–atime –ctime –mtime的用法与区别总结

    周五有同事问起find命令中 mtime n mtime n以及 mtime n的用法区别 当时虽然记得这里n是n个24个小时的意思 也是对所有这几个属性详细的用法却一知半解 索性周末仔细google并且实践了一番 终于理清楚了个中乾坤 f
  • SpringBoot分布式任务调度,可支持rabbitmq与kafka两种消息中间件的可回滚微服务实现。

    分布式任务调度管理 Distribution task center 支持Rabbit与kafka两种消息队列 实现立即执行与根据CronExpress表达式的执行及更加复杂的复合执行策略 在任务执行过程中可完成回滚操作 在微服务中我们经常
  • MyBatis-动态SQL

    实体类Car package com bjpowernode domain public class Car private Integer id private String carNum private String brand pri
  • qt 一个线程接收数据 主线程更新界面 会造成界面退出 怎么解决_打造一个好产品

    原标题 打造一个好产品 让产品自己说话 编辑导语 一个好的产品 关键在于产品经理和团队 产品经理对于产品如何理解以及产品更新迭代时的需求变化 产品如何实现更好的体验等等 本文作者分享了关于产品经理经常犯的七个问题 我们一起来看一下 不管怎么
  • c++双链表【构造函数、运算符重载、析构函数、增删查改及逆置等】

    c 中的双向链表写法 主要实现 增删查改 链表逆置 构造函数 运算符重载 等 建立头文件SList h pragma once typedef int DataType class ListNode friend class List 友元
  • Vue学习-基础篇4

    目录 组件结构讲解 如何在组件中引入其它组件 组件中如何使用外部插件 组件间的传值 Vue cli项目创建 什么是脚手架 创建项目 Vue cli项目结构 Vue cli 入口文件main js分析 组件结构讲解 把每个组件都放到一个独立的
  • 【Shell牛客刷题系列】SHELL28 nginx日志分析6-统计每分钟的请求数

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Shell 欢迎关注专栏 本文知识预告 本文首先学习了sprintf 函数的用法 然后复习
  • python爬虫实战之模拟正方教务系统登录查询成绩

    最近由于某些需要 开始入门Python网络爬虫 想通过一个Python程序来访问正方教务管理系统并且抓取到期末的成绩 由于我并没有深入了解过过其他的编程语言 所以 也比较不出Python和其他语言 如JAVA PHP 的优缺点 只是因为我会
  • JAVA通配符

    上限通配符 我们想要的是一个确切元素类型未知的列表 这一点与数组是不同的 List
  • 一、红外遥控介绍(NEC协议)

    目录 1 1 红外线的介绍 1 2 红外遥控器的工作原理 1 3 NEC协议的介绍 1 引导码的组成 2 地址码 3 数据码 4 反码 5 连发码 1 4 红外接受装置 1 在数码管显示红外解码遥控器的按键值 1 1 红外线的介绍 红外是红
  • Kitti数据集标签中yaw角在不同坐标系的转换

    KITTI数据集中坐标系的定义如下图 相机坐标系 激光雷达坐标系 在标签文件 label 中 最后一个值为物体前进方向与x轴夹角的弧度值 在相机坐标系下 且以顺时针为正 逆时针为负 举个例子 如上图第一个car数据为例 其前进方向与x轴夹角
  • 三、IOC容器原理

    三 IOC容器原理 1 概述 Sun ONE技术体系下的IOC容器有 轻量级的有Spring Guice Pico Container Avalon HiveMind 重量级的有EJB 不轻不重的有JBoss Jdon等等 Spring框架
  • nodejs安装

    CentOS7安装NodeJS 1 官网下载二进制文件 https nodejs org en download 2 下载后上传到目标位置 3 解压包 依次执行 cd soft nodejs xz d node v12 18 2 linux
  • Python3 + xpath + excel 实现对boss直聘网的爬取

    一 项目简介 1 内容 抓取boss直聘网上广州地区的 python 相关工作的招聘信息 并且将招聘信息循环保存在excel表中 2 目标网站 https www zhipin com c101280100 query python pag
  • Linux中用gdb 查看代码堆栈的信息

    core dump 一般是在segmentation fault 段错误 的情况下产生的文件 需要通过ulimit来设置才会得到的 调试的话输入 gdb filename core filename就是产生core文件的可执行文件 core
  • Windows server 远程桌面连接用户不活动自动注销配置

    Windows server 远程桌面连接用户不活动自动注销配置
  • VMware三种网络模式配置详解。

    VMware网络 本质上不会配置VMware网络 是因为对其不够熟悉 VMware提供了三种可靠的网络模式 我相信只要了解了他们的区别 配置起来应该是如鱼得水的 如果还在为你的虚拟机上不了网而发愁 那么请跟随我的脚步 让我们来探究他们到底有
  • Flowable 用户问题

    Flowable用户和系统用户问题 springboot集成flowable modeler 实现免登 权限管理 Flowable引擎使用统一权限管理

随机推荐

  • 《信号与系统》解读 第4章 连续信号的离散化:采样与采样定理、奈奎斯特准则、脉冲编码调制PCM

    前言 如果你对采样定理和奈奎斯特准则一知半解 本文将给茅塞顿开 如果你对为什么采样频率必须大于等于原始信号的带宽的2倍 本文将给你答案 目录 1 信号与系统的模型 2 为什么要对连续信号离散化 3 连续信号离散化 采样 的模型 3 1 采样
  • 使用Hexo搭建博客并部署到Github

    一 博客环境搭建 Hexo 是一个静态博客框架 基于 Node js 将 Markdown 文章通过渲染引擎 生成一个静态网页 再结合 Git 命令 ssh Hexo 是一个快速 简洁且高效的博客框架 Hexo 使用 Markdown 或其
  • 深入理解 Java 垃圾回收机制

    一 垃圾回收机制的意义 java 语言中一个显著的特点就是引入了java回收机制 是c 程序员最头疼的内存管理的问题迎刃而解 它使得java程序员在编写程序的时候不在考虑内存管理 由于有个垃圾回收机制 java中的额对象不在有 作用域 的概
  • 解决Excel打开UTF-8编码的CSV文件乱码的问题

    解决Excel打开UTF 8编码的CSV文件乱码的问题 引用自 https en wikipedia org wiki Comma separated values CSV formats are not limited to a part
  • 透彻解析Qt入门级项目——贪吃蛇游戏

    1 项目目的 本项目主要通过编写贪吃蛇游戏来学习 熟悉Qt中封装的类 2 编译环境 VS2019 Qt5 9 3 功能实现 主要实现下面所列基本功能 控制贪吃蛇吃食物 表示蛇 控制贪吃蛇上下左右移动 控制食物的随机分配 控制蛇的增长 暂停游
  • MATLAB上关于复数矩阵的转置与共轭知识详解

    首选随机用A randn 2 2 randn 2 2 1i生成一个二维的复数矩阵 执行后结果如下 A 3 5784 0 7254i 1 3499 0 7147i 2 7694 0 0631i 3 0349 0 2050i 执行 A 得到如下
  • DRM(Direct Rendering Manager)学习简介

    DRM DRM是Linux目前主流的图形显示框架 相比FB架构 DRM更能适应当前日益更新的显示硬件 比如FB原生不支持多层合成 不支持VSYNC 不支持DMA BUF 不支持异步更新 不支持fence机制等等 而这些功能DRM原生都支持
  • 堆栈内存地址

    catalog 有两个信息 B gt A 即栈空间地址 gt 堆空间地址 比如 你的临时变量的地址 是 0x666666 全局变量的地址0x222222 总之 栈空间地址 gt 堆空间地址 栈空间 依据申请变量的次序 地址是 从B地址开始递
  • Ubuntu 20.04及pytorch安装

    转载自 https blog csdn net xjgao75 article details 105869699 侵权可删 只作为笔记 Ubuntu 20 04安装及pytorch深度学习框架配置 Ubuntu 20 04安装 启动U盘制
  • Unity-NGUI物体扫光特效

    先看效果 最近搞了多张卡牌合成新卡牌后 新卡牌在放回背包后闪亮一下 没搞过Shader 但前人已经造好轮子 研究后 记录下 方便以后使用 效果如下 文章详情请移步 Unity NGUI物体扫光特效
  • leecode刷算法C++

    共11道数组 字符串相关题目 大多数为简单 我分为三类 分别为翻转问题 元素重复问题和其它类 使用C 翻转问题包括轮转数组 翻转字符串 整数翻转这3道题 元素重复题目包括删除有序数组中的重复项 存在重复元素 只出现一次的数字 字符串中的第一
  • 详解c# Emit技术

    我们常常有一个应用场景 由我们的C 代码 动态生成一个EXE 其应用场景可以非常多 比如软件授权 可以输入授权信息后 生成一个授权的DLL等 那如何实现这个功能呢 就要提到一个技术Emit 1 Emit概述 Emit 可以称为发出或者产生
  • 计算机网络笔记(一)

    什么是计算机网络 什么是计算机网络 计算机网络就是互连 互联互通 的 自治 无主从关系 的计算机集合 那么 距离远 数据大如何保证互连 通过交换网络互连主机 什么 是 Internet 组成 计算机设备 通信链路 分组交换 数据包转发分组
  • linux unix域socket_python3从零学习-5.8.1、socket—底层网络接口

    源代码 Lib socket py 这个模块提供了访问BSD 套接字 的接口 在所有现代Unix系统 Windows macOS和其他一些平台上可用 这个Python接口是用Python的面向对象风格对Unix系统调用和套接字库接口的直译
  • Kaldi-MFCC模块源码主流程分析

    那么趁着这个机会 研究一下kaldi源码中MFCC部分的内容 不说废话 我们从 compute mfcc feats cc开始讲解 这里是个main函数 需要携带参数 具体使用样例如下 1 compute mfcc feats 其实看到这里
  • JVM完整笔记

    这是我在看课程 黑马程序员JVM完整教程 过程中记的笔记 我觉得该课程总时不长 并且理论 实战是一个入门JVM的好课程 若你看完该课程可以看下面几个参看书进一步深入了解JVM 深入理解Java虚拟机 第二版 实战Java虚拟机 深入JAVA
  • Java基础3--Java流程控制语句

    Java基础3 Java流程控制语句 文章目录 Java基础3 Java流程控制语句 Java循环语句 while循环 do while循环 for循环 增强for循环 Java条件语句 if语句 if else语句 if多分支语句 Jav
  • 【FreeRTOS开发问题】FreeRTOS内存溢出

    FreeRTOS内存溢出 如下图所示 FreeRTOS编译完成后可以看到 系统提示无法分配内存到堆 Objects Template axf Error L6406E No space in execution regions with A
  • Error Microsoft Visual C++ 14.0 is required 最佳解决方法,亲测有效

    这种pip安装不上的包 1 找whl包下载安装 去Python安装包大全中 https www lfd uci edu gohlke pythonlibs 去下载 对应后缀为 whl 的安装包进行安装 后缀为 whl 的安装包进行安装的方法
  • java永久区_Java方法区和永久代

    目前有三大Java虚拟机 HotSpot oracle JRockit IBM J9 JRockit是oracle发明的 用于其WebLogic服务器 IBM JVM是IBM发明的用于其Websphere服务器 因此在某行开发的时候 他们用