下面哪种情况会导致持久区jvm堆内存溢出()

  1. 循环上万次的字符串处理
  2. 在一段代码内申请上百M甚至上G的内存
  3. 使用CGLib技术直接操作字节码运行,生成大量的动态类
  4. 不断创建对象
4 3 收藏


直接登录
最新评论
  • LINE   2016/03/15

    1,2,3,4都会

    • 王先生 学生 2016/03/17

      注意是持久区

      • liucyu   2016/04/01

        持久代就是方法区,里面有一个常量池 string存放在常量池 常量池溢出也可以导致持久代泄露 我认为1,3都可以

        • 王先生 学生 2016/04/01

          方法区和持久代的关系:
          方法区物理上存在于堆里,而且是在堆的持久代里面;但在逻辑上,方法区和堆是独立的。
          一般说堆的持久代就是说方法区,因为一旦JVM把方法区(类信息,常量池,静态字段,方法)加载进内存以后,这些内存一般是不会被回收的了。
          貌似1也是对的

  • 当时的情况就是这样... 软件开发工程师 2016/03/15

    1:如果只有一次,那么杠下来就没问题了。2:会。3:会。4:会。
    其实说到底,这几种方式都会引起OOM

  • sdkl   2016/03/15

    持久区的应该只有3吧

  • butcher Java 2016/03/16

    3应该是永久区,与堆关系不大。
    2会直接堆溢出。
    4看情况了,参数配置等,GC顺利的不会导致堆溢出。这项比较勉强。
    1应该关系不大。
    单选就是2 多选2 4

  • 小青年之梦 java软件开发工程师 2016/03/17

    3

  • 王先生 学生 2016/03/19

    答案应该为C(注意为持久区溢出)
    简单的来说,java堆内存分为两块,持久带和Heap sapce。
    持久带中主要存放静类型数据,如java class,Method等,与垃圾收集器要收集的java对象关系不大。而heapspace分为年轻带和年老带,年轻带的垃圾回收叫Young GC,年老的垃圾回收叫Full GC,在年轻代中经历了N次垃圾回收仍然存活的对象,就会被复制到年老代中,因此可以认为年老带中存放的都是一些生命周期较长的对象,年老代溢出的原因有循环上万次的字符串处理,创建上千万个对象,在一段代码内申请上百M甚至上G的内存,即ABD选项,持久带溢出的原因,动态加载了大量java类而导致溢出