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

标签 java variables optimization jvm variable-declaration

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

Student aStudent = new Student();
  1. 创建“学生”类型引用变量
  2. 使用“new Student()”创建“Student”对象
  3. 该对象分配有引用变量“aStudent”

到目前为止我知道,每次我们编写“new Student()”时都会创建一个新对象,并为新创建的对象分配一个内存空间。但有时我们会在 for 循环中写这样的东西 -

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

在这种情况下 -

  1. JVM 是否创建 Student 的新对象 10000 次?或者在幕后进行任何优化以节省内存。
  2. 如果发生任何优化,那么它是如何完成的?我怎样才能知道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/

相关文章:

java - Tomcat 目录,用于在重新启动和重新部署时保存信息

java - 从 XAgent 创建 Json

java - 返回方法中的 try 和 catch block

java - 在 for 循环中为每次迭代声明一个新变量

c# - 限制进程的CPU使用率

perl - 使用 Perl 解析文本文件的最有效方法是什么?

c++ - 优化重复系数评估

java zip 为二进制格式然后解压

c++ - C++中的抽象类声明

javascript - Javascript 和 ESLint 中的全局变量