java 9

ZGC: Z Garbage Collector

ZGC란?: JVM 에서 사용하는 최신 GC 중 하나로, Java 11에서 처음 도입 + JDK 15부터 환경 적용 주요 특징초저지연(Very Low Latency)GC로 인한 애플리케이션 정지 시간(Stop-The-World pause)을 1~10ms 미만으로 굉장히 짧게 유지대용량 힙 지원테라바이트 단위의 대규모 힙 메모리도 효율적으로 관리할 수 있음Auto-tuning복잡한 GC 파라미터를 자동으로 최적화해 개발자가 별도 튜닝 없이도 안정적인 성능을 얻을 수 있음메모리 Compaction 동시 지원메모리 단편화를 방지하기 위해 객체를 이동동시/병렬 처리(Concurrent/Parallel)여러 스레드가 병렬로 처리하며, 거의 모든 GC 단계를 애플리케이션 스레드와 동시에 수행Colored Point..

Stream(collect, filter, map)

Stream java에서 데이터 요소들의 시퀀스를 나타내는 인터페이스함수형 프로그래밍 개념을 기반데이터를 다루는 작업을 간결하고 효율적으로 표현collection의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 하는 반복자병렬 처리(내부 반복자), 순차 처리가 가능함최종 처리(집계 처리: 반복, 카운팅, 평균, 총합) & 중간 처리(매핑, 필터링, 정렬)* Stream API: 컬렉션, 배열 또는 I/O 자원과 같은 데이터 소스에서 데이터를 처리하고 조작하는 기능 제공 1. collectStream의 요소들을 수집하여 새로운 컬렉션이나 값으로 변환하는 작업을 수행collectors 클래스의 정적 메소드들을 사용하여 다양한 종류의 컬렉션을 생성하고 데이터를 수집ex) toList() 로 Stre..

property 우선 순위 (feat. application.properties)

jar 파일로 만들어서 리눅스에서 실행시키려 하는데 hostname이 자꾸 달라져서 고민 끝에 외부 설정 파일로 빼기로 했다.그럼 jar 내부에 있는 properties보다 우선순위가 위에 있기 때문에 jar 밖에서 설정하면 그 부분을 따라가게 된다.우선순위 순으로 정의한 프로퍼티 값이 오버라이딩된다.유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties테스트에 있는 @TestPropertySource@SpringBootTest 어노테이션의 properties attribute커맨드 라인 arguementSPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로퍼티) 에 들어있는 property ServletConfig 파라미터ServletContext 파라미터..

IoC 컨테이너와 @Bean, @Component

1. IoC 컨테이너 애플리케이션 컴포넌트의 라이프사이클을 관리컴포넌트 간의 의존성을 주입하는 기능을 제공하는 프레임워크BeanFactoryApplicationContext의 상위 인터페이스XML 파일이나 자바 설정 클래스 등에서 Bean의 정의를 읽어와서 Bean을 생성하고, 필요한 곳에서 의존성 주입을 수행함Bean의 생명주기를 관리하여, Bean이 생성될 때 초기화 작업을 수행하고, 애플리케이션이 종료될 때 Bean을 소멸시킴지연 초기화(lazy initialization)를 지원Bean이 필요한 시점까지 생성을 지연시켜서, 메모리와 자원을 관리인터페이스를 이용해서 다른 컨테이너와 연동할 수 있음ApplicationContextBeanFactory의 확장된 버전BeanFactory와 달리 미리 Be..

DI와 IOC와 DIP (feat. 프레임워크와 라이브러리)

1. DI란?Dependency Injection으로 의존성 주입이라는 뜻객체의 의존 관계를 외부에서 주입하는 방법의존 관계란?네모 그림과 그림 그리는 함수가 예로 있다.네모 그림에 김 그림을 그리는 함수를 넣으면 네모는 김이 되고, 스마트폰을 그리는 함수를 넣으면 네모는 폰이 된다.네모 그림을 그리는 함수 A는 김을 그리거나 폰을 그리는 함수 B, C에 의해 무엇이든 될 수 있고, 이 관계를 의존 관계라 한다.이같은 의존성을 외부에서 주입하는 것을 의존성 주입 DI 라고 한다. 2. 클래스 간의 관계연관 관계class A { private B b;}의존 관계class A { public B method(B b){ return new B(); }}상속 관계class A extends B {}..

Blocking/Non-Blocking 와 Sync/Async 와 Future/Completable Future

이 전까지 동기, 비동기는 그저 화면이 깜박이면서 새로 고침되느냐 안깜박이고 이벤트 탄 곳만 바뀌느냐 정도로 알고 있었다.ㅠㅠ Blocking / Non-Blocking: 다른 주체가 작업할 때 자신에게 제어권이 있는지?* Blocking: 호출된 함수A가 제어권을 갖고 자신의 작업이 끝날 때까지 넘기지 않음-> A가 끝날 때까지 아무 것도 못하고 기다리고 있어야 함(기다릴게~빨리줘!)* Non-Blocking: 호출한 함수B에게 제어권을 넘기고 다른 일을 진행할 수 있게 함(callback)-> A와 B는 각자 알아서 본인 작업을 수행함(내 할 일할게~너도 너 할일 해서 줘) Sync / Async: 결과를 받았을 때 순서와 결과에 관심이 있는지?* Sync (동기): 호출된 함수와 호출한 함수가 수행..

[Java] JVM / JRE / JDK

- JVM : Java Virtual Machine - 자바 가상 기계: 자바로 짜서 컴파일한 소프트웨어의 바이트코드를 운영체제가 이해할 수 있게 해석하는 역할 - JRE : Java Runtime Environment : JVM을 포함하고 있으며, 컴파일된 자바를 실행할 때 그 환경에서 필요한 패키지 - JDK : Java Development Kit: JVM, JRE 등을 포함하고 있으며, 자바를 사용하기 위한 기능을 가진 자바 SDK(Software Development Kit)로 프로그램을 생성하고 실행하고 컴파일하는 역할