Java 循环内部的变量声明
有时,我们发现在for循环中声明了一个引用类型变量,如下所示-Java 循环内部的变量声明,java,performance,for-loop,Java,Performance,For Loop,有时,我们发现在for循环中声明了一个引用类型变量,如下所示- for(int i=0; i<1000; i++){ User aUser = new User(id); //some other code } for(int i=0;i 声明引用类型是否会降低性能 for循环中的变量 在这种情况下,您将创建指向新对象的新引用。即使您将引用User aUser移出循环,它也将导致创建1000个对象,但不会一次又一次地创建引用变量。在我看来,您可以将引用变量移出,但可
for(int i=0; i<1000; i++){
User aUser = new User(id);
//some other code
}
for(int i=0;i
声明引用类型是否会降低性能
for循环中的变量
在这种情况下,您将创建指向新对象的新引用。即使您将引用User aUser
移出循环,它也将导致创建1000个对象,但不会一次又一次地创建引用变量。在我看来,您可以将引用变量移出,但可能不会导致大的性能变化h、 但何时使用取决于。IMO如果引用变量在循环外,它将指向循环中最后创建的对象,但如果它在循环内,那么它们指向的所有引用和对象都将准备好进行垃圾收集
内存一次包含1000个用户对象吗
是的,它可能会一直运行,直到它们都被GC垃圾收集,它何时运行我们永远无法预测
如果为每个迭代分配一个新的引用,可能会对性能造成轻微的影响。在进入循环之前声明用户aUser;同样容易。但是,我怀疑性能损失是否会非常明显(如果有的话)
变量aUser使用的内存应该在每次迭代后循环使用。这可能不会立即发生(Java不保证垃圾收集何时发生)
在for循环中声明引用类型变量是否会降低性能
每当分配给新对象的JVM获得堆来进行分配时。是的,可能会有轻微的性能
由于获取锁定和释放的重复过程而导致降级
内存一次包含1000个用户对象吗
是,Java堆将包含1000个用户对象。如果GC没有对该对象的任何强传出/传入引用,它将清除这些对象
ThreadLocalHeap避免为对象分配获取heaplock。它不分配大对象。它可以在java堆上分配大小超过JVM do分配的512字节的对象,这涉及堆锁。如果用户对象小于512字节,则性能降低的可能性较小,但无论如何,所有1000个对象都将java堆中的ent