2013-04-28 2 views
2

은 왜 나에게 치명적인 오류를 줄 않습니다 JS 할당 실패 - 과정을Node.js를 - 메모리 부족 과정은

arr = [] 

for (var x=0;x<6000;x++){ 
    var ys=[]; 
    arr.push(ys); 
    for (var y=0;y<6000;y++){ 
     var tile = [0,1,2]; 
     ys.push(tile); 
    } 
} 

나는 그것이 아주 멀리에만 108,000,000의 int, 또는 432메가바이트를,의 IT를 참조하는 방식의 메모리가 부족 멀리 1.4GB 한계에서 당신이 계산되지 않습니다

+0

아닙니다. 목록의 각 요소는 다음 요소에 대한 추가 참조를 보유합니다. 그러나 여전히 그렇게해서는 안됩니다 (또는해야할까요?). 어떤 NodeJS 버전을 사용하고 있습니까? – freakish

+0

내 대답이 도움이 되었습니까? 답변을 선택할 수 있습니까? – Brandon

답변

5

것들 : 배열의

  • 오버 헤드는 객체 참조의
  • 크기 객체
  • 우리가 객체 참조는 64 비트 (크기 ... 확실하지)이다 가정하면 다른 프로그램이
  • Node.js를 메모리 자체

을하고있다

  • 아무것도, 당신은 3,600 만 심판이 * 4 바이트 = 144 메가 바이트.

    배열 오버 헤드를 계산하기 전에 최대 576MB입니다.

    배열 크기를 조정할 수 있기 때문에 할당 된 길이가 정확하게 크기에 기반하는지 또는 런타임에서 여분의 메모리를 할당 할 것인지 확실하지 않습니다.

    Java에서 ArrayList를 확장하면 실제로 두 배가됩니다.

    배열이 JavaScript로 구현되는 방법을 정확히 모르겠지만 array.length를 읽는 것이 일정 시간이라면 각 배열에 미리 계산 된 length 속성이있을 것입니다.

    3600 만 개의 어레이가 있으므로 144 메가 바이트가 추가로 있습니다.

    720 메가 바이트 지금까지.

    ArrayList처럼 두 배 할당되지 않았 으면합니다.