본문 바로가기

분류 전체보기

(212)
Garbage Collection 출처 : d2.naver.com/helloworld/1329 가비지 컬렉션 과정 GC 를 알기 전 stop-the-world 를 알아보자 stop-the-world 란 GC 를 실행하기 위해 JVM이 어플리케이션을 멈추는 것이다. stop-the-world 가 발생하면 GC 실행 스레드를 제외하고 모든 스레드가 작업을 멈춘다. GC가 완료된 후에 다시 시작한다. 대개의 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다. 자바는 개발자가 코드로 메모리를 명시적으로 해제하지 않기 때문에, 가비지 컬렉터가 알아서 객체를 찾아 지운다. HotSpot VM 에서는 크게 2가지로 물리적 공간을 나눴다. Young 영역과 Old 영역이다. Young 영역: 새롭게 생성된 객체는 대부분 여기에 위치. ..
Stack - 메모리 관리 Stack 에는 힙 영역에 객체 타입의 데이터들에 대한 참조를 위한 값들이 할당된다. 또한 primitive 타입의 데이터들도 할당된다. 이 primitive 타입 데이터들에는 참조값이 아닌 실제 값을 저장한다. Stack 메모리는 스레드 하나당 하나씩 할당이 되고 다른 스레드에선 접근할 수 없다. 이 Stack 이 어떻게 활용되는지 봐보자 argument 변수가 있다 argument 에 새로운 메소드를 호출해서 값을 return 받는다 생각해보자 함수 내부에서 param 변수에 argument 를 저장하고 이 변수에 4를 곱한 변수를 tmp에 저장한다. 그 후 2를 나눈 값을 return 하면 저렇게 메소드에서 발생하는 부분이 새로 프레임으로 생성이되고 저 부분에서 이전 메소드의 매개변수은 argume..
JVM 과 JIT 컴파일러 컴파일러로 java 파일이 class(바이트코드) 파일로 변경 되는 걸 봤다. 그리고 이 class 파일은 JVM 에서 읽을 수 있다. 간단하게 보면, JDK 내부에는 컴파일러, 의존관계 분석 등 개발에 필요한 도구들이 있고, 이 JDK 가 class 파일을 만들게 되면 JRE 에는 실행에 필요한 자바 실행 명령, 클래스 로더와 바이트 코드 실행에 필요한 여러 라이브러리를 제공하고 있다. 이걸 이용해 바이트 코드를 실행하게 되면 JVM 에서 실행을 하게 된다. JVM 은 OS 에 독립적이여서 바이트 코드를 OS 에 맞추고 ,언어를 OS 에 맞게 변경하는데 이떄 사용하는게 인터프리터와 JIT 라고 보면 된다. 이제 이 바이트 코드를 어떻게 실행하는지 알아보기 위해 JVM 과 JIT 에 대해 알아보자 JVM..
컴파일러 Java 는 jvm 에서 class 파일을 읽기전에 java 파일을 class 파일로 변경해주는 컴파일러 과정을 진행한다. 이 컴파일러가 어떻게 동작하는지 봐보자 컴파일러 동작 자바 컴파일러는 총 4가지 정도의 과정을 진행한다. 어휘 분석 구문 분석 의미 분석 중간 코드 생성 어휘 분석 .java 코드는 키워드와 리터럴, 오퍼레이터 등으로 구성이 되어있는데, 여기서 키워드는 public, class 등 예약어 들이고, 리터럴은 문자열 등, 그리고 오퍼레이터는 + - 같은 연산자 들로 구성된다. 이런 것들을 어휘소라고 하는데 이걸 모두 수집해 하나의 스트림으로 만들면 이게 토큰 스트림이 된다. 구문 분석 구문 분석은 이 토큰 스트림을 문법에 맞는지 확인을 하는 과정이다. 문법이 틀리면 Syntax erro..
[spark definitive guide] 스파크 기능 둘러보기 이전 장에서는 구조적 API 와 관련된 핵심 개념을 봤다 기본 요소인 저수준 API 와 구조적 API 그리고 추가 기능을 제공하는 라이브러리로 구성되어있다. 스파크 라이브러리는 그래프 분석, 머신 러닝, 스트리밍 등 을 지원한다. 이번 장에서는 아직 다루지 않은 API 와 주요 라이브러리 그리고 스파크가 제공하는 다양한 기능을 봐보자 spark-submit Dataset 구조적 스트리밍 RDD 운영용 어플리케이션 실행하기 spark-submit 명령은 어플리케이션 코드를 클러스터에 전송해 실행시키는 역할을 한다. 클러스터에 제출된 어플리케이션은 작업이 종료되거나 에러가 발생할때까지 실행된다. 스파크 어플리케이션은 클러스터 매니저인 스탠드 얼론, YARN, 메소스등을 이용해 실행된다. spark-submi..
[spark definitive guide] - 스파크 간단히 살펴보기 이제 스파크를 사용해보자 DataFrame 과 SQL 을 사용해 클러스터, 스파크 어플리케이션 , 그리고 구조적 API 를 봐보자 스파크의 기본 아키텍처 데이터 처리는 한 대의 컴퓨터로 수행하기 힘들 수 있다. 한 대의 컴퓨터는 대규모의 정보를 연산 할 만한 자원이나 성능을 가지지 못한다. 컴퓨터 클러스터는 여러 컴퓨터의 자원을 모아 하나의 컴퓨터 처럼 사용할 수 있게 만든다. 하지만 이 클러스터를 구성하는 것만으론 부족하고 작업을 조율 할 수 있는 프레임워크가 필요하다. 스파크가 이런 역할을 하는 프레임 워크다. 스파크는 클러스터의 데이터 처리 작업을 관리하고 조율한다. 스파크가 연산헤 사용하는 클러스터는 스파크 스탠드 얼론 클러스터 매니저 , 하둡 YARN , 메소스 같은 클러스터 매니저 에서 관리를..
[Spark definitive guide] - 아파치 스파크란 아파치 스파크란 클러스터 환경에서 데이터를 병렬로 처리하는 라이브러리 집합이다. 병렬 처리 오픈 소스 엔진이다. SQL 뿐만 아니라 스트리밍, 머신 러닝 라이브러리 까지 제공한다. 빅데이터 처리를 쉽게 할 수 있고 엄청난 규모의 클러스터로 확장 할 수 있다. 아파치 스파크의 철학 - 컴퓨팅 엔진 스파크는 데이터를 연산하는 역할만 수행 할 뿐 영구 저장소 역할은 하지 않는다. 대신 하둡, 카산드라, 등의 저장소를 지원하고 메시지 전달 서비스인 카프카를 지원한다. 스파크는 내부에 데이터를 오랜 시간 저장하지 않고 , 데이터 저장 위치에 상관없이 처리에 집중하도록 만들어졌다. 스파크는 연산 기능에 초점을 맞추면서 기존 하둡같은 빅데이터 플랫폼과 차별화를 둔다. 하둡은 hdfs 와 맵리듀스를 가지고 있고 서로 ..
자바 병렬 프로그래밍 - 자바 메모리 모델 자바 메모리 모델은 무엇이며 , 왜 사용해야 하는가? aVariable = 3 변수에 값을 할당 했을때 자바 메모리 모델은 값을 사용 할 수 있으려면 어떤 조건이 돼야 하는지 답을 알고 있다. 동기화 기법을 사용하지 않은 경우엔 메모리 대신 CPU 레지스터에 보관이 돼서 값을 못 읽을 수도 있고 캐시의 형태에 따라 할당된 값이 메모리에 실제 보관되는 시점에 차이가 있기도 하고 CPU 내부 캐시에 보관된 값이 다른 CPU 에 보이지 않을 수도 있다. 단일 스레드로 동작하는 환경에서는 JVM 이 순차적으로 동작하는 것과 동일하게 실행되도록 명시하고 있다. 멀티 스레드로 실행되는 환경에서는 성능을 크게 제한하지 않는 한 순차성이 주는 안전성과 높은 성능은 찾아보기 어렵다. 병렬 프로그램이라도 대부분은 각자의 ..