Category: 프로그래밍 언어

0

[JAVA] - Cold Start

목차 [JAVA] - 가비지 컬렉션 튜닝 [JAVA] - Garbage Collection(가비지 컬렉션) [JAVA] - JVM (자바 가상 머신) 🧊 Cold Start란?Cold Start는 JVM이 애플리케이션이 처음 실행될 때 초기화 과정 때문에 발생하는 지연(latency) 을 의미합니다. 마치 추운 겨울날 자동차 시동을 걸 때 엔진이 따뜻해질 때까지 시간이 걸리는 것과 비슷합니다. 일반적인 서버 환경에서는 애플리케이션이 한 번 시작되면 계속 실행되기 때문에 이 문제가 크게 부각되지 않았습니다. 하지만 MSA 는 인스턴스가 빈번히 생성 및 소멸되고 여러 서버가 긴밀히 통신하는 환경입니다. 이로 인해 특정 시스템이 재부팅되면 연결된 다른 시스템의 응답 속도까지 지연되는 문제가 발생했으며, 무중단 배포·잦은 배포·오토스케일링 등으로 인해 기존 아키텍처보다 성능 지연 현상이 더 빈번하게 나타나게 되었고, 전체적인 서비스 성능 이슈의 문제가 됐습니다. 🚦 Cold Start가 발생하는 이유Java 애플리케이션은 네이티브 코드가 아닌 JVM 위에서 바이트코드 실행 방식으로 동작하기 때문에, 첫 실행 시 다음과 같은 과정에서 오버헤드가 발생합니다. 1. JVM 초기화 과정의 복잡성Java 애플리케이션이 시작될 때 여러 단계의 초기화 과정을 거쳐야 합니다:

0

[JAVA] - 가비지 컬렉션 튜닝

목차 [JAVA] - 가비지 컬렉션 튜닝 [JAVA] - Garbage Collection(가비지 컬렉션) [JAVA] - JVM (자바 가상 머신) 참고 https://d2.naver.com/helloworld/37111 가비지 컬렉션 튜닝 전체적으로 GC(Minor GC + Major GC) 가 적게 발생하기 위해서는 우선적으로 객체를 적게 생성하면 된다. Old Generation 으로 넘어가는 객체의 수 최소화 (횟수) Full GC 시간 줄이기 (영역) 1. Old Generation 으로 넘어가는 객체의 수 최소화New Generation 의 경우 Old Generation 영역보다 작기 때문에 상대적으로 Stop The World 가 작게 발생한다.

0

[JAVA] - Garbage Collection(가비지 컬렉션)

목차 [JAVA] - 가비지 컬렉션 튜닝 [JAVA] - Garbage Collection(가비지 컬렉션) [JAVA] - JVM (자바 가상 머신) 📌 가비지 컬렉션 동적 할당 받은 메모리 중에서 사용하지 않는 메모리를 해제해 메모리 누수를 막는 메모리 관리 기법 GC 가 등장하기 전에는 개발자가 직접 메모리를 할당하거나 해제해줘야 했습니다. 메모리를 직접관리하기 때문에 실수로 메모리 memory leak 을 없앨 수 있다. GC Root가 될 수 있는 대상들 Stack 영역의 데이터 Static 데이터 JNI에 의해 생성된 객체들 Mark And Sweep 알고리즘

0

[JAVA] - JVM (자바 가상 머신)

목차 [JAVA] - 가비지 컬렉션 튜닝 [JAVA] - Garbage Collection(가비지 컬렉션) [JAVA] - JVM (자바 가상 머신) JVM (자바 가상 머신) 자바 컴파일러에 의해 생성된 자바 바이트 코드(.class) 를 OS에 맞는 기계어로 변환해 실행할 수 있게 해준다.클래스 파일로 떨어질 수 있으면 어떤 언어라도 실행이 가능하다. (ex. kotlin) 자바 컴파일러에 의해 생성된 바이트 코드를 실행하는 표준이자 구현체다. JVM은 각 OS(운영체제) 에 맞게 설계가 돼 있다. 자바 바이트 코드만 있으면 JVM을 이용해 어느 운영체제에서나 실행이 가능하다. Stack 기반 가상 머신 JVM 구조 Class Loader, Memory, 실행 엔진(Execution Engine) 이 세가지로 구성 돼 있다.

0

컴파일 언어, 인터프리터 언어, 하이브리드 언어

컴파일 언어, 인터프리터 언어, 하이브리드 언어 객체 지향 3요소 객체 지향 설계 5원칙 SOLID 컴파일 언어, 인터프리터 언어, 하이브리드 언어컴파일 언어 고급 언어로 작성된 코드를 Compiler(컴파일러) 를 이용해 목적 코드 로 번역하는 과정을 거치는 언어좁은 의미에서는 소스 코드를 기계어 로 번역해주는 과정을 컴파일이라 한다. 프로그램을 한번에 번연한 후 실행한다. 한번에 모든 소스를 번역하기 때문에 메모리 사용량이 크다. 번역 속도가 느림 실행 속도는 빠름 번역과 실행이 따로 이뤄지기 때문에 실행 파일 (ex. .exe) 이 생성된다. C, C++ 언어가 대표적인 컴파일 언어다. 인터프리터 언어 컴파일 언어와는 다르게 소스코드를 원시코드(기계어)로 번역하는 과정을 거치지 않는 언어Interpreter(인터프리터) 를 이용해 한줄씩 읽어가면서 명령을 처리한다. 번역 속도가 빠름 실행 속도는 느림 번역과 실행이 한번에 이뤄지기 때문에 별도의 실행파일이 만들어지지 않는다. Python, Javascript 가 대표적인 인터프리터 언어다. 하이브리드 언어 컴파일 기법과 인터프리터 기법을 모두 사용하는 언어

0

객체 지향 설계 5원칙 SOLID

컴파일 언어, 인터프리터 언어, 하이브리드 언어 객체 지향 3요소 객체 지향 설계 5원칙 SOLID 객체 지향 설계 5원칙 SOLID1. SRP(Single Responsibility Principle) - 단일 책임 원칙한 클래스는 하나의 책임(역할)만 가져야 한다. 역할의 분리라고 생각하면 편하다!변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따르는 것 2. OCP(Open Close Principle) - 개방 폐쇄 원칙 확장 에는 열려 있으나 변경 에는 닫혀 있어야 한다. 기존 코드에 대한 수정은 직접적으로 하지 않고 기능을 확장, 추가 할 수 있도록 해야 한다. 인터페이스와 추상 클래스를 이용해 공통적인 작업에 대해 추상화 를 진행 상속과 구현을 이용해 기존 코드(상위 클래스)에 대한 수정 없이 기능을 확장시킬 수 있다. 이는 곧 다형성 을 이용한 기능 확장이다. OCP 문제점

0

객체 지향 3요소

컴파일 언어, 인터프리터 언어, 하이브리드 언어 객체 지향 3요소 객체 지향 설계 5원칙 SOLID 객체 지향 3요소1. 캡슐화 정보의 은닉 관련이 있는 변수와 함수를 묶는 작업 객체는 접근제어자를 이용해 외부에서 접근할 수 있는 정보 와 외부에서 접근할 수 없는 정보 를 분리해 관리할 수 있다. private : 클래스 내부에서만 접근 가능 public : 클래스 외부에서 접근 가능 protected : 자기 클래스 혹은 상속 받은 클래스에서만 접근이 가능 2. 상속 자원의 상속 자식 클래스가 부모 클래스의 모든 자원 (Field, Method) 를 물려 받는 것을 의미한다. 하나의 부모클래스는 여러개의 자식 클래스를 가질 수 있지만 그 반대는 안된다. 개발자는 상속을 통해 불필요한 코드를 줄일 수 있고 공통 자원 관리를 집중시킬 수 있다. (유지 보수가 편리하다.) 3. 다형성 여러가지 형태를 가질 수 있게 하는 특성대표적으로 오버라이딩 과 오버로딩 이 있다.