본문으로 건너뛰기

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

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

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

V8에서 아키텍처 복잡성을 다루기 — CodeStubAssembler

· 약 8분
[Daniel Clifford](https://twitter.com/expatdanno), CodeStubAssembler 조립자

이 글에서는 V8의 매우 유용한 도구였던 CodeStubAssembler(CSA)를 소개하고자 합니다. CSA는 지난 몇 번의 V8 릴리스 동안 성능 개선을 달성하는 데 기여한 구성 요소입니다. CSA는 높은 신뢰도를 유지하며 낮은 수준에서 JavaScript 기능을 신속하게 최적화할 수 있는 V8 팀의 역량을 크게 향상시키며 개발 속도를 개선했습니다.

웹 툴링 벤치마크 발표

· 약 5분
Benedikt Meurer ([@bmeurer](https://twitter.com/bmeurer)), 자바스크립트 성능 전문가

자바스크립트 성능은 항상 V8 팀의 중요 관심사였으며, 이번 포스트에서는 최근에 V8에서 일부 성능 병목 현상을 식별하고 수정하기 위해 사용한 최신 자바스크립트 웹 툴링 벤치마크에 대해 논의하고자 합니다. 이미 V8의 Node.js에 대한 강력한 의지에 대해 알고 계실 수도 있습니다. 이 벤치마크는 Node.js를 기반으로 개발된 일반적인 개발자 도구를 사용하여 성능 테스트를 실행함으로써 이러한 의지를 확장합니다. 웹 툴링 벤치마크 도구는 오늘날 개발자와 디자이너가 현대 웹 사이트나 클라우드 기반 애플리케이션을 구축하기 위해 사용하는 동일한 도구들로 구성되어 있습니다. 실제 성능에 집중하려는 지속적인 노력의 일환으로, 매일 개발자가 실행하는 실제 코드로 벤치마크를 작성하였습니다.

V8 릴리스 v6.3

· 약 3분
V8 팀

6주마다 우리는 릴리스 프로세스의 일환으로 V8의 새로운 브랜치를 만듭니다. 각 버전은 Chrome 베타 마일스톤 직전에 V8의 Git 마스터에서 브랜치됩니다. 오늘 우리는 최신 브랜치인 V8 버전 6.3를 발표하게 되어 기쁩니다. 이 브랜치는 몇 주 후 Chrome 63 안정 버전과 함께 릴리스될 때까지 베타 버전입니다. V8 v6.3는 다양한 개발자 친화적인 기능으로 가득 찼습니다. 이 글에서는 릴리스를 기대하며 주목할 만한 하이라이트를 미리 살펴봅니다.

V8에 ES2015 프록시를 최적화하기

· 약 6분
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), 프록시 최적화 담당

프록시는 ES2015 이래 JavaScript에서 중요한 부분이었습니다. 이들은 객체에 대해 근본적인 작업을 가로채고 동작을 사용자 정의할 수 있게 해줍니다. 프록시는 jsdomComlink RPC 라이브러리와 같은 프로젝트의 핵심 부분을 형성합니다. 최근에 우리는 V8에서 프록시 성능을 개선하기 위해 많은 노력을 기울였습니다. 이 글은 V8에서의 일반적인 성능 개선 패턴과 특히 프록시에 대해 설명합니다.

게으름에 대한 인턴십: 비최적화된 함수의 게으른 언링크

· 약 9분
줄리아나 프랑코 ([@jupvfranco](https://twitter.com/jupvfranco)), 게으름 전문가

약 3개월 전에 저는 V8 팀 (구글 뮌헨)에서 인턴으로 합류했으며, 그 이후로 VM의 _Deoptimizer_라는 완전히 새로운 프로젝트에 대해 작업하고 있습니다. 이는 매우 흥미롭고 도전적인 프로젝트임을 입증했습니다. 제 인턴십 첫 번째 부분은 VM의 보안성을 개선하는 데 초점을 맞췄습니다. 두 번째 부분은 성능 개선에 중점을 두었습니다. 즉, 이전에 비최적화된 함수를 언링크할 때 사용된 데이터 구조를 제거하는 작업을 수행했으며, 이는 쓰레기 수집 중 성능 병목현상을 일으킨 문제였습니다. 이 블로그 게시물은 제 인턴십의 두 번째 부분에 대해 설명하며, V8이 비최적화된 함수들을 어떻게 언링크했는지, 이를 어떻게 변경했는지, 그리고 얻은 성능 향상에 대해 설명합니다.

임시로 Escape Analysis 비활성화

· 약 2분
Mathias Bynens ([@mathias](https://twitter.com/mathias)), 샌드박스 Escape 분석 전문가

JavaScript에서, 할당된 객체는 현재 함수 밖에서 접근 가능할 경우 escape(탈출)하게 됩니다. 일반적으로 V8은 새로운 객체를 JavaScript 힙에 할당하지만, escape analysis(탈출 분석)를 사용하면 최적화 컴파일러는 객체의 수명이 함수의 실행에 따라 제한된 것을 입증할 수 있을 때 특수 처리를 할 수 있습니다. 새로 할당된 객체의 참조가 그것을 생성한 함수 밖으로 탈출하지 않는 경우, JavaScript 엔진은 명시적으로 그 객체를 힙에 할당할 필요가 없습니다. 대신 이 객체의 값을 함수의 지역 변수처럼 처리할 수 있습니다. 이는 스택이나 레지스터에 값을 저장하거나, 경우에 따라 값을 완전히 최적화하여 제거하는 등 여러 가지 최적화를 가능하게 합니다. 탈출하는 객체(더 정확히 말하면, 탈출하지 않음을 증명할 수 없는 객체)들은 반드시 힙에 할당되어야 합니다.

V8의 Elements 종류

· 약 12분
Mathias Bynens ([@mathias](https://twitter.com/mathias))
노트

참고: 기사 읽기 대신 발표를 보는 것을 선호하는 경우 아래 비디오를 즐기세요!

JavaScript 객체는 임의의 속성을 가질 수 있습니다. 객체 속성 이름에는 어떤 문자든 포함될 수 있습니다. JavaScript 엔진이 최적화하려는 흥미로운 경우 중 하나는 속성 이름이 숫자로만 구성된 속성, 특히 배열 인덱스입니다.

V8 릴리즈 v6.2

· 약 4분
V8 팀

6주마다 우리는 릴리즈 프로세스의 일부분으로 V8의 새 브랜치를 생성합니다. 각 버전은 Chrome 베타 이정표 직전에 V8의 Git 마스터에서 분기됩니다. 오늘 우리는 새 브랜치인 V8 버전 6.2를 발표하게 되어 기쁩니다. 이것은 몇 주 뒤 Chrome 62 안정 버전과 함께 릴리즈될 때까지 베타 상태입니다. V8 v6.2는 개발자에게 유용한 다양한 기능으로 가득 차 있습니다. 이 글에서는 릴리즈를 기대하며 주요 내용을 미리 살펴봅니다.

V8에서 빠른 속성

· 약 10분
Camillo Bruni ([@camillobruni](https://twitter.com/camillobruni)), [“빠른 `for`-`in`”](/blog/fast-for-in)의 저자

이 블로그 게시물에서는 V8이 JavaScript 속성을 내부적으로 어떻게 처리하는지 설명하고자 합니다. JavaScript의 관점에서 속성에 대한 몇 가지 구별만 필요합니다. JavaScript 객체는 대부분 문자열 키와 임의 객체를 값으로 하는 사전처럼 작동합니다. 하지만 사양에서는 정수 인덱스 속성과 다른 속성을 반복 중 다르게 취급합니다. 그 외에는 정수 인덱스인지 아닌지에 관계없이 서로 다른 속성이 대부분 동일하게 작동합니다.