我在我的应用程序中使用静态变量,其中很多。我的问题是,当我退出应用程序时,它们还会在内存中吗?如果是,我该如何纠正。提前致谢。
9 回答
静态变量在 ClassLoader 加载类时加载,在卸载时将被删除
对于这个问题的下一个读者-
正如每个人在答案中所说的那样,静态变量是类变量。它们保留在内存中,直到类没有从 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
只要类加载到 JVM 中,静态变量就会存在。当 JVM 中不再运行该类的实例时,该类将被卸载并且静态变量将有资格进行垃圾收集。
除了其他答案之外,还要注意,如果这些静态“变量”实际上是“静态最终”原始常量,那么它们根本不作为单独的实体存在,但它们的值被编译到所有使用的类中它们(不仅仅是定义它们的那个)。
静态变量与一个类相关联,只要类在内存中,它们就会一直存在(一旦应用程序终止,它就不再存在)。
有时,您希望拥有所有对象共有的变量。这是通过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
内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
当实例不使用时,垃圾收集器将销毁它。这意味着您的实例将从内存中删除。
我在我的应用程序中使用静态变量,其中很多。
静态变量不受自动内存管理的影响,您应该在方法中将它们设置为nullonDestroy
(Android)。它们肯定属于一个类,它的工作原理与@Jigar Joshi指出的完全一样。
如果是 C/C++,如果你没有收集垃圾,你应该使用内存管理程序。如果是java,请从内存中关闭所有“javaw”程序并关闭jvm
静态变量被称为类变量,它们在加载类时加载,在卸载类时卸载。例如一个类变量,如
private int classinVar;
类加载时会自动初始化为默认值,当你退出时,同样的概念是退出,然后该类将脱离其静态字段的上下文。