我了解到,
如果调用一个类的静态变量时,它所在的类还没有被加载,就会开始类的加载、初始化过程;
如果这个静态变量使用完了,也没有引用指向它了,静态变量所在的类就可以被gc回收了;
静态变量是存放在方法区的,类的对象是存放在堆内存的,类被回收了,静态变量会被一起回收吗?
我猜是不会的,因为方法区很少涉及到gc,而且静态变量是持续到进程的生命周期结束的。
如果上面说的都对,那再次调用这个静态变量的时候,如果所在的类被回收了,是否会再重新进行一次加载和初始化过程?
谢谢
我了解到,
如果调用一个类的静态变量时,它所在的类还没有被加载,就会开始类的加载、初始化过程;
如果这个静态变量使用完了,也没有引用指向它了,静态变量所在的类就可以被gc回收了;
静态变量是存放在方法区的,类的对象是存放在堆内存的,类被回收了,静态变量会被一起回收吗?
我猜是不会的,因为方法区很少涉及到gc,而且静态变量是持续到进程的生命周期结束的。
如果上面说的都对,那再次调用这个静态变量的时候,如果所在的类被回收了,是否会再重新进行一次加载和初始化过程?
谢谢
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
如果静态变量还被引用的话,静态变量所处的类为什么会被回收呢?这个前提感觉就是不存在的吧。