我在测试测序里写了死循环,循环内sleep 1秒,在监控内存发现,永久代内存使用一直在增加,所以,想知道永久代的内存是如何分配的,
Perm Gen是方法区,那么每创建一个对象,都会加载对应类的方法吗,如果不断创建同一个类的多个对象,方法会继续加载吗,方法不是共用的
吗,如果是这样,gc不会管理到这块内存,程序跑久了肯定要oom了呀。永久代占内存一直增加,是说明每次对象的方法单独占内存吗?还有一个问题,创建的新对象在堆内存中,那么堆内存中保存的只是对象的成员变量吗(成员方法保存在永久代?),对象中对别的对象的引用又是保存在哪里?对象的引用(例如People p = new People()),p本身(不是指对象)又在内存的那一块?哎呀呀,问题太多了,求大神解答!
已采纳
JVM内存 Perm Gen永久代
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
14条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
looker_good 2019-08-07 12:49最佳回答 专家已采纳已阅读《深入理解Java虚拟机》
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
查看更多回答(13条)
报告相同问题?
提交
相关推荐 更多相似问题
- 2017-11-28 03:10回答 14 已采纳 已阅读《深入理解Java虚拟机》
- 2018-04-09 16:32回答 4 已采纳 方法区被分为两个主要的子区域: 1 持久代`也就是你说的永久代,翻译不同` 这个区域会存储包括类定义、结构、字段、方法(数据及代码)以及常量在内的类相关数据。它可以通过-XX:PermSize及
- 2018-06-15 00:55回答 11 已采纳 正在使用中的变量太多了,程序执行自动回收,发现你变量都在使用 无法回收 下面死循环为例,程序一直在生成新变量a,一直占用内存,内存满后自动释放时,你list还在方法内,没有结束,不能释放,就会内
- 2017-02-06 17:39onezg的博客 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同...
- 2017-12-18 23:05lz710117239的博客 Java PermGen 去哪里了? 原文链接:原文作者:Monica Beckwith 以下为本人翻译,仅用于交流学习,版权归原作者和InfoQ所有,转载注明出处,请不要用于商业用途 在Java虚拟机(JVM)内部,class文件中包括类的版本、...
- 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-04-24 10:25回答 1 已采纳 看起来你这个应用运行了很长时间了,jvm的内存大小已经基本稳定了。对JVM来说,并不是内存越大越好,只要够用,内存越小越好。 你的问题: 1 . 就算初始比例是1:2,经过很长时间的调整之
- 2018-06-22 05:59回答 2 已采纳 Xmx只是设置了允许的最大内存,如果程序实际运行不需要这么多,永远到达不了你设置的数量。所以,如果旧的设置30g,新的设置40g,那么这样当新旧都到达最大数量时候可能会有问题,当然也可能都到达不了最大
- 2018-06-12 16:14_Ricky_的博客 随着服务器上的tomcat部署的项目越来越多,最近在部署一个新的项目的时候出现内存溢出的错误 ... java.lang.OutOfMemoryError: PermGen space at java.lang.StackTraceElement.equals(Sta...
- 2021-03-13 07:36篮洼洼的博客 一、JVM 内存模型根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个...
- 2020-06-15 15:49绿头龙的博客 方法区是一片连续的堆空间,通过-XX:MaxPermSize来设定永久代最大可分配空间,当JVM加载的类信息容量超过了这个值,会报OOM:PermGen错误。 永久代的GC是和老年代(old generation)捆绑在一起的,无论谁满了,都会触发...
- 2017-04-25 08:00回答 1 已采纳 尽量不要调用System.gc(),它会触发fullgc,而fullgc的频率应该是尽量降低的。尽管有些第三方库调用了它,还是不推荐在应用逻辑或业务逻辑内调用它。 如果重视实时性,建议分配较小的
- 2018-12-24 12:02回答 4 已采纳 1:手动释放内存一般使引用对象指向null 。 2:new出的对象GC会自动处理,不需要额外处理 3:需要自己处理的如IO,关闭数据库连接
- 2017-03-30 06:31回答 2 已采纳 jvm内存包括: * 方法区 * 堆区 * 方法栈区 * 本地方法区 * 程序计数区 其中堆区分为年轻代和老年代,年轻代又分为eden去和幸存from区和幸存to区。jvm的垃圾回收也
- 2019-01-23 17:44EmineWang的博客 1.8之后彻底移除永久代,取而代之的是元空间Metaspace(即本地内存,独立于jvm之外),不再占用堆内存 ,它可以通过自动增长来避免JDK7以及前期版本中常见的永久内存错误(java.lang.OutOfMemoryError: PermGen),当然...
- 2021-03-14 18:07weixin_39979332的博客 全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。...
- 2021-04-23 08:45数据科学人工智能的博客 序本文主要讲述一下jvm的PermGen与Metaspacejava memory结构分代概念对于垃圾收集算法来说,分代回收是高级算法之一。对象按照生成时间进行分代,刚刚生成不久的年轻对象划为新生代(Young gen-eration),而存活了较...
- 2017-08-19 01:35回答 4 已采纳  图片说明](https://img-ask.cs
- 2021-03-08 20:32weixin_39928099的博客 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,该块内存主要是被JVM用来存放 class 和 mete 信息的,当 class 被加载 loader 的时候就会被存储到该内存区中,与存放类的实例的heap区...
- 没有解决我的问题, 去提问