2011-03-20 3 views
5
// in a garbage collected VM, destroy someObject: 
someObject.a = null; 
someObject.b = null; 
someObject = null; 

Java 또는 C#과 같은 유용한 VM에서이 작업을 수행하지 말 것을 들었습니다. GC가 오브젝트 ab 이전에 더 이상 참조하는 언급 없음을 발견하는 데 시간이 더 걸리기 때문에 당신은 GC가 즉시시에 확인합니다 손상을두면 동안 someObjectabnull로 설정하면, 가비지 컬렉션을 늦출 것 청소는 someObject입니다.GC'ed 될 객체에서 null에 대한 참조 설정?

내가 들었던 것이 사실이라면 (올바른 것이 아니라면 수정하십시오), ActionScript 3 VM (특히 최신 버전의 Flash Player)의 AVM2와 동일합니까?

내가 이전에 고용주에게 더 ​​빨리 배우고 Flash에 그와 같은 많은 quircks (나는 쉽게 믿을 수 있음)를 배웠기 때문에 내가 좋아하는 동료가 있습니다.

그 정보가 여전히 최신인지 (궁극적 인 다른 플래시 최적화의 경우에도) 궁금합니다. 내 경험에 의하면, 최적화 트릭은 살아있는 플랫폼에서 오히려 구식이된다.

+0

좋은 생각인지 아닌지 고려하지 않아도됩니다. – delnan

답변

2

null 또는 not로 설정하는 특정 하드 데이터를 제공 할 수는 없습니다. 나는 정직하게 누군가를 믿지 않는다.

내가 할 수있는 최선의 방법은 가비지 수집에 대한 정보를 제공하는 것이며, 거기에서 결정을 내릴 수 있습니다.

Adobe는 Flash Player 9에서 Flash Player 10으로 특히 메모리 관리와 관련하여 몇 가지 중요한 부분을 개선했습니다. 여러 가지 '외부 swf로드'메모리 버그, 참조되지 않은 소리 등이있었습니다. 대부분은 수정되었습니다.

Grant Skinner는 GC가 어떤 개체를 삭제해야하는지 설정하는 기술을 강조했습니다. 작동 방식에 대한이 훌륭한 프레젠테이션보기 http://gskinner.com/talks/resource-management/ (하지만 프레젠테이션은 FP9에 관한 것입니다)

참조 카운팅 및 마크 스윕이 있다고 언급했기 때문에. 궁극적으로 AS3의 GC는 참조로 이어집니다. 객체 (기본이 아닌 유형)에 대한 참조가 있으면 해당 객체에 대한 참조가 삭제되지 않지만 액세스 할 수있는 방법이없는 경우 삭제 표시가됩니다. 하지만 삭제가 실제로 발생하면 제어 할 수 없습니다.이 프레임 일 수도 있고 다음 일 수도 있습니다.

궁극적으로 모든 변수/속성 (참조 또는 기타)을 'null'로 지정하면 내 의견으로는 낭비적이고 매우 다루기 힘듭니다. 작은 것들에는 실용적 일 수 있지만, 100 개의 변수로 객체가 커지면 모든 객체를 일관되게 null로 지정할 수 없습니다.

트랙 끄기 Flash Player는 올바른 방법으로 GC를 최적화하며 반대가 아닙니다.

관련 문제