본문으로 건너뛰기

"memory" 태그로 연결된 10개 게시물개의 게시물이 있습니다.

모든 태그 보기

Oilpan에서의 포인터 압축

· 약 12분
Anton Bikineev와 Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), walking disassemblers

프로그램이 4GB 미만의 RAM을 사용하는 경우 64비트 포인터를 사용하는 것은 절대적으로 터무니없습니다. 그러한 포인터 값이 구조체 안에 나타난다면, 이는 메모리를 절반 이상 낭비할 뿐만 아니라 캐시의 절반을 효과적으로 버리는 셈입니다.

Donald Knuth (2008)

Oilpan 라이브러리

· 약 6분
Anton Bikineev, Omer Katz ([@omerktz](https://twitter.com/omerktz)), Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)) - 효율적이고 효과적인 파일 이동자

이 글의 제목이 오일팬 관련 책 모음을 깊이 탐구하자는 의미로 보일 수 있으나(오일팬을 위한 구조적 기준을 생각하면 놀라울 정도로 많은 문헌이 이에 대해 다룹니다), 우리는 V8 v9.4부터 라이브러리로 호스팅되고 있는 C++ 가비지 컬렉터인 Oilpan에 대해 좀 더 자세히 살펴보려고 합니다.

C++를 위한 고성능 가비지 컬렉션

· 약 8분
Anton Bikineev, Omer Katz ([@omerktz](https://twitter.com/omerktz)), 그리고 Michael Lippautz ([@mlippautz](https://twitter.com/mlippautz)), C++ 메모리 전문가

과거에는 이미 여러 번 게시물에 JavaScript의 가비지 컬렉션, 문서 객체 모델(DOM), 그리고 이것이 V8에서 구현되고 최적화되는 방식에 대해 작성한 적이 있습니다. 하지만 Chromium의 모든 요소가 JavaScript로 작성된 것은 아닙니다. 대부분의 브라우저와 V8이 내장된 Blink 렌더링 엔진은 C++로 작성되었습니다. JavaScript는 DOM과 상호 작용할 수 있으며, 이는 이후 렌더링 파이프라인에 의해 처리됩니다.

더 가벼운 V8

· 약 9분
Mythri Alle, Dan Elphick, 그리고 [Ross McIlroy](https://twitter.com/rossmcilroy), V8 웨이트워처

2018년 말, 우리는 V8의 메모리 사용량을 대폭 줄이기 위한 V8 Lite라는 프로젝트를 시작했습니다. 처음에 이 프로젝트는 메모리 사용량 감소가 실행 속도보다 중요한 저메모리 모바일 기기나 임베디드 사용 사례에 특화된 Lite 모드라는 독립적인 형태로 구상되었습니다. 하지만 작업을 진행하면서, 이 Lite 모드를 위해 적용된 많은 메모리 최적화 방법이 일반 V8에서도 사용할 수 있어 V8의 모든 사용자에게 이점을 줄 수 있다는 것을 깨달았습니다.

V8의 동시 마킹

· 약 10분
Ulan Degenbaev, Michael Lippautz, 그리고 Hannes Payer — 메인 스레드 해방자

이 게시글은 _동시 마킹_이라는 가비지 컬렉션 기술에 대해 설명합니다. 해당 최적화는 자바스크립트 애플리케이션이 실행을 계속하는 동안 가비지 컬렉터가 힙을 스캔하여 살아있는 객체를 찾고 마킹하도록 허용합니다. 우리의 벤치마크는 동시 마킹이 메인 스레드에서 마킹에 소요되는 시간을 60%–70% 감소시킨다는 것을 보여줍니다. 동시 마킹은 Orinoco 프로젝트의 마지막 퍼즐 조각으로, 기존 가비지 컬렉터를 대부분 동시적이고 병렬적인 새로운 가비지 컬렉터로 점진적으로 대체하는 프로젝트입니다. 동시 마킹은 크롬 64 및 Node.js v10에서 기본적으로 활성화되어 있습니다.

JS에서 DOM로, 그리고 다시 되돌아오는 경로 추적

· 약 4분
DOM의 동맹 — 울란 데겐바에브, 알렉세이 필리포브, 미하엘 립파우츠, 그리고 한네스 페이어

Chrome 66에서 메모리 누수를 디버깅하는 것이 훨씬 쉬워졌습니다. Chrome DevTools는 이제 C++ DOM 객체를 추적하고 스냅샷을 찍을 수 있으며 JavaScript에서 참조된 모든 접근 가능한 DOM 객체를 표시할 수 있습니다. 이 기능은 V8 가비지 컬렉터의 새로운 C++ 추적 메커니즘의 이점 중 하나입니다.

Orinoco: 젊은 세대 가비지 컬렉션

· 약 6분
Ulan Degenbaev, Michael Lippautz, Hannes Payer, [TSAN](https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual)의 친구들

V8의 JavaScript 객체는 V8의 가비지 컬렉터로 관리되는 힙에 할당됩니다. 이전 블로그 글에서는 가비지 컬렉션 일시 중지 시간을 어떻게 줄이는지 (여러 번) 그리고 메모리 소비를 줄이는 방법도 다뤘습니다. 이번 블로그 글에서는 V8의 거의 병렬 및 동시 가비지 컬렉터 Orinoco의 최신 기능 중 하나인 병렬 Scavenger를 소개하고 설계 결정 및 대안 접근 방식에 대해 논의합니다.

Jank Busters Part Two: Orinoco

· 약 5분
the jank busters: Ulan Degenbaev, Michael Lippautz, and Hannes Payer

이전 블로그 게시글에서 우리는 가비지 컬렉션이 부드러운 브라우징 경험을 방해하며 발생하는 잉크 문제를 소개했습니다. 이 블로그 게시글에서는 새로운 V8 가비지 컬렉터인 _Orinoco_를 구축하기 위한 세 가지 최적화를 소개합니다. Orinoco는 대부분 병렬적이고 동시적 가비지 컬렉터를 엄격한 세대 경계를 넘어 구현함으로써 가비지 컬렉션 잉크와 메모리 소비를 줄이는 동시에 높은 처리량을 제공할 수 있다는 아이디어를 바탕에 두고 있습니다. Orinoco를 별도의 가비지 컬렉터로서의 플래그 뒤에 구현하는 대신, 즉각적으로 사용자에게 도움을 줄 수 있도록 Orinoco의 기능들을 V8의 최상위 트리에 점진적으로 배포하기로 결정하였습니다. 이번 글에서 논의된 세 가지 기능은 병렬 압축, 병렬 기억 집합 처리, 및 블랙 할당입니다.

Jank Busters Part One

· 약 4분
the jank busters: Jochen Eisinger, Michael Lippautz, and Hannes Payer

지연(jank), 즉 눈에 띄는 끊김은 Chrome이 16.66ms(60프레임/초) 내에 프레임을 렌더링하지 못할 때 발생합니다. 현재로서는 V8의 대부분의 가비지 수집 작업이 메인 렌더링 스레드에서 수행되며, 이는 종종 너무 많은 객체를 유지관리해야 할 때 지연을 유발합니다. 지연을 제거하는 것은 항상 V8 팀(1, 2, 3)의 최우선 과제였습니다. 이 글은 Chrome 41에서 Chrome 46 사이에 구현되어 가비지 수집 지연을 크게 줄임으로써 사용자 경험을 개선한 몇 가지 최적화에 대해 논의합니다.

무료로 가비지 컬렉션을 얻다

· 약 7분
Hannes Payer and Ross McIlroy, Idle Garbage Collectors

JavaScript 성능은 Chrome의 핵심 가치 중 하나로, 특히 부드러운 사용자 경험을 제공하는 데 중요한 요소입니다. Chrome 41부터 V8은 웹 애플리케이션의 반응성을 높이기 위해 고비용의 메모리 관리 작업을 사용되지 않는 작은 유휴 시간 조각 안에서 숨기는 새로운 기술을 활용합니다. 그 결과, 가비지 컬렉션으로 인한 끊김 현상이 크게 줄어들면서 웹 개발자는 더 부드러운 스크롤링과 버터 같은 애니메이션을 기대할 수 있습니다.