对象与垃圾回收
gc只负责回收堆内存中的对象,不会回收任何物力资源(如数据库连接,网络IO等)。
程序无法精确控制gc的运行,gc会在合适的时候进行。当对象永久失去引用后(=null),系统就会在合适的时候回收它所占的内存。
在gc回收任何对象之前,总会调用它的finalize方法,该方法可能使对象重新获得引用,导致gc取消回收。
##对象在内存中的状态:
可达状态:对象被创建后,有一个以上的变量引用它,程序可通过引用变量来调用该对象的实例变量和方法。
可恢复状态:程序中某个对象不再有任何变量引用它,它进入可恢复状态,gc准备回收该对象所占的内存,在回收该对象之前,系统会调用所有可恢复状态对象的fina
2017-12-12
JVM
Handler可能引起的内存泄漏
参考文章http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1106/1922.html
在用handler的时候如果这么用就一定会发生内存泄漏:
public class MainActivity extends AppCompatActivity {
private Handler myHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg
2017-12-04
Android
静态变量何时被gc回收?
参考:http://blog.csdn.net/yogkin/article/details/53404855结论:只要静态变量没有被销毁也没有=null,其对象就一直被保持引用,也即引用计数不可能是0,不会被垃圾回收。
文中还有4个关于静态变量的点:
静态变量在类被加载的时候分配内存。类在什么时候被加载?当我们启动一个app的时候,系统会创建一个进程,此进程会加载一个Dalvik VM的实例,然后代码就运行在DVM之上,类的加载和卸载,垃圾回收等事情都由DVM负责。也就是说在进程启动的时候,类被加载,静态变量被分配内存。
静态变量在类被卸载的时候销毁。类在什么时候被卸载?在进程结束的
2017-12-04
Android
对象序列化
1.Serializable接口2.Parcelable接口
##Serializable接口java中的接口,使用简单,开销大(IO操作多),主要用于将对象序列化到存储设备中或者通过网络传输对象。标识接口,没有方法,直接实现这个接口就可以序列化用ObjectOutputStream和ObjectInputStream操作。
##Parcelable接口主要要用于在内存中序列化,效率高,android平台专属,一般用于Intent中传递对象
public class Person implements Parcelable {
private String name;
pri
2017-12-01
Android