你说的类是指某个类的class对象吗?肯定是不回收的了。你想啊,系统中或多或少会有个别不常用的功能,如果因为长期不使用就被回收了那以后要用怎么办。其次,从内存原理上来说,class对象都是有专门的存放区域的,有引用自然不会被删除。

解决方案 »

  1.   

    一般情况下不会回收,因为程序不知道什么时候又会用到这个类。但是有两种特殊情况:1、通过特殊的参数可以让 JVM 回收类的定义,更多内容请自己搜索“CMSClassUnloadingEnabled”;
    2、在自定义 ClassLoader 下加载的类,当 ClassLoader 被回收时,类的定义也会被回收。
      

  2.   

    感觉现在的JVM回收机制不如以前的除了自动还可以手动回收。
      

  3.   


    一般来说,JVM 在运行过程中,类的数量是不会无限增加的,类加载一次就完了,而对象则在不停的创建和回收。所以 PermGen 空间的增加被视为是可控的。
      

  4.   

    会回收的,永久区的回收主要针对废弃的常量和无用的类,废弃的常量指的是常量池中的常量对象没有被任何引用;
    而类的“无用”判定则要同时满足三个条件:
    1.该类所有的实例已经被回收,即Java堆中不存在该类的任何实例;
    2.加载该类的ClassLoader已经被回收;
    3.该类对应的 java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。 至于是否真要回收无用的类,可以通过Java虚拟机的参数配置来决定,具体的配置参数我忘记,楼主可以百度一下。
      

  5.   


    一般来说,JVM 在运行过程中,类的数量是不会无限增加的,类加载一次就完了,而对象则在不停的创建和回收。所以 PermGen 空间的增加被视为是可控的。Java8 里 PermGen 就要取消了。记得好像是要被合并到Heap里。
    类回收的问题可能会改善。由于现在基于JVM的动态语言大量出现,还有诸如热部署等等需求,经常会产生大量类,
    因此类的回收问题,PermGen问题,也就逐渐突现出来了。