例子如下:
A是一个类,fun是其成员函数,还包含其他较占内存的数据成员
A a=new A();
do
{
a.fun();}while(true);
a的资源是不是始终没有释放?程序运行过程是不是会引起内存的持续增加?如果采用下列方式
A a;
do
{
a=new A();
a.fun();}while(true);
a=new A()后上次申请的内存会释放吗?
这两种方式,那种更合理?更节约内存?
A是一个类,fun是其成员函数,还包含其他较占内存的数据成员
A a=new A();
do
{
a.fun();}while(true);
a的资源是不是始终没有释放?程序运行过程是不是会引起内存的持续增加?如果采用下列方式
A a;
do
{
a=new A();
a.fun();}while(true);
a=new A()后上次申请的内存会释放吗?
这两种方式,那种更合理?更节约内存?
前面的方式,a占用的资源当然不会释放,因为它还在使用中,如果它持续引用其他占用内存的数据成员,的确会引起内存的持续消耗,但这与a没有直接关系,如果其他数据成员不再使用的话,可以将其置为null,让它们有机会被回收。a本身需要消耗总归是要消耗的,不会因为你重新new一个对象就会减少。
不是会把你之前的数据给更新掉了么。。这么做还会多些开销。我觉得你这两种方式对于内存消耗来说没什么区别。运用个第一种方式更合理一些。。
好像没有电子版,这本书是相当好的。
http://www.dearbook.com
进入后选择“销售排行”看看,排在5.6名的就是,
do
{
a.fun();}while(true);
这种好,a 只是个临时变量当方法结束后很快就会被回收
第二个例子每循环一次,都要实例化新的对象,原来的对象被GC回收