H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

比如

public static String APP_NAME = "segmentFault";

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

回答:

静态成员是不会被回收的。楼主不用担心静态成员的值会莫名其妙的变化。如果代码中没有对 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变量的生命周期跟程序一致,怎么可能会被回收

本文地址:H5W3 » Android中静态变量被回收后值会变成什么?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址