JVM PermGen –您在哪里?

这篇文章介绍了JVM内存结构的一些基础知识,并快速窥视了PermGen,以了解自Java SE 8出现以来它已消失的地方。

裸基础

JVM只是系统上运行的另一个进程,魔术始于java命令。 像任何OS进程一样,它需要内存才能运行。 记住– JVM本身是对硬件的软件抽象,在其之上运行Java程序,并拥有OS独立性和WORA (一旦在任何地方运行一次写入)。

快速介绍JVM内存结构

根据规范,JVM分为5个虚拟内存段。

  • 方法(非堆)
  • JVM堆栈
  • 本机堆栈
  • PC寄存器

jvm-memory-segments1

  • Java程序中分配的每个对象都需要存储在内存中。 堆是存储所有实例化对象的区域。 是的–责怪操作员填满Java堆!
  • 由所有线程共享
  • JVM用尽时会抛出java.lang.OutOfMemoryError
  • 使用-Xms-Xmx JVM选项来调整堆大小

内存不足错误

细分为

  • 伊甸园 (年轻)–该区域中存在新对象或预期寿命短的对象,并使用-XX:NewSize和-XX:MaxNewSize参数对其进行调节。 GC(垃圾收集器)次要空间
  • 幸存者 –仍被引用的对象设法在伊甸园空间的垃圾收集中幸存下来,最终到达该区域。 通过-XX:SurvivorRatio JVM选项进行调节
  • (已租用)–适用于在伊甸园和幸存者空间中可以长期保存垃圾的对象(当然,这是由于缠结的引用所致)。 一个特殊的垃圾收集器负责这个空间。 使用权空间中的对象脱空间处理由GC Major负责

方法范围

  • 也称为非堆区域(在HotSpot JVM实现中)
  • 它分为2个主要子空间

永久 生成 –该区域存储来自类定义,结构,方法,字段,方法(数据和代码)和常量的类相关数据。 可以使用-XX:PermSize和-XX:MaxPermSize进行调节。 如果空间不足,则IT会导致java.lang.OutOfMemoryError:PermGen空间。

代码 缓存 –缓存区域用于存储编译的代码。 编译后的代码不过是本机 代码 (特定于硬件),并且由Oracle HotSpot JVM专用的JIT (及时)编译器处理。

JVM堆栈

  • 与Java类中的方法有很多关系
  • 存储局部变量并调节方法调用,部分结果和返回值
  • Java中的每个线程都有自己的堆栈(专用)副本,其他线程无法访问。
  • 使用-Xss JVM选项进行了调整

本机堆栈

  • 用于本机方法(非Java代码)
  • 每个线程分配

PC寄存器

  • 特定于特定线程的程序计数器
  • 包含要执行的JVM指令的地址(对于本机方法,则未定义)

因此,这就是JVM内存段基础知识。 回到永久的一代。

那么PermGen在哪里?

本质上,PermGen已被完全删除 d, 并被另一个称为Metaspace的存储区域取代

元空间–快速事实

  • 它是本机堆内存的一部分
  • 可以使用-XX:MetaspaceSize-XX:MaxMetaspaceSize进行调整
  • 清理由XX:MetaspaceSize选项驱动的启动,即达到MetaspaceSize时。
  • java.lang.OutOfMemoryError:如果本机空间已用完,将接收元数据空间
  • 如果存在PermGen相关的JVM选项,即-XX:PermSize和-XX:MaxPermSize,将被忽略

这显然只是冰山一角。 为了全面了解JVM,没有比规范本身更好参考

您也可以探索

  • Java语言规范
  • Java 8有什么新功能?

干杯!

翻译自: https://www.javacodegeeks.com/2014/09/jvm-permgen-where-art-thou.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 开发过程中遇到的问题

1. gitlab团队协作开发 2. element ui 问题集锦 3. 使用vue和ElementUI快速开发后台管理系统 更多专业前端知识,请上 【猿2048】www.mk2048.com

python6-函数

转载于:https://www.cnblogs.com/WIU1905/p/11101249.html

Windows Phone 7.1 “芒果” SDK Beta 下载地址

Windows Phone 7.1 “芒果” SDK Beta 今天早上发布,第一时间下载体验。功能果然激动人心。 下载地址: 离线ISO请点我, 在线安装请点我。转载于:https://www.cnblogs.com/finehappy/archive/2011/05/25/2056849.html

Windows系统安装 ffmpeg

下载及解压 ffmpeg官方下载地址:https://ffmpeg.org/download.html 下载好后将其解压至你想保存的位置中。 环境变量设置 打开Windows设置,在搜索框输入:系统高级设置。 新建环境变量,并输入bin目录具体位置。 安装检查 按住 w…

基于webpack3.x从0开始搭建React开发环境

在开发react单页面的时候无可避免的要使用到webpack打包,今天就从零开始搭建一个react的开发环境。 需要实现的功能有: 使用Babel编译ES6编译.jsx文件实现热更新编译CSS预处理文件Less,CSS后处理文件PostCSS提取公共的CSS样式到一个公共的文…

死机简单配置

编写整个框架的目的是为了处理应用程序的配置。 我更喜欢一种简单的方法。 如果通过配置我们的意思是“ 部署之间可能有所不同的所有内容 ”,那么我们应该尝试使配置保持简单。 在Java中,最简单的选项是不起眼的属性文件。 属性文件的缺点是&#xff0c…

VMWARE虚拟机环境网卡3种模式介绍

NAT模式:相当于你的虚拟机通过你的宿主机上网 桥接模式:相当于你的虚拟机和宿主机同在一个局域网通过静态屁访问网络 仅主机模式:虚拟机只能和宿主机通信,但宿主机不会为虚拟机提供任何路由服务,不能连接到实际网络中转…

一个网站的诞生- MagicDict开发总结2 [ACCESS的烦恼]

说到数据库,有很多很多选择,除了MS-SQL,Oracle,SQLite,MySql,这些大家都非常熟悉的同学,还有DB2,IMSDB(灰常灰常古老的数据库,用在OS390等Mainframe中&#x…

TS引用JS模块

为TypeScript引用的JS写声明文件 写TypeScript声明文件的时候会有三个困惑,一个是声明文件是什么?一个是声明文件怎么写?还有一个是TS依据什么规则找到我们的声明文件或者说模块。 第一个问题:按照我的理解声明文件就是告诉TS编…

angular模块

深入浅析AngularJS中的模块 模块是AngularJS应用程序的一个组成部分,模块可以是一个Controller、Service服务、Filter过滤器、directive指令,这些都属于模块。 大多数的应用程序都有一个函数入口main文件,用它来进行初始化,加载…

对象应该是不可变的

在面向对象的编程中,如果对象的状态在创建后无法修改,则该对象是不可变的 。 在Java中,不可变对象的一个​​很好的例子是String 。 创建完成后,我们将无法修改其状态。 我们可以要求它创建新的字符串,但是它自己的状…

开源GIS---.Net系列

NASA World WindNASA World Wind是使用.NET开发的一个Windows窗体系统,以地球外观看得角度提供全球定位功能,类似于Google Earth。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于Blue Marble, Landsat 7, SRTM, MODIS 以及…

TypeScript中怎么用接口(interface)描述类(静态部分与实例部分)

TypeScript是JavaScript的超集 在看TypeScript官方文档的接口一节的时候对于类的静态部分与实例部分产生了疑问,通过努力得到自认为相对合理的解释,写下此文以记所得,如有谬误感谢指正。 文中大部分代码示例来自TypeScript官网 TS中的接口…

Java黑科技之源:JVMTI完全解读

Java生态中有一些非常规的技术,它们能达到一些特别的效果。这些技术的实现原理不去深究的话一般并不是广为人知。这种技术通常被称为黑科技。而这些黑科技中的绝大部分底层都是通过JVMTI实现的。 形象地说,JVMTI是Java虚拟机提供的一整套后门。通过这套后…

npm install --save

1. npm install:本地安装 2. npm install -g:全局安装 我们在使用 npm install 安装模块或插件时,有两种命令把它们写入到 package.json 文件中去,在 package.json 里面体现出的区别就是,使用 --save 安装的插件&…

其他一些单元测试技巧

在我以前的文章中,我展示了有关JavaBeans单元测试的一些技巧。 在此博客文章中,我将提供有关单元测试某些相当常见的Java代码的另外两个技巧,即实用程序类和Log4J日志记录语句 。 测试实用程序类 如果您的实用程序类遵循与我倾向于编写的相同…

常见的CSS布局

各种常见的CSS布局 在工作中会经常用到很多的布局方式,这里总结一下所遇到的布局,会持续更新。 悬挂布局 实现这种布局的方式有很多,这边主要挑两个,如下: 方式一:使用浮动和块级格式化上下文特性 这种…

netflix数据处理2(转)

原始数据:$head -10 mv_0006890.txt6890:1735266,1,2004-04-021008399,1,2004-06-222360117,2,2003-11-081294425,2,2004-03-15439931,4,2004-03-271583311,1,2004-03-112431832,3,2005-02-13620771,2,2004-03-201110906,1,2004-03-04结果数据:user_id m…

jQuery 效果

显示和隐藏 1. show(speed) :speed 可以取:slow/fast/毫秒 1 $("#show").click(function(){2 $("p").show(1000);3 }); 2. hide(speed) : 1 $("#hide").click(function(…

OSCP-Kioptrix2014-2 漏洞利用

pChart 2.1.3 文件包含漏洞 搜索漏洞查看漏洞理由代码:hxxp://localhost/examples/index.php?ActionView&Script%2f..%2f..%2fetc/passwd 之前的8080端口禁止访问,看看apache的配置:http://192.168.1.78/pChart2.1.3/examples/index.php?ActionView&Script%2f..%2f..…