我在测试测序里写了死循环,循环内sleep 1秒,在监控内存发现,永久代内存使用一直在增加,所以,想知道永久代的内存是如何分配的,
Perm Gen是方法区,那么每创建一个对象,都会加载对应类的方法吗,如果不断创建同一个类的多个对象,方法会继续加载吗,方法不是共用的
吗,如果是这样,gc不会管理到这块内存,程序跑久了肯定要oom了呀。永久代占内存一直增加,是说明每次对象的方法单独占内存吗?还有一个问题,创建的新对象在堆内存中,那么堆内存中保存的只是对象的成员变量吗(成员方法保存在永久代?),对象中对别的对象的引用又是保存在哪里?对象的引用(例如People p = new People()),p本身(不是指对象)又在内存的那一块?哎呀呀,问题太多了,求大神解答!
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

JVM内存 Perm Gen永久代
收起
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
当前问题酬金
¥ 0 (可追加 ¥500)
支付方式
扫码支付
14条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
looker_good 2019-08-07 12:49关注已阅读《深入理解Java虚拟机》
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
qy7383190 2017-11-28 03:34关注《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
qq_41200647 2017-11-28 03:36关注debogger
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
sharleneli 2017-11-28 03:40关注《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
wlz0706 2017-11-28 03:59关注这么多问题,你没有把一个描述清楚,怎么回答
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
Hellokk_12138 2017-11-28 04:12关注perm创建对象,不会每次都加载方法
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
httphosts 2017-11-28 04:20关注《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
httphosts 2017-11-28 04:20关注这么多问题,你没有把一个描述清楚,怎么回答
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
weixin_41201266 2017-11-28 06:23关注垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。
Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
likaihui_1129 2017-11-28 06:26关注在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
baidu_24903053 2017-11-28 07:48关注《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
qq_41203870 2017-11-28 08:13关注《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
Budding... 2017-11-28 10:15关注《深入理解java虚拟机》这本书还是不错的,可以看看
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容 - 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
zongfug 2017-11-28 14:03关注支持,《深入理解java虚拟机》,先看完这本书
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
评论按下Enter换行,Ctrl+Enter发表内容
报告相同问题?
- 2017-11-28 03:10回答 14 已采纳 已阅读《深入理解Java虚拟机》
- 2018-06-15 00:55回答 11 已采纳 正在使用中的变量太多了,程序执行自动回收,发现你变量都在使用 无法回收 下面死循环为例,程序一直在生成新变量a,一直占用内存,内存满后自动释放时,你list还在方法内,没有结束,不能释放,就会内
- 2018-04-09 16:32回答 4 已采纳 方法区被分为两个主要的子区域: 1 持久代`也就是你说的永久代,翻译不同` 这个区域会存储包括类定义、结构、字段、方法(数据及代码)以及常量在内的类相关数据。它可以通过-XX:PermSize及
- 2017-12-18 23:05collective_lz的博客 Java PermGen 去哪里了? 原文链接:原文作者:Monica Beckwith 以下为本人翻译,仅用于交流学习,版权归原作者和InfoQ所有,转载注明出处,请不要用于商业用途 在Java虚拟机(JVM)内部,class文件中包括类的版本、...
- 2018-12-24 12:02回答 4 已采纳 1:手动释放内存一般使引用对象指向null 。 2:new出的对象GC会自动处理,不需要额外处理 3:需要自己处理的如IO,关闭数据库连接
- 2017-04-24 10:25回答 1 已采纳 看起来你这个应用运行了很长时间了,jvm的内存大小已经基本稳定了。对JVM来说,并不是内存越大越好,只要够用,内存越小越好。 你的问题: 1 . 就算初始比例是1:2,经过很长时间的调整之
- 2021-08-01 12:47回答 2 已采纳 一般是特殊业务场景明显出性能问题了才去调优举个例子,如果是图片处理业务,因为渲染图片占用内存开销比较大,一张几m的图片渲染的时候占个几十上百m内存是常有的事情。。。个位数并发就会因为survive区不
- 2022-08-12 23:10赵广陆的博客 2.1 PermGen space 2.2 常规解决方法配置参数 2.3 风险代价最小的方法升级jdk版本 2.4 排查代码消耗内存较多的类 2.5 分析方向 学习前先看下内存溢出的分类:...
- 2018-06-22 05:59回答 2 已采纳 Xmx只是设置了允许的最大内存,如果程序实际运行不需要这么多,永远到达不了你设置的数量。所以,如果旧的设置30g,新的设置40g,那么这样当新旧都到达最大数量时候可能会有问题,当然也可能都到达不了最大
- 2017-03-30 06:31回答 2 已采纳 jvm内存包括: * 方法区 * 堆区 * 方法栈区 * 本地方法区 * 程序计数区 其中堆区分为年轻代和老年代,年轻代又分为eden去和幸存from区和幸存to区。jvm的垃圾回收也
- 2023-02-08 18:03回答 3 已采纳 你用程序获取到的jvm相关参数是你IDEA中指定的jdk的设置,而 idea64.exe.vmoptions 这个文件中设置JVM参数是IDEA程序自身的JVM参数,IDEA他本身也是一个java程序
- 2020-02-11 18:23猎人在吃肉的博客 文章目录0、前言(JVM 运行时区域)1、PermGen(永久代)2、Metaspace(元空间)3、总结 0、前言(JVM 运行时区域) 阅读此文章时,必须已经了解了jvm 运行时数据区域。 根据 JVM 规范,JVM 运行时区域大致分为 ...
- 2021-08-12 00:04回答 1 已采纳 arthas是依赖jdk自带工具,像jps、jmap、jinfo等等,建议你重新安装一下jdk环境变量,jre和jdk都要配置一下
- 2017-02-06 17:39onezg的博客 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同...
- 2019-04-16 10:07cpongo3的博客 PermGen Space的全称是Permanent Generation space, 是指内存的永久保存区. 这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen Space区域,Class和存放Instance的Heap区域不同, GC不会在主...
- 没有解决我的问题, 去提问