A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zxg08042810 中级黑马   /  2014-2-26 11:17  /  929 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问static变量,在不用的时候,jvm什么时候释放内存?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
如果是简单类型,如int, char之类的:
static int i;
static char c;
那么,由于内存是在栈(Stack)上分配的,所以一直到程序结束,它们都始终占有原来的内存。

如果是对象类型:
那么只有其引用才在栈上分配内存,对象本身是在存放在堆(Heap)上的。所以,引用会一直占有栈上的内存,而对象何时回收又分二种情况:
1. 对于所有用new运算符生成的对象,它们都可以通过将其引用设为null,来通知垃圾回收器(GC)回收对象所占的内存。
2. 对于直接用字符串字面量来赋值的String对象,JVM会将String字面量处理为String常量,并且保证同一个String常量不会被重复创建。String常量单独享有一块内存,而且一旦创建就不会回收。

所以,如果是static的简单类型,你无法控制它的生命期;如果是static的对象类型,并且不是String字面量,那么在不用的时候尽量将其引用指向null,来通知GC回收就可以了。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

它会随类的加载而加载,
也随类的消失而消失,生命周期最长
static还有一些特点,看下面


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马