Java에서 메모리를 해제하는 데 사용되는 키워드 또는 기능은 무엇입니까?"Java 용 __________"은 "C에서 사용 가능"또는 "C++에서 삭제"
답변
Java에서 메모리를 해제하지 마십시오. JVM에 의해 garbage collected입니다.
객체는 런타임에 힙에 할당되는 새로운 객체에 대한 자바의 "새로운" 연산자 및 메모리에 의해 만들어집니다. 가비지 수집은 이 더 이상 프로그램에서 참조하지 않는 개체를 자동으로 해제하는 프로세스입니다.
Java는 garbage collected입니다. 즉, 명시 적으로 메모리를 해제하지 않습니다. 대신, JVM은 더 이상 참조되지 않을 때 메모리를 자동으로 해제합니다. 참조하는 변수를 null
으로 설정하여 명시 적으로 참조 해제했으나이를 반드시 가비지 수집한다고 보장 할 수는 없습니다.
나는 이것에 대해 처음 알게 된 사람들이 어떻게 반응하는지 궁금해합니다. ("잠깐, 할 수있어, 자동으로 할 수 있니?") * HEAD EXPLODES *') – polygenelubricants
제 반응은 "차가워졌습니다!"이제는 유용한 것들을 구현하는데 집중할 수 있습니다. " (처음으로 가비지 수집에 대한 직접적인 경험은 1980 년대 CLU에서였습니다.) –
아마 "실제로 메모리를 해제하려면 어떻게해야합니까?" 그리고 나서 그들이 통제 할 수 없다는 것을 알게되면 머리가 폭발합니다. 그리고 System.gc()를 발견하고 가비지 수집에 대한 제안 일 뿐이라는 것을 알았을 때 또 다른 폭발이있었습니다. – Matt
아마도 System.gc()
을 원하십니까?
'System.gc()'는 일반적으로 나쁜 생각입니다. 그것은'Runtime.getRuntime(). gc()'과 동일하며, 내가 보았던 "쓰레기 수거"가비지 수집을 실행합니다. 쓰레기 수거는 쓰레 디드 프로그램에서 파괴적 일 수 있습니다.). – JBirch
정말 잘못된 IDEA가 아닌'System.gc()'는'free' 또는'delete'와 유사하지 않습니다. 가장 좋은 대답은 "아날로그가 없다"입니다 ... –
아주 제한된 수의 시나리오에서 'System.gc()'를 호출하는 것이 유용 할 수 있지만 요청 일 뿐이라는 것을 기억하는 것이 중요합니다. VM에 의해 무시된다. – Yuval
JVM에서 가비지 수집됩니다. 따라서 우리는 메모리를 명시 적으로 해제 할 필요가 없습니다.
자바에서는 개체가 garbagecollected 일 때 JVM 메모리가 자동으로 회수됩니다. Java의 오브젝트가 더 이상 참조되지 않거나 강하게 참조되지 않으면 (약하게 참조되는 경우) 가비지 콜렉션의 대상이됩니다. 그렇다고해서 Java 프로그램에서 메모리 누수가 발생하지는 않습니다. 주의를 기울이지 않으면 고전적인 예 에서처럼 메모리 누수가 발생할 수 있습니다.
public class Stack {
private Object[] elements;
private int size = 0;
public Stack(int initialCapacity) {
this.elements = new Object[initialCapacity];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
/**
* This method leaks memory
*/
public Object leakyPop() {
if (size == 0)
throw new EmptyStackException();
// here is the leak, This object will never be GC'd because its still
// referenced in the elements array
return elements[--size];
}
/**
* This has a fix to avoid memory leak
*/
public Object pop() {
if (size == 0)
throw new EmptyStackException();
Object result = elements[--size];
// To avoid the leak you need to eliminate the reference here explicitely
elements[size] = null;
return result;
}
/**
* Ensure space for at least one more element,
*/
private void ensureCapacity() {
//...
}
}
- 1. C에서 파일 삭제
- 2. C에서 데이터베이스에서 삭제
- 3. C에서 데이터베이스 삭제
- 4. C에서 배열 목록에서 파일을 삭제
- 5. C에서 무료() 사용
- 6. C에서 루프의 strtok() 사용?
- 7. C에서 argv 사용?
- 8. Objective C에서 '^'기호 사용
- 9. C에서 단축키 사용 #
- 10. C에서 nullable 형식 사용
- 11. C에서 재귀 사용 #
- 12. Objective C에서 extern 사용
- 13. C에서 프린터 사용
- 14. Objective C에서 CString 사용
- 15. C에서 SHA1 사용
- 16. Objective-C에서 프로토콜 버퍼 사용
- 17. C에서 #
- 18. pre_order C에서 스택 사용 traversal
- 19. SWIG에서 C에서 Ruby 블록 사용
- 20. C에서 트리 노드 클래스 사용 #
- 21. C에서 가상 함수의 실제 사용 #
- 22. C에서 자동 완성 기능 사용
- 23. Objective-C에서 enum을 사용 하시겠습니까?
- 24. 객관적인 C에서 중첩 참조 사용
- 25. C에서 mount (2) 함수 사용
- 26. C에서 폴더 경로에/또는 \\ 사용
- 27. C에서 sendInput을 사용하여 마우스 사용
- 28. 프로그래밍 방식으로 C에서 CMD 사용
- 29. C에서 두 번 사용 가능합니까?
- 30. C에서 비트 세트 컨테이너를 사용 ++
이 시험 문제에 코스 제목과 태그를 붙이면 어떻습니까? –
@ Boris Pavlović : 아니요, 이것은 IQ 테스트입니다. "양말이 [] 신발 [] 다리와 관련이 있으므로 장갑은 손과 관련이 있습니다. – Gumbo