我的理解是这样的,静态变量的引用将一直在stack中,所以该引用对应的heap里的对象不会回收。
那么
1.类的静态变量生命周期是从加载该类开始到程序停止?
2.在内存吃紧情况下会不会被回收?
具体业务是我想实现这样的功能,将常用&&数据量不大&&数据不经常改动 的数据在程序启动时加载到内存(放到静态变量Map里面),更新删除数据库数据时同时更新内存,程序访问数据访问内存,不访问数据库。
请问这样是否合理?有没有更好地办法?
请各路大神指教 谢谢!
你的做法是可以的,没有问题。
如果你了解redis或者memcache的话可以用这些代替直接放入jvm内存,当然不用这些也ok
1.类的静态变量生命周期是从加载该类开始到程序停止?
是类被加载时开始 类被卸载时停止
2.在内存吃紧情况下会不会被回收?
不会 但 interned String会被回收掉一些
不过 java 8的Hotspot JVM实现中似乎会移除掉永久代 将类的元数据放在本地内存 将类的静态变量和interned String 放在java 堆中
具体可以看看这个:
http://openjdk.java.net/jeps/122