问题描述
- 如何让JAVA不自动回收某个类中的变量?
- 我的一个web应用中 初始化的时候会给一个类中的静态成员变量赋值,然后隔一段时间会改变成员变量中的值,这样java会自动回收吗?如果长时间不改变成员变量的值会给我回收掉吗?如果回收的话有什么办法可以不让他回收?
解决方案
静态类本身不会回收,但是如果你的程序运行在容器中(比如web程序),而容器本身会回收,这种情况相当于关闭了你的程序。那么当然这些变量全部都没有了。
你有两个办法,一个是根据容器的约定,阻止它回收。比如说容器规定,10分钟没有用户访问,就回收你的程序,那么你就每几分钟自己拨测下自己,产生一个响应,这样就不会回收了。
还有一个办法就是不断将这些变量存入数据库或者文件中,并且在启动的时候加载,这样就避免回收造成的数据丢失。
解决方案二:
可以明确告诉你只要程序不结束,类的静态成员变量是不会回收的
解决方案三:
静态变量是不会回收的,除非你的应用(如果是web应用,服务关闭)退出才会回收。
解决方案四:
java虚拟机标准,定义的static变量是随服务主进程一同存在的。即服务进程在,static变量就不会被回收。。。通俗点,用tomcat部署的服务,只要服务还在,程序里面定义的static变量就一直存在。
在你的描述中有“然后隔一段时间会改变成员变量中的值”。对于全局静态变量,你需要在此处做好多线程同步问题。防止数据脏读脏写。。。如果你的静态变量是集合,请分析情况设计多线程并发问题。如果考虑不清楚,建议使用线程安全的集合。
时间: 2025-01-20 13:16:06