我在我的应用程序中使用静态变量,其中很多。我的问题是,当我退出应用程序时,它们仍然会在内存中吗?如果是,我该如何纠正这个问题。提前谢谢。
答案 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 variables
。 They are associated with the class, rather than with any object
。Every 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;
在加载类时由其默认值自动初始化,当您获得注销时,相同的概念与注销相关,然后该类将使用其静态字段脱离上下文。