2012-06-21 4 views
9

내 앱에서 정적 변수를 사용하고 있습니다. 내 질문은, 내가 애플 리케이션을 종료 할 때 그들은 여전히 ​​메모리에있을 것입니다 ..? 그렇다면이 문제를 어떻게 해결할 수 있습니까? 미리 감사드립니다.정적 변수, 수명은 어떻게됩니까?

+3

는 "signout"무엇을 의미합니까 핑할 때는 정적 변수 언로드? 프로그램/프로세스/JVM을 종료 하시겠습니까? – Thilo

+1

@Thilo 나는 그가 안드로이드 애플 리케이션에 대해 이야기하고 있다고 생각한다 ... 그, Raghav를 지정하십시오. – brimborium

+3

더 많은 예제를 제공 할 수 있습니까? 또는 나는이 질문이 오래 머무를 것이라고 믿지 않는다. – kommradHomer

답변

22

정적 변수는 클래스가 클래스 로더에 의해로드 될 때로드되는, 제거 할 것 when it is Unloaded

2

응용 프로그램이 중지 된 후에 변수가 메모리에 남아 있지 않습니다.

4

정적 변수는 클래스와 연결되어 있으며 클래스가 메모리에있는 동안 지속됩니다 (응용 프로그램이 종료되면 존재하지 않음).

+4

을 깨끗하게 할 수 없다거나 클래스가 언로드되면 (매우 드물게 발생한다) 생각한다. – Thilo

6

정적 변수는 클래스가 JVM에로드되는 동안 지속됩니다. JVM에서 클래스의 인스턴스가 더 이상 실행되지 않으면 클래스가 언로드되고 정적 변수가 가비지 수집을 위해 적합 할 것입니다.

+6

인스턴스가없는 경우에도 클래스는 언로드되지 않습니다. 전체 클래스 로더가 사라질 때만 언로드됩니다. – Thilo

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메모리의 고정 위치가입니다. 모든 객체는 클래스 변수의 값을 변경할 수 있지만 클래스 변수를 만들지 않고도 클래스 변수를 조작 할 수 있습니다.

인스턴스가 사용되지 않으면 가비지 수집기가이를 파괴합니다. 인스턴스가 메모리에서 지워진다는 의미입니다.

7

다른 답변 외에도 정적 "변수"가 실제로 "정적 최종"원시 상수 인 경우 실제로는 별개의 엔터티로 존재하지 않지만 그 값은 모두로 컴파일됩니다. 그것들을 사용하는 클래스 (그것들을 정의하는 클래스 뿐만이 아니다).

3

내 앱에서 정적 변수를 사용하고 있습니다.

정적 변수는 자동 메모리 관리자로부터 영향을받지 않으므로 onDestroy 메소드 (Android)에서 null로 설정해야합니다. 그들은 수업에 속하며 정확하게 그것은 @ Jigar Joshi으로 작동합니다.

+3

여기에는 'Android'에 대한 언급이 없습니다. –

+1

sry man, my fault, classic java에서도 똑같이 null로 설정해야합니다. – Sajmon

2

C/C++ 인 경우 garbages를 수집하지 않으면 메모리 관리 프로그램을 사용해야합니다. 이 자바 인 경우, 메모리와 가까운 JVM에서 어떤 "javaw를"프로그램을 종료

+2

도 C/C++에서 프로세스가 종료되면 (이 질문에 대한 것이면) OS는 모든 메모리를 해제합니다. – Thilo

2

정적 변수는 클래스 변수와의 방법이라고 클래스가로드 될 때로드 된 클래스. 클래스가 언로드 될 때 언로드됩니다. 클래스가로드 될 때, 예를 들어

private int classinVar; 

같은 클래스 변수가 자동으로 기본값으로 초기화됩니다, 당신은 그 클래스의 정적 필드와 문맥 갈 것 signout 얻을 때 동일한 개념은 signout 함께. 모두 정적 변수 변수 클래스이라는 질문에 말했듯이 차기 독자

10

을 설문. 클래스가 JVM에서 언로드되지 않을 때까지 메모리에 남아 있습니다.우리가 다음 응용 프로그램을 닫을 때 완전히 종료하지 않는 것을 보았다 안드로이드에서

, 그것은 당신이 길게 누르면 (대부분의 장치) 홈 버튼을 볼 수있는, 최근의 애플리케이션 스택에 남아 있습니다.

안드로이드에서
Android itself kicked out those recent apps when the other app needs memory 

,

-You force stop your app. 
-Application crashes. 
-You clear your app data. 
-Switch off your Device. 
-Android kicked out recent app 
관련 문제