답변
이 질문에 대한 답변이되었지만 Java Garbage collector가 참조를 보는 방식을 조작 할 수있는 방법이 있습니다.Soft References, Weak References 및 Phantom References를 통해이를 수행 할 수 있습니다. 더 자세한 설명은 java.lang.ref 패키지를보십시오.
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html
또한 여기에 PhantomReference 쓰레기 수집 일하려고 할 때 결정하는 좋은 샘플입니다. 당신이 작동하지 않을 것입니다 null``에 객체를 설정하는 이유에 대한 몇 가지 링크 또는 문서를 제공 할 수
Java Garbage Collector는 표시 및 스윕 방식과 함께 작동합니다. 이는 여전히 사용중인 것으로 알려진 객체로부터 모든 참조가 이어지고 그 방법으로 방문 된 객체가 표시된다는 것을 의미합니다. 그런 식으로 참조가없는 객체는 표시되지 않으므로 반드시 삭제해야합니다. 따라서이 객체에 대한 모든 참조가 제거되었는지 확인하여 다음 번 가비지 수집기에서 항목이 삭제되도록 할 수 있습니다.
또한 당신은 가비지 콜렉터를 실행해야 함을 표시하기 위해
Runtime.getRuntime().gc();
를 사용할 수 있습니다. 참고 : 실제로 실행되는지 확신 할 수 없습니다.
가비지 컬렉터는 참조 카운팅을 기반으로하지 않습니다. 모든 최신 JVM은 마크 앤 스위프 (mark-and-sweep)이며, 대부분이 다중 세대입니다. –
JVM의 구현에 의존하지 않습니까? – RoflcoptrException
아니요. 참조 계산에서 참조주기 문제로 인해 Java 언어 사양을 올바르게 구현할 수 없습니다. 따라서 기존의 JVM 구현에서는 참조 카운팅을 사용할뿐만 아니라 완전히 다른 올바른 수집 메커니즘을 구현하지 않으면 참조 계산을 수행 할 수없고 준수 할 수도 없습니다. –
아니요, 불가능합니다. 다른 변수에 대한 참조가 있으면 어떻게 될 것으로 예상됩니까? 당신은 단지 null로하는 변수 설정할 수 있습니다 - 당신이 널 (null)에 객체를 설정할 수 없습니다
참고. 다른 변수에 여전히 오브젝트에 대한 참조가 있으면, 여전히 가비지 콜렉션의 대상이되지 않습니다.
이렇게해야한다고 생각하면 데이터를 잘못 해석했거나 코드 어딘가에 누수가있을 수 있습니다 (예 : 항목을 추가 한 목록, 정적으로 참조 된 목록 변수 - 클래스 로더가 살아있는 동안에는 해당 항목이 가비지 수집 대상이되지 않습니다.
각 JVM에는 고유 한 GC가 있지만 핫스팟에서는 개체가 현재 "살아"있는 세대에 GC가 실행될 때 개체가 가비지 수집됩니다 (상황을 복잡하게하는 종결자가 없다고 가정). 객체가 "젊은"세대에 있다면, 곧 그렇게 될 것입니다. "오래된"세대에 있다면 오래 걸릴 수도 있습니다.
당신은 물론 일이 이후에 이동하고 있지만, 자세한 내용은 Java 6 GC tuning documentation를 볼 수 있습니다는 등 오픈 JDK 7
을 위해 당신은 잘못 들었지만, 다시 설명이 너무 잘못된 것입니다.
개체를 null로 설정하지 않으면 변수를 null로 설정합니다. 변수가 객체에 도달하는 데 사용될 수 있으면 변수는 객체에 대한 "참조"를 갖습니다. 변수를 null로 설정하는 것은 "참조를 잃는"변수와 동일합니다.
Java가 실행중인 프로그램에서 객체 또는 객체 그룹에 접근 할 수 없다는 것을 감지하면 메모리에서 객체를 제거합니다. 프로그램에서 다른 부분이 객체에 대한 참조를 사용하려고 시도했기 때문에 Java에서 허용되지 않는 방식으로 참조가 실패하기 때문에 메모리에서 한 번 빨리 제거하지는 않습니다.
트릭은 null에 대한 참조를 하나만 설정하는 것이 아니므로 null로 설정되었을 수있는 모든 참조를 설정해야합니다. 따라서 새 참조를 만들 때마다 고려해야 할 중요한 이유는 메모리 누수가 발생하지 않는 한 최종 참조가 만들어지기를 원하기 때문입니다.
- 1. 표시 목록에서 개체 제거
- 2. 개체 자체를 제거 할 수 있습니까? 방법?
- 3. Actionscript 표시 객체 제거
- 4. Java GC에서 긴 GC 시간 이벤트에 등록
- 5. DataGridViews에 개체 컬렉션 표시
- 6. html 형식으로 개체 표시
- 7. Resharper를 사용하여 개체 이니셜 라이저를 제거 할 수 있습니까?
- 8. 안드로이드 제목 표시 줄 제거
- 9. YUI Datatable에 JSON 개체 표시
- 10. sqlalchemy에서 인스턴스화 된 개체 "계장 제거"ORM
- 11. 일부 기준에 따라 목록에서 여러 개체 제거
- 12. NSMutableArray에서 특정 개체 열거 및 제거
- 13. PropertyGrid 내에서 개체 설명 표시
- 14. joomla 1.5 플래시 개체 표시
- 15. 개체 배열 데이터에서 중복 제거 자바
- 16. 부모 환경에서 rm()을 사용하여 개체 제거
- 17. 표시 할 postgresql보기 테이블에서 개체 목록을 가져 오는 방법
- 18. 편집 할 개체 선택
- 19. 인스턴스화 할 개체 동기화
- 20. 주소 표시 줄에서 # 조각 식별자 제거
- 21. asp.net 페이지에서 바이트 순서 표시 제거
- 22. .NET GC에서 버려진 개체가 메서드를 비동기 적으로 실행하여 엉망이 되나요?
- 23. 내 응용 프로그램에서 상태 표시 줄 제거
- 24. 콤보 상자 선택 항목 강조 표시 제거
- 25. SSRS에서 단일 인스턴스 비즈니스 개체 데이터 표시
- 26. PyQT 프로그램 제목 표시 줄을 제거 하시겠습니까?
- 27. Windows에서 올바른 크기 표시 '프로그램 추가/제거
- 28. WPF ListView/GridView 강조 표시 제거 chrome
- 29. 회색 제거 UITableView 색인 표시 줄
- 30. ToggleButtonBar에서 선택한 버튼의 강조 표시 제거
:
http://exampledepot.8waytrips.com/egs/java.lang.ref/PhantomRef.html
여기에서 나온 주요 사이트입니까? 물론 'null'로 설정해도 gc로 처리된다는 보장은 없습니다. –
개체에 대한 모든 참조를 제거하면 (예 : 'null'에 대한 참조를 설정하여) 가비지 수집을 위해 * 자격 *이됩니다. 메모리가 회수되기 전에 메모리가 부족하게되지는 않습니다 (힙 공간이 부족하고 힙이 부족하지 않다는 가정하에). GC가 실제로 발생하면 VM에 달려 있습니다. 왜 그것이 당신에 관한 것입니까? –
상당한 양의 데이터를 다루고 있기 때문에 상당한 양의 데이터가 포함되어 있기 때문에 걱정이됩니다. 할당은 일반적으로 한 번에 1000 번에 온다. – monksy