静态变量是在类被load的时候分配内存的,并且存在于方法区。当类被卸载的时候,静态变量被销毁。

一、静态变量在类被加载的时候分配内存。

类在什么时候被加载?

当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个Dalvik VM的实例,然后代码就运行在DVM之上,类的加载和卸载,垃圾回收等事情都由DVM负责。也就是说在进程启动的时候,类被加载,静态变量被分配内存。

二、静态变量在类被卸载的时候销毁。

类在什么时候被卸载?

在进程结束的时候。

说明:一般情况下,所有的类都是默认的ClassLoader加载的,只要ClassLoader存在,类就不会被卸载,而默认的ClassLoader生命周期是与进程一致的,本文讨论一般情况。

三、Android中的进程什么时候结束

这个是Android对进程和内存管理不同于PC的核心——如果资源足够,Android不会杀掉任何进程,另一个意思就是进程随时可能会被杀掉。而Android会在资源够的时候,重启被杀掉的进程。也就是说静态变量的值,如果不做处理,是不可靠的,可以说内存中的一切都不可靠。如果要可靠,还是得保存到Nand或SD卡中去,在重启的时候恢复回来。

另一种情况就是不能把退出所有Activity等同于进程的退出,所以在用户点击图标启动应用的时候,以前存放于静态变量中的值,有可能还存在,因此要视具体情况给予清空操作。

四、Application也是一样不可靠

Application其实是一个单例对象,也是放在内存中的,当进程被杀掉,就全清空了,只不过Android系统会帮重建Application,而我们存放在Application的数据自然就没有了,还是得自己处理。

五、静态引用的对象不会被垃圾回收

只要静态变量没有被销毁也没有置null,其对象一直被保持引用,也即引用计数不可能是0,因此不会被垃圾回收。因此,单例对象在运行时不会被回收。

静态变量什么时候会被回收相关推荐

  1. 面向对象——概念(成员变量、静态变量、成员方法、静态方法、垃圾回收机制、重载、包)...

    静态变量和成员变量的区别: 1.成员变量描述的是对象的特征,包含在对象之中.不同的对象成员变量彼此独立.一个对象成员变量的改变,不会影响其他对象. 静态变量独立在对象之外,是所有对象共享的变量.静态变 ...

  2. C# 静态变量会被gc回收么?

    C# 静态变量会被gc回收么? 静态变量是放在 静态区 里面的,不受GC控制,只有程序关闭退出,内存才会被回收 当静态变量指向的内存对象变为unll时, 他之前引用的对象内存可以被回收 如果存在一个内 ...

  3. java 静态变量回收_浅谈静态变量的回收问题

    今天工作中遇到一个用于缓存数据到内存的静态变量Stringbuffer:当缓存数据大小达到5M的时候就把该缓存数据写到S3上:然后清空该缓存buffer;看了这段代码我觉得是不是有点问题:先贴大概的代 ...

  4. Android静态变量的生命周期

    Android是用Java开发,其静态变量的生命周期遵守Java的设计.我们知道静态变量是在类被load的时候分配内存的,并且存在于方法区.当类 被卸载的时候,静态变量被销毁.在PC机的客户端程序中, ...

  5. 堆栈,静态变量和普通变量,静态函数和普通函数的区别

    首先简单介绍一下堆和栈的区别. 1.内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1).栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似 ...

  6. 静态类和非静态类中静态变量

    深入理解C# 静态类与非静态类.静态成员的区别 静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具 ...

  7. [转载]内存分配 知识,全局,局部,静态变量

    [转载]内存分配 知识,全局,局部,静态变量 预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变 ...

  8. 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

    文章目录 一.静态变量 二. Java 引用类型 ( 强.软.弱.虚 ) 一.静态变量 GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象 ...

  9. 全局变量、成员变量、类变量、静态变量、实例变量、局部变量的定义与区别

    全局变量 全局变量又叫成员变量,它是声明在类里,函数,静态语句块外的变量,全局变量又分为类变量(静态变量).实例变量两种. 通过代码来看一下: private int i;//实例变量 private ...

最新文章

  1. Hello Struts2
  2. dubbo provider异步_Dubbo相关面试题
  3. 制造linux内核异常,了解Linux内核中的异常
  4. python 识别子串的位置_Python基础语法小白这一篇就足够了!
  5. 查询数据进行排名,一样的并列
  6. 编程基本功:学会抄,自然就会创新
  7. android ps模拟器 金手指,电脑ps模拟器金手指的使用教程
  8. matlab 函数pdf怎么用_怎么将Word转换成PDF?Word转PDF就得用这个工具
  9. 滴滴程序员年薪80万却被亲戚鄙视:钱多有啥用,我儿子二本大学教师
  10. 为何QQ突然能注销了?近年推行的大好事知多少
  11. cada0图纸框_按1:1画图后如何出A0图纸图框怎么设置?
  12. 什么是文件的绝对路径
  13. 华清远见-重庆中心-HTML、CSS技术总结
  14. r与python的区别和联系-Python和R语言的区别?
  15. Android开发系统应用程序
  16. C语言值的引用传递—引用传递(地址传递)
  17. leetcode阶段总结——拓扑排序
  18. HDU 2187汶川地震
  19. 超级账本Fabric 2.x 详细安装步骤及可能问题解决方式
  20. 鸿蒙os现在好用吗,全球首批!升级使用鸿蒙OS真实反馈评价出炉:差评/好评都很真实...

热门文章

  1. 小哥哥,小姐姐,我有一份tcp、http面试指南你要吗?
  2. fstab 与移动硬盘挂载方法
  3. 文件压缩支付加密方式
  4. 运放如何产生三角波信号
  5. 你告诉我,读书没有用
  6. R语言使用ARIMA模型预测股票收益时间序列
  7. 华能集团牵手阿里云 打造“互联物+”阳光采购样板工程
  8. 220413数据分析总结
  9. 基于RocketMQ设计秒杀
  10. Monty Hall Problem