2 s1175408521 s1175408521 于 2014.12.12 08:06 提问

如何让JAVA不自动回收某个类中的变量?

我的一个web应用中 初始化的时候会给一个类中的静态成员变量赋值,然后隔一段时间会改变成员变量中的值,这样java会自动回收吗?如果长时间不改变成员变量的值会给我回收掉吗?如果回收的话有什么办法可以不让他回收?

4个回答

caozhy
caozhy   Ds   Rxr 2014.12.12 12:49

静态类本身不会回收,但是如果你的程序运行在容器中(比如web程序),而容器本身会回收,这种情况相当于关闭了你的程序。那么当然这些变量全部都没有了。

你有两个办法,一个是根据容器的约定,阻止它回收。比如说容器规定,10分钟没有用户访问,就回收你的程序,那么你就每几分钟自己拨测下自己,产生一个响应,这样就不会回收了。
还有一个办法就是不断将这些变量存入数据库或者文件中,并且在启动的时候加载,这样就避免回收造成的数据丢失。

luowenlong860502
luowenlong860502   2014.12.12 08:41

可以明确告诉你只要程序不结束,类的静态成员变量是不会回收的

lxq_xsyu
lxq_xsyu   Rxr 2014.12.12 09:18

静态变量是不会回收的,除非你的应用(如果是web应用,服务关闭)退出才会回收。

lowanty
lowanty   2014.12.12 09:30

java虚拟机标准,定义的static变量是随服务主进程一同存在的。即服务进程在,static变量就不会被回收。。。通俗点,用tomcat部署的服务,只要服务还在,程序里面定义的static变量就一直存在。
在你的描述中有“然后隔一段时间会改变成员变量中的值”。对于全局静态变量,你需要在此处做好多线程同步问题。防止数据脏读脏写。。。如果你的静态变量是集合,请分析情况设计多线程并发问题。如果考虑不清楚,建议使用线程安全的集合。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!