code

자바 스크립트 메모리 제한

codestyles 2021. 1. 8. 08:15
반응형

자바 스크립트 메모리 제한


JavaScript 애플리케이션이 저장할 수있는 최대 데이터 양이 있습니까?

나는 이것이 브라우저에 의해 처리되고 각각의 한계가 있다고 생각합니까?

제한이 없으면 페이지 파일이 생성됩니까? 그렇다면 안전하지 않습니까?


AFAIK, 상한선은 없습니다. 스크립트는 기본적으로 시스템의 메모리가 부족할 때까지 (스왑 포함) 메모리를 사용할 수 있습니다. 상한선이 없다고해서 다 먹어야한다는 의미는 아니며 사용자가 좋아하지 않을 수도 있습니다.


Chrome 및 Chromium OS에서 메모리 제한은 브라우저에 의해 정의되며 F12를 눌러 개발자 도구 명령 줄에서 다음 명령으로 제한을 검사 할 수 있습니다.

> window.performance.memory.jsHeapSizeLimit
1090519040

내 Windows 10 OS에서는 약 1GB입니다.

Chrom (e / ium)에서는 기본 배열을 할당하여 힙 크기 제한을 피할 수 있습니다.

var target = []
while (true) {
    target.push(new Uint8Array(1024 * 1024)); // 1Meg native arrays
}

이로 인해 약 2GB에서 탭이 충돌하며 매우 빠르게 발생합니다. 그 후 Chrom (e / ium)이 문제가되고 브라우저를 다시 시작하지 않으면 테스트를 반복 할 수 없습니다.

또한 브라우저와 관련된 모든 메모리를 진단하거나 측정하려는 잡초 에 대해 자세히 알아보기 전에 JavaScript 메모리 모니터링 에 대한 TrackJS의 블로그 게시물을 읽는 것이 좋습니다 .

comp.lang.javascript에서 javascript memory limit 를 검색 할 수도 있습니다 .

다음 Stack Overflow 게시물도 참조하세요.

  1. Javascript 에서 배열의 최대 크기는 최대 2 32 -1 = 4,294,967,295 = 42 억 9 천만 개의 요소 를 저장할 수 있음을 나타냅니다 .

  2. JavaScript 함수가 허용 할 수있는 최대 인수 수

JS9 천문 이미지 디스플레이 라이브러리 웹 사이트에 대한 추가 지식이 있습니다 . 메모리 제한 처리 .

(좋은 답변을 찾으려고했는데 여기에 제공된 "상한선이 없습니다"라는 대답은 나에게 어리석은 일이었습니다. 수백만 달러 규모의 프로젝트에서 생산 문제에 부딪 히고 경영진에게 "음, 상한선이없고 모든 것이 정상이라고 가정했습니다. "개념 증명 (예 : 선택한 JavaScript UI 프레임 워크에 많은 콤보 박스 컨트롤을로드하는 등)을 시도해보십시오. 프레임 워크에 성능 저하 가 있음을 발견 할 수 있습니다 . )

다음은 CPU 성능과 메모리 성능 모두에서 매우 잘 확장되는 몇 가지 구성 요소입니다.

  1. Microsoft Monaco 편집기
    • 이것은 여러 상업 프로젝트에서 사용됩니다.
      1. Postman, v7.1.1-canary08 기준
      2. VS 코드

다음은 잘 알려진 성능 저하가있는 프레임 워크의 몇 가지 예입니다.

  1. Angular : 잘못된 변경 감지 접근 방식.
    • 각 비동기 이벤트에 대해 각 바인딩 (Model-Dom 바인딩)을 이전 값과 비교하여 다시 렌더링할지 여부를 결정합니다.
      1. NG1 : 2,500 명 이상의 주시 자, 성능이 중단됨
      2. NG2 : 동일한 문제가 남아 있지만 오랜 시간이 걸리는 해결 방법이 있습니다. 불변으로 전환하고 ChangeDetectionStrategy.onPush를 앱 전체에 확산하여 기본 문제 전략을 해제합니다.
  2. 반응
    • 다시 말하지만, 불변의 JS 객체 컬렉션은 지금까지만 확장됩니다.
      1. create-react-app은 내부적으로 Immutable.JS를 사용하고 Immutable.JS는 죽기 전에 약 500k 개의 불변 컬렉션을 만들 수 있습니다.

다음은 고려해야 할 몇 가지 사항입니다.

  1. 추가 배열 할당을 최소화하기 위해 배열조작 하려면 array.slice를 사용하십시오 . array.slice는 배열을 제자리에서 수정하여 가비지 수집 및 전체 힙 크기를 줄입니다.

Firefox는 " javascript.options.mem.max " 옵션을 지원하며이를 검색하면 사람들이 실행 가능하다고 판단한 합리적인 값에 대한 토론을 찾을 수 있습니다.

얼마나 많은 사람들이 거기에 들어가서 설정하는 데 신경을 쓸 수 있는지 확실하지 않지만 직접 말하면 128000 (128M)으로 설정했습니다.


Javascript 프로그램에는 메모리 제한이 없습니다. 스크립트는 컴퓨터의 모든 RAM을 차지할 수 있습니다. 그러나 사용자 컴퓨터의 모든 메모리를 사용하는 것은 권장되지 않습니다. 많은 데이터를 처리하는 경우 캐싱을 확인하는 것이 좋습니다.


메모리 제한은 브라우저에서 나온 것 같습니다. DevTools를 사용하여이를 파악할 수 있습니다. 크롬 에서처럼 F12를 누르고 window.performance.memory를 입력하면 메모리 정보를 볼 수 있습니다.

 window.performance.memory

여기에 이미지 설명 입력

참조 URL : https://stackoverflow.com/questions/2936782/javascript-memory-limit

반응형