jvm回收方法区】的更多相关文章

很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此. 永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类.回收废弃常量与回收Java堆中的对象非常类似.以常量池中字面量的回收为例,假如一个字符串“abc”已经进入了常量池中,但是当前系统没有任何一…
很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此. 永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类. 先来说说方法区内常量池之中主要存放的两大类常量:字面量和符号引用.字面量比较接近Java语言层次的常量概念,如文本字符串.被声明为fina…
和java堆一样,方法区是一块所有线程共享的内存区域,用于保存系统的类信息,类的信息有哪些呢.字段.方法.常量池.方法区也有一块内存区域所以方法区的内存大小,决定了系统可以包含多少个类,如果系统类太多,方法区内存不够肯定会导致方法区溢出,虚拟机同样会抛出内存溢出信息.(内存溢出后面相关文章给大家总结) jdk6和jdk7中,方法区可以理解为永久区(Perm).永久区可以使用参数-XX:PermSize和-XX:MaxPermSize制定.默认情况下-XX:MaxPermSize为64MB.如果你…
因为应用使用了OSGi框架,<深入理解JAVA虚拟机>中对使用OSGi时可能产生的方法区溢出有所描述 第一部分: 第二部分 可见,OSGi会动态生成大量Class,在OSGi中,即使是同一个类文件,被不同的加载器加载也会视为不同的类. 因此方法区在默认比较小的情况下,可能会溢出,实际上也确实遇到了 我计划的解决方法 1.确认Linux物理内存大小,free -h 2.确认JDK版本,已确认是64位的 JDK1.6 hotspot1.6中,整个JVM堆内存大小=Xmx=年轻代大小 + 老年代大小…
方法区在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中.类型信息是由类加载器在类加载时从类文件中提取出来的.类(静态)变量也存储在方法区中. jvm实现的设计者决定了类型信息的内部表现形式.如,多字节变量在类文件是以big-endian存储的,但在加载到方法区后,其存放形式由jvm根据不同的平台来具体定义. jvm在运行应用时要大量使用存储在方法区中的类型信息.在类型信息的表示上,设计者除了要尽可能提高应用的运行效率外,还要考虑空间问题.根据不同的需求,jvm的实现者可以在时…
前面的几篇都没有太明确地指出 方法区 是什么?现在通过一些资料的收集和学习,下面做一些总结 什么是方法区: 方法区是系统分配的一个内存逻辑区域,是JVM在装载类文件时,用于存储类型信息的(类的描述信息). 方法区存放的信息包括: 类的基本信息: 1.每个类的全限定名 2.每个类的直接超类的全限定名(可约束类型转换) 3.该类是类还是接口 4.该类型的访问修饰符 5.直接超接口的全限定名的有序列表 已装载类的详细信息 1.      运行时常量池:在方法区中,每个类型都对应一个常量池,存放该类型所…
在java虚拟机中并没有规范规定需要对方法区即是新生代进行垃圾回收, 主要是这些区域的回收性价比极低, 一般在新生代中一般垃圾回收中可以达到70%到95%.   其中永久代中的垃圾回收主要回收的是两个部分, 一个部分是废弃的常量,判断一个常量是否废弃, 主要看这个常量在其他地方是否引用了这个字面量. 否则如果此时发生垃圾回收,即会回收这部分常量.   另外一部分是无用的类,判断一个类是否无用,主要看三点, 第一点是这个类的所有实例都被回收了,即是java堆中不存在该类的任何实例, 第二点是加载该…
Java虚拟机规范中规定不要求虚拟机在方法区实现垃圾收集,而且在方法区实现垃圾收集性价比确实很低.在堆中,尤其是新生代,一次垃圾收集可以回收75%-95%的空间,而永久代的垃圾回收效率远低于此. 永久代的垃圾收集主要回收两部分:废弃常量和无用的类.回收废弃常量与回收Java堆的对象非常相似. 以常量池的字面量的回收为例,例如字符串“abc”进入常量池,但是当前系统没有任何一个string对象引用常量池的字符串“abc”,也没有其他地方引用这个字面量,若此时发生回收,则“abc”常量将被回收.常量…
回收的类必须满足下面三个条件才能算是“无用的类” 1.该类所有的实例都已经被回收,也就是说Java堆中不存在该类的任何实例: 2.加载该类的ClassLoader已经被回收: 3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法.…
一.引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不能再被使用的.引用计数法实现简单,判定效率也很高,但是它很难解决对象之间相互循环引用的问题.如下代码中 testGC()方法:对象objA和objB都有字段instance,赋值令objA.instance = objB;及objB.instance = objA;除此之外,两个对象再无引用,实际上这两个对象已经不可能再被访问,但是因为它们互相引用着对方,…