Android中静态变量被回收后值会变成什么?

比如

public static String APP_NAME = "segmentFault";

当APP_NAME被回收后,APP_NAME的值会变成null,还是不确定的乱七八糟的值?

阅读 7.3k
8 个回答

静态成员是不会被回收的。楼主不用担心静态成员的值会莫名其妙的变化。如果代码中没有对 APP_NAME 进行另外的赋值,那么它的值永远都是 "segmentFault"。

新手上路,请多包涵

Android里static也是不安全的,因为内存吃紧,进程按照级别会被回收,自然与进程同生命周期的static也是会被回收掉的,这里就为null了。如果需要保存通过安卓的onSaveInstanceState(Bundle outState)通过bunlde保存到Disk上。

你对内存回收的理解有问题,对象回收首先是不再引用某块内存地址,GC把该块内存回收,而不是先把这块儿内存回收导致变量为null

强引用的变量在任何情况都不会被回收,当内存实在不够时会抛出 OutOfMemory 异常让 App Crash 掉,再次运行时也会重新初始化。

不过如果在其他进程访问这个进程的静态变量是访问不到的,会获得 null 或 默认值。

C语言里 free 内存后有个比较好的做法就是在 free 后把指针赋为 NULL 。

至于 Java 应该也是类似,原来的引用指向的内存虽然还在但是已经不属于程序了。

而且,回收这件事应该是 GC 确保你不会再访问这个变量之后进行的。 因此你也无法得知值是什么了。

硬要说的话,应该是迷失在广阔无垠的数据海洋里。 (堆里)

哈哈哈,乱七八糟的值,一看楼主就是学过C的

JVM的结构图:
JVM

static 在method area中,不会被回收。

static变量的生命周期跟程序一致,怎么可能会被回收

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题