让我们有一个学生类(class)。形成以下代码片段(Java)我们知道 -
Student aStudent = new Student();
- 创建“学生”类型引用变量
- 使用“new Student()”创建“Student”对象
- 该对象分配有引用变量“aStudent”
到目前为止我知道,每次我们编写“new Student()”时都会创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们会在 for 循环中写这样的东西 -
for ( int i=0; i<10000; i++) {
Student student = new Student();
...
...
...
}
在这种情况下 -
- JVM 是否创建 Student 的新对象 10000 次?或者在幕后进行任何优化以节省内存。
- 如果发生任何优化,那么它是如何完成的?我怎样才能知道for循环中实际创建的对象的数量。
提前致谢。
最佳答案
1.JVM会创建Student的新对象10000次吗?或者在幕后进行任何优化以节省内存。
是的。将创建 10,000 个 Student 对象。最后,所有 10000 个都无法访问,因为所有对象和引用都将超出范围(是的,将创建 10000 个引用。每个对象 1 个)。所有对象和引用(名为student)都将超出范围并准备好进行GC。
2.如果发生了优化,那么是如何进行的?我怎样才能知道for循环中实际创建的对象的数量
我不知道编译器在这种情况下进行了任何优化。但我知道的是,如果你使用像codePro这样的静态代码分析工具,它会将这段代码标记为警告。即,您不应该在循环中创建对象。
关于java - for 循环内的引用类型变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23221447/