for循环内的参考类型变量声明

时间:2014-04-22 13:47:13

标签: java variables optimization jvm variable-declaration

我们有一个学生班。形成我们知道的以下代码片段(Java) -

Student aStudent = new Student();
  1. A'学生'创建了类型引用变量
  2. '学生'的对象是使用' new Student()'
  3. 创建的
  4. 为对象分配参考变量' aStudent'
  5. 到目前为止,我知道,每次我们写新学生()'创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们在for循环中写这样的东西 -

    for ( int i=0; i<10000; i++) {
     Student student  = new Student();
     ...
     ...
     ...
    }
    

    在这种情况下 -

    1. JVM是否创建了10000次学生的新对象?或者在场景后面进行任何优化以节省内存。
    2. 如果发生了任何优化,那么它是如何完成的?我怎样才能知道for循环中实际创建的对象的数量。
    3. 提前致谢。

2 个答案:

答案 0 :(得分:2)

1.JVM创建10000次学生的新对象?或者在场景后面进行任何优化以节省内存。

是。将创建10,000个学生对象。最后,无法访问所有10000个,因为所有对象和引用都将超出范围(将创建10000个引用。每个对象1个)。所有对象和引用(名为student)都将超出范围,并为GC做好准备。

2.如果发生了任何优化,那么它是如何完成的?我如何知道for循环中实际创建的对象的数量

我不知道编译器在这种情况下是否进行了任何优化。但我所知道的是,如果你使用像codePro这样的静态代码分析工具,它会将此代码标记为警告。也就是说,你不应该在循环中创建对象。

答案 1 :(得分:1)

很抱歉,如果这个答案不准确,因为我对Java相对较新。

根据我的理解,将创建10000个对象,但除了1个之外的所有对象都有资格进行垃圾收集,因为没有任何东西指向其他对象。

垃圾收集器是幕后进行的唯一优化,但不能直接调用,但您可以通过简单地将其设置为null来建议对象进行垃圾收集,即:student = null;