Application/JAVA & Kotlin
Thread/Heap dump 뜨는 법
jps -v java PID 확인 후 Thread Dump jstack {{PID}} > {{경로}}/thread-dump.txt heap dump jmap -dump:live,format=b,file={{경로}}/{{파일명}}.hprof {{PID}}
자바 병렬성과 동시성 정리
병렬성: 한 테스크를 여러 하위 테스크로 나눠서 CPU의 다른 코어 또는 다른 머신에서 이들 하위 테스크를 병렬로 실행한다. 동시성: 조금씩 연관된 작업을 같은 CPU에서 동작하는 것 또는 애플리케이션의 생산성을 극대화할 수 있도록 코어를 바쁘게 유지하는 것이 목표라면, 원격 서비스나 데이터베이스 결과를 기다리는 스레드를 블록함으로써 연산 자원을 낭비하는 일을 피해야 한다. 자바는 이런 환경에서 사용할 수 있는 두 가지 주요 도구를 제공한다. Future 인터페이스로 자바 8의 CompletableFuture 구현은 간단하고 효율적인 문제 해결사. 자바9에 추가된 발행 구독 프로토콜에 기반한 리액티브 프로그래밍 개념을 따르는 Flow API는 조금 더 정교한 프로그래밍 접근 방법을 제공한다. 동시성은 단..
Java 제네릭
제네릭이란? 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 타입검사를 수행하는 방법. (List) 반대 개념으로 Raw Type을 들 수 있다. (List) 효과 컴파일 시점에 타입 체크를 수행할 수 있어서 좀 더 안정성 제공. (런타임 시에 타입 에러가 발생하지 않고, 컴파일 시점에 타입 에러가 발생한다는 것은 엄청난 효과....!) 제네릭의 타입 소거 시점 제네릭 타입은 컴파일 시점에 컴파일러에 의해 자동으로 검사 되어 타입 변환된다. 그리고 나서 런타임 시점에는 모든 제네릭 타입은 소거(제거)되고, 런타임 시점에는 어떠한 제네릭 타입도 포함되지 않게 된다. 제네릭의 특징 - 비구체화 제네릭 타입은 비구체화 타입으로, 컴파일 시점에 타입 체크를 수행하고 런타임에는 타입을 모두 소거하는..
Java Thead
프로세스와 스레드 프로세스란 운영체제에서 실행 중인 하나의 애플리케이션을 의미한다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 독립적인 메모리를 할당받아 애플리케이션의 코드를 실행한다. 스레드는 하나의 실행 흐름으로 프로세스 내의 여러 스레드를 가질 수 있다. 멀티 프로세스 vs 멀티 스레드 멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이라면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 할 수 있다. 멀티 프로세스들은 운영체제에서 할당받은 자신의 독립적인 메모리를 가지고 있어서, 하나의 프로세스에서 오류가 발생해도 다른 프로세스에 영향을 미치지 않는다. 반면에 멀티 스레드는 하나의 프로세스 내부에 생성되기 때문에 하나의 스레드가 예외를 발생시키면 해당 프로세스 자체가 종료..
JVM이란? JVM의 구조 간단 정리
JVM이란? JVM은 Java Virtual Machine으로, Java와 OS 사이에서 중간자 역할을 수행합니다. JVM은 자바 컴파일러(javac)에 의해 소스코드 (.java)로 부터 변환된 자바 바이트코드(. class)를 해당 OS에 맞게 해석해주는 역할을 수행합니다. 효과 이때, 자바 컴파일러에 의해 생성되는 자바 바이트 코드는 기계어가 아니라 OS에서 바로 해석할 수 없습니다. 기존의 C와 같은 언어는 소스를 컴파일하면 OS에서 바로 실행될 수 있는 실행파일 즉 기계어로 컴파일되는 반면, 왜 자바와 같은 JVM언어는 바로 기계어로 컴파일하지 않고, 중간에 바이트 코드로 변환하여 JVM이 바이트 코드를 실행하는 방식을 사용할까? 기존의 C와 같은 언어 방식은, 운영체제가 바뀔때 마다 그에 맞는..