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

问题描述

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

解决方案

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

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

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

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

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

时间: 2025-01-20 13:16:06

成员变量-如何让JAVA不自动回收某个类中的变量?的相关文章

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta

java反射_改变private中的变量及方法的简单实例_java

java反射_改变private中的变量及方法的简单实例 class DemoTest{ private String name="123"; public getName(){ system.out.println("public getName " + name); return name; } private getName2(){ system.out.println("private getName2 " + name); return

关于function类中定义变量this的简单说明_javascript技巧

关于function类中定义变量this的简单说明 <!DOCTYPE html> <html> <head> </head> <script> function TObject(){ this.name1 = "aa";//这里不能写name,name是window的变量.否则无法得到验证结果 } var t = new TObject();//执行中,this代表t alert("window1="+t

c#-C#中在类中定义变量,为什么不能赋值textbox的值

问题描述 C#中在类中定义变量,为什么不能赋值textbox的值 static int i=convert.toint32(textbox1.text); 这是在类中定义的,但是报错,非静态定义 解决方案 因为textbox1不是静态的,所以不能访问,去掉static 解决方案二: static赋值的变量也必须是static的,

java 初始化 对象-导出类中默认创建基类的子对象

问题描述 导出类中默认创建基类的子对象 读<Java编程思想第四版>第7章复用类,7.2.1初始化基类中, 描述当创建一个导出类对象的时候会自动创建一个基类子对象. 那如果我继承自一个抽象类,那么编译器会怎么处理呢? 解决方案 抽象类是不能实例化的,基类的构造函数只是设置了这个类的属性等,这个对象是一个子类的对象,只是可以用父类指向它而已. 也就是说创建一个子类的时候,没有创建两个对象,而是一个对象.

我知道类中静态成员变量一被加载就存在,问题是:它的初始值是什么时候被赋的????

问题描述 静态成员变量在被加载的同时就被赋个初始值?还是该静态成员变量在被引用时或所在类被实例化时,由静态构造函数对其赋初值啊???????????? 解决方案 解决方案二:什么时候无法确定,但一般当类被调用时初始化解决方案三:你只要知道在你用之前肯定会初始化就行了解决方案四:类第一次被调用时就会按顺序依次初始化静态变量.调用静态构造函数

如何动态创建类中的变量

问题描述 类结构如下:publicclassmyclass{publicstringa{get;set;}publicstringb{get;set;}publicstringc{get;set;}publicstringd{get;set;}publicstaticIList<myclass>myIlist(stringarray)//array传值:b,c{string[]arr=array.Splist(newchar[]{','})IList<myclass>bk=newL

java源码-DataOutputStream类中的close方法

问题描述 DataOutputStream类中的close方法 各位好,今天试用了一下,DataOutputStream类,当我使用后关闭DataOutputStream对象的时候,构造时传入的FileOutputStream流也被关闭了.文档里也是这么写的,但是我去查看源码时只发现了在FilterOutputStream类中的这么一小段: public void close() throws IOException { try (OutputStream ostream = out) { fl

Java面向对象基础--String类中常用的方法

split()和replaceAll()这两个方法需要正则支持. public class StringAPIDemo06{ public static void mian(String args[]){ String str1 = " hello "; //定义字符串 System.out.println(str1.trim());//去掉左右空格后输出 } }