我们有一个学生班。形成我们知道的以下代码片段(Java) -
Student aStudent = new Student();
到目前为止,我知道,每次我们写新学生()'创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们在for循环中写这样的东西 -
for ( int i=0; i<10000; i++) {
Student student = new Student();
...
...
...
}
在这种情况下 -
提前致谢。
答案 0 :(得分:2)
1.JVM创建10000次学生的新对象?或者在场景后面进行任何优化以节省内存。
是。将创建10,000个学生对象。最后,无法访问所有10000个,因为所有对象和引用都将超出范围(将创建10000个引用。每个对象1个)。所有对象和引用(名为student)都将超出范围,并为GC做好准备。
2.如果发生了任何优化,那么它是如何完成的?我如何知道for循环中实际创建的对象的数量
我不知道编译器在这种情况下是否进行了任何优化。但我所知道的是,如果你使用像codePro这样的静态代码分析工具,它会将此代码标记为警告。也就是说,你不应该在循环中创建对象。
答案 1 :(得分:1)
很抱歉,如果这个答案不准确,因为我对Java相对较新。
根据我的理解,将创建10000个对象,但除了1个之外的所有对象都有资格进行垃圾收集,因为没有任何东西指向其他对象。
垃圾收集器是幕后进行的唯一优化,但不能直接调用,但您可以通过简单地将其设置为null来建议对象进行垃圾收集,即:student = null;