본문 바로가기

개발

(37)
Serialization (+ JPA) 보호되어 있는 글입니다.
java stream이 for-loop보다 느린 이유 수정 이력 2022.12.27 맞춤법 수정 및 참조 문제 항목 추가 서론 프로그래머스에서 다른 사람들의 코드를 보면 stream을 사용한 코드들을 종종 보는데 정석적인 방식에 비해 몇 배 느린데도 숏 코딩+ 간결해 보인단 이유로 좋아요를 꽤 받는 걸 보니 이렇게 짜는 게 정말 좋은 건지 궁금해서 알아보게 됐다. 정확한 속도 측정에 관해서는 Reference 항목의 3번째 링크의 동영상을 보면 된다. https://programmers.co.kr/learn/courses/30/lessons/42578 위 문제에서 stream을 사용하지 않을 때와 사용했을 때 속도 차이다. 왼쪽이 stream을 사용하지 않은 코드 오른쪽이 stream을 사용한 코드다. stream이란? java 8부터 나온 함수형 inte..
자바 gc 약한 세대 가설 (weak generational hypothesis) 가비지 컬렉터의 역할1. 메모리 할당2. 참조된 객체가 메모리에 남아있는지 확인3. 런타임 때 더 이상 도달할 수 없는 개체의 메모리 회수 가비지 컬렉터가 실행되는 상황1. 전체 힙 또는 하위 요소가 임계값 이상이 될 때2. 요청한 메모리만큼 힙에서 할당할 수 없는 경우  Compaction가비지 컬렉터가 실행되고 난 후에는 여유 공간들이 연속돼있지 않고, 여러 chunk로 남는다.이는 큰 개체에 대한 할당을 어렵게 만들기 때문에 가비지 컬렉터는 다양한 압축 방법을 지원한다. 가비지 컬렉터의 성능 지표1. 처리량(Throughput) : 충분히 긴 시간동안 가비지 콜렉터 수행 시간을 제외한 런타임 비율2. overhead : 1번의 반대. 가비지 컬렉터의 수행 시간 비율3. pause time : 가비지..
docker linuxKit 도커 toolBox 초기 Mac이나 Window에선 리눅스 환경에서 도커를 구동해야함 toolBox란 VMware같은 툴로 리눅스 가상환경을 구축 후, 그 위에 도커 실행 컨테이너에 접근하기 위해선, hostOS -> 가상 머신 -> container를 거쳐야 하기 때문에, 이중으로 포트포워딩을 해야 함 linuxKit Mac과 Window가 자체적으로 가상화된 리눅스 환경을 제공하기 위해 사용하는 툴 한 번의 포트포워딩만으로 외부에서 컨테이너에 접근할 수 있게 해준다. Mac : Xhyve(Hyperkit) window : hyper -v hyper -v 하이퍼바이저의 type1 형태로, 윈도우 커널과 리눅스 커널이 담긴 2개의 컨테이너를 만듬 Client는 window로 둔 상태에서 Docker Da..
docker container docker engine 위에서 돌아가는 하나의 프로세스 1. namespace : 프로세스 분리 컨테이너란 프로세스를 격리하기 위한 기능 -> 컨테이너 A, B가 있다. -> A와 B가 어떤 프로그램을 실행했을 때 할당된 PID가 서로 같은 경우. -> namespace에선 PID를 분리하는 기능이 있다. -> 이로 인해, 각 컨테이너들은 동일한 PID를 써도 영향을 받지 않는다. 2. chroot : 디렉토리 분리 루트 디렉토리를 변경하는 명령어 해당 명령이 실행된 위치를 루트 디렉토리로 인식. 프로세스 실행에 필요한 의존성들이 새 루트 아래 있어야 사용 가능 3. cgroup : 자원 제한 프로세스의 cpu시간, 네트워크 대역폭 같은 시스템 자원을 제한 이 설정은 상속되기 때문에, 도커 엔진으로 생..