Java for循环内的引用类型变量声明

Java for循环内的引用类型变量声明,java,variables,optimization,jvm,variable-declaration,Java,Variables,Optimization,Jvm,Variable Declaration,让我们有一个学生班。形成我们知道的以下代码片段(Java)—— Student aStudent = new Student(); 创建了“Student”类型引用变量 使用“new Student()”创建了一个“Student”对象 对象被分配了引用变量“aStudent” 到目前为止,我知道,每次编写“new Student()”时,都会创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们在for循环中写这样的东西- for ( int i=0; i<10000; i++)

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

Student aStudent = new Student();
  • 创建了“Student”类型引用变量
  • 使用“new Student()”创建了一个“Student”对象
  • 对象被分配了引用变量“aStudent”
  • 到目前为止,我知道,每次编写“new Student()”时,都会创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们在for循环中写这样的东西-

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

    for(int i=0;i1.JVM是否创建了10000次Student的新对象?或者在幕后进行任何优化以节省内存

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

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


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

    1.JVM会创建10000次Student的新对象吗?或者任何优化都是在幕后进行的节省内存

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

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


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

    1.JVM会创建10000次Student的新对象吗?或者任何优化都是在幕后进行的节省内存

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

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


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

    1.JVM会创建10000次Student的新对象吗?或者任何优化都是在幕后进行的节省内存

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

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


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

    很抱歉,如果这个答案不准确,因为我对Java比较陌生

    据我所知,将创建10000个对象,但其中只有1个对象符合垃圾收集条件,因为没有任何对象指向其他对象


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

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

    据我所知,将创建10000个对象,但其中只有1个对象符合垃圾收集条件,因为没有任何对象指向其他对象


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

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

    据我所知,将创建10000个对象,但其中只有1个对象符合垃圾收集条件,因为没有任何对象指向其他对象


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

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

    据我所知,将创建10000个对象,但其中只有1个对象符合垃圾收集条件,因为没有任何对象指向其他对象


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

    ,这意味着除了activ之外,所有先前创建的student对象都可以用于垃圾收集e一个?不。学生在for循环外不可见。所以,所有10000个对象