【发布时间】:2014-05-08 14:13:19
【问题描述】:
class MyNetPack {
Long count;
public MyNetPack() {
count = Long.valueOf(0);
}
public void reinit(Long count) {
this.count = count;
}
public void process() {
/* Some calculation */
}
}
public class MyWork {
public static void main(String[] args) {
MyNetPack my = new MyNetPack();
for (long i = 1; i < 100000000; i++) {
my.reinit(i);
my.process();
}
}
}
我正在使用
创建单个对象MyNetPack my=new MyNetPack();
之后用 reinit 方法重用同一个对象,如下所示,
for (long i = 1; i < 100000000; i++) {
my.reinit(i);
my.process();
}
请说明堆栈和堆级别的初始内存分配和内存重用。
据我了解
MyNetPack 引用持有者将在堆栈中分配,对象将在堆中分配(使用引用持有者进行计数)。每次在 for 循环中,count 的实际值(比如 1,2,3..)都会在堆中重新分配,并且引用会放在 MyNetPack->count 引用持有者中。
指导我尽量减少新对象和内存分配..
谢谢 约瑟夫
【问题讨论】:
-
我不认为它会通过循环的迭代为每个数字保留新的空间,它只会改变已经在保留堆内存中的值。
-
引用类型或多或少是正确的,但由于
long是原始类型,因此并非如此。 -
我想尽量减少GC...
标签: java performance