java类中创建一个自身的静态对象,如何理解不会无限创建导致堆溢出?

lightGal 发布于 2016/03/06 15:45
阅读 691
收藏 0

在如下的MyShareObject中,new了一个 static final的自身对象,他会不会导致无限递归创建自身对象,从而使得堆溢出?

public class MySharedObject {

    //static variable pointing to instance of MySharedObject

    public static final MySharedObject sharedInstance =
        new MySharedObject();


    //member variables pointing to two objects on the heap

    public Integer object2 = new Integer(22);
    public Integer object4 = new Integer(44);

    public long member1 = 12345;
    public long member1 = 67890;
}



加载中
0
王涛
王涛
很明显不会,static关键字修饰后,表明该对象是类级成员,而类在java虚拟机里只加载一次,所以这里不会有问题
0
风之轮
风之轮
好像java虚拟机会把不使用的地址释放掉,所以不会有啥问题
0
huan
huan
这里不会有递归出现。建议你参考一下java字节码的加载和初始化过程。
0
算法与编程之美
算法与编程之美
无限递归会导致栈溢出,而不是堆溢出,概念性错误。
lightGal
lightGal
可是如果按我的理解,这里的无限递归导致的是在堆里无限创建新的MyShareObject对象,不是堆溢出吗?
返回顶部
顶部