배열에 있는 약 350mb 짜리 오브젝트를 null로 해서 정리를 시키려고 해도 정리가 안됩니다
Firefox의 About:memory 의 Free memory 탭에서
GC, CC는 클리어 해도 메모리가 줄어들질 않는데
Minimize Memory Usage를 누르면 정상적으로 메모리가 정리됩니다
이럴경우 어떤게 문제인겁니까??
배열에 있는 약 350mb 짜리 오브젝트를 null로 해서 정리를 시키려고 해도 정리가 안됩니다
Firefox의 About:memory 의 Free memory 탭에서
GC, CC는 클리어 해도 메모리가 줄어들질 않는데
Minimize Memory Usage를 누르면 정상적으로 메모리가 정리됩니다
이럴경우 어떤게 문제인겁니까??
참고로 350mb 짜리 오브젝트는 PapaParse라는 라이브러리를 통해 csv 파일들을 비동기로 불러와 파싱한 값을 넣은 오브젝트입니다.
백왕 / var obj = objects[i]; obj = new MyObject() 로 하였습니다. 본문에 잘못적었네요.
프로그램상 그럴수밖에 없는 구조입니다. 실시간으로 db에서 값을 가져올수 있는 구조가 아니고 한번에 데이터를 가져와서 담고있어야하는 것이라
MyObject는 일반적인 클래스이고 안에 여러가지 배열과 오브젝트들을 담고있습니다
저런 오브젝트 목록 중 선택한 오브젝트의 정보를 화면에 출력하는것인데 targetObject 라는 변수를 둬서 targetObject = objects[i]; 로 대입한다음 targetObject를 통해 나머지 로직을 처리하고있습니다
obj 안에 배열과 객체도 일일히 클리어해야한다는 말씀인가요?
objects[i] = new MyObject()로 하면 이전의 objects[i] 객체는 더이상 전역변수와의 레퍼런스 관계가 없으므로 자동으로 objects[i] 객체를 가비지 콜렉팅 하는것이 아닌가요?
현재 단서가 될만한 것은 본문에도 써놨듯이 GC,CC 클리어에는 메모리 클리어가 되지 않는데 Minimize Memory Usage를 하면 정리가 된다는것입니다.
메모리를 정리하는 로직 자체를 사용하지 않았을때는 Minimize Memory Usage를 해도 메모리가 정리되지않는것을 보면 메모리를 정리하는 로직이 어느정도까지는 효과가 있는것같은데, 문제는 현재 로직이 Cycle Collector 에까지 영향을 미치지 않는다는것입니다
일단 조언감사드립니다 말씀하신대로 DOM 에 문제가 있을지도 모르니 DOM을 제외하고 순수 데이터만으로 테스트를 했을때 어떨지 보는것이 도움이 될것같네요. 감사합니다
그건 아닌것같습니다. 해당 웹앱에서 메모리를 600메가 정도 쌓아놨다가 mmu를 하면 즉시 600메가가 정리됩니다.
멀이런걸 일일이 답해줌니까 애초에 첫걸음부터 잘못됐구만 어느 씨발 애미애비 없는새끼가 350메가짜리 바이너리를 웹상에서 보냄?
이런류의 질문은.. 주어진 문제 상황 P1에서 해결책 S1을 선택했는데, 이로부터 파생되는 또다른 문제 상황 P2의 해결책을 묻는 경우일테고... 사실 S1이 아니라 S0라는 더 깔끔한 해결책을 선택하면 P2를 피할 수 있는 경우가 많지.
해결책 S1이 진짜 최선의 선택이었는가...이걸 명확히 해야할텐데... 대부분 이를 판단할 자료가 부족하고 비효율적인 S1이 이후 더 복잡하고 난해한 문제상황을 초래해서 야근을 불러옴. 물론 질문자는 이게 최선이다..라고 하겠지만 애플리케이션의 요구사항을 보면 그렇지 않은 경우가 많더라...