静态变量,它们的寿命是多少?

时间:2012-06-21 08:54:35

标签: java android

我在我的应用程序中使用静态变量,其中很多。我的问题是,当我退出应用程序时,它们仍然会在内存中吗?如果是,我该如何纠正这个问题。提前谢谢。

9 个答案:

答案 0 :(得分:22)

当类被ClassLoader加载时,静态变量被加载,并且将被删除when it is Unloaded

答案 1 :(得分:10)

对于这个问题的下一个读者 -

  

正如大家在答案中所说,静态变量是类   变量。它们保留在内存中,直到该类没有从JVM卸载。

在Android中,您已经看到当我们关闭任何应用程序时它不会完全关闭, 它保留在最近的应用程序堆栈中,您可以通过长按主页按钮(在大多数设备上)看到。

 Android itself kicked out those recent apps when the other app needs memory

在Android中,静态变量在 -

时卸载
 -You force stop your app.
 -Application crashes.
 -You clear your app data.
 -Switch off your Device.
 -Android kicked out recent app  

答案 2 :(得分:7)

除了其他答案之外,还要注意,如果那些静态“变量”实际上是“静态最终”原始常量,那么它们根本就不是作为单独的实体存在,而是它们的值被编译到所有的使用它们的类(不仅仅是定义它们的类)。

答案 3 :(得分:6)

只要在JVM中加载类,静态变量就会存在。如果在JVM中没有运行类的实例,则将卸载该类,并且静态变量将被合法用于垃圾收集。

答案 4 :(得分:4)

静态变量与类相关联,只要类在内存中(它们在应用程序终止后就不再存在),它们就会存在。

答案 5 :(得分:3)

有时,您希望拥有所有对象共有的变量。这是通过static modifier完成的。 Fields that have the static modifier in their declaration are called static fields or class variablesThey are associated with the class, rather than with any objectEvery instance of the class shares a class variable, which is in 内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。

当实例不使用时,垃圾收集器会将其销毁。这意味着您的实例将从内存中删除。

答案 6 :(得分:3)

  

我在我的应用程序中使用了很多静态变量。

静态变量不受自动内存管理器的影响,你应该在onDestroy方法(Android)中将它们设置为null。他们属于一个肯定的类,它的确如此工作 @Jigar Joshi

答案 7 :(得分:2)

如果它是C / C ++,如果你没有收集垃圾,你应该使用内存管理程序。如果它是java,关闭来自内存的任何“javaw”程序并关闭jvm

答案 8 :(得分:2)

静态变量被称为类变量,并且在加载类时加载它们的范围,并在卸载类时卸载。例如像

这样的类变量
private int classinVar;

在加载类时由其默认值自动初始化,当您获得注销时,相同的概念与注销相关,然后该类将使用其静态字段脱离上下文。