17

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

4

9 回答 9

29

静态变量在 ClassLoader 加载类时加载,在卸载时将被删除

于 2012-06-21T09:00:23.360 回答
12

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

正如每个人在答案中所说的那样,静态变量是类变量。它们保留在内存中,直到类没有从 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  
于 2013-08-27T17:18:27.167 回答
8

只要类加载到 JVM 中,静态变量就会存在。当 JVM 中不再运行该类的实例时,该类将被卸载并且静态变量将有资格进行垃圾收集。

于 2012-06-21T08:58:55.093 回答
8

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

于 2012-06-21T08:59:00.590 回答
4

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

于 2012-06-21T08:56:39.877 回答
3

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

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

于 2012-06-21T08:59:00.043 回答
3

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

静态变量不受自动内存管理的影响,您应该在方法中将它们设置为nullonDestroy (Android)。它们肯定属于一个类,它的工作原理与@Jigar Joshi指出的完全一样。

于 2012-06-21T08:59:22.150 回答
2

如果是 C/C++,如果你没有收集垃圾,你应该使用内存管理程序。如果是java,请从内存中关闭所有“javaw”程序并关闭jvm

于 2012-06-21T08:59:52.027 回答
2

静态变量被称为类变量,它们在加载类时加载,在卸载类时卸载。例如一个类变量,如

private int classinVar;

类加载时会自动初始化为默认值,当你退出时,同样的概念是退出,然后该类将脱离其静态字段的上下文。

于 2012-06-21T09:55:33.360 回答