Java/Java 파헤치기

    Java 한글 인코딩 안될때 jdk 버전 확인해야함.

    Java 한글 인코딩 안될때 jdk 버전 확인해야함.

    배경 IDE 에서는 한글이 잘 출력되는데, java 소스코드(System.out.println)를 통해서 출력시 글자가 깨지는 현상. 원인 JEP-400(인코딩이 default 로 UTF-8 로 설정되는 기능)이 jdk 18 버전에서 문제를 일으키는 것으로 확인. (Windows 환경) 해결방안 jdk 버전을 17 이하 버전을 사용할 것. 참고 https://inside.java/2021/10/04/the-default-charset-jep400/ Jep 400 and the default charset – Inside.java Have you ever wondered what is `default charset`? Here’s what the javadoc for Charset.defaultCharse..

    Spring MSA 를 간단하게 구현해보자 (+ 최신 release, 모니터링, heapdump)

    Spring MSA 를 간단하게 구현해보자 (+ 최신 release, 모니터링, heapdump)

    GitHub - Dong-Hyeon-Yu/spring-cloud-monitoring-example: Monitoring Spring MSA example (release train-2021.01) / gateway+discover Monitoring Spring MSA example (release train-2021.01) / gateway+discovery+config+feign / grafana+prometheus+docker / jvm heap dump example - GitHub - Dong-Hyeon-Yu/spring-cloud-monitoring-example:... github.com 환경 ▪️ Release Trains : 2021.0.1 (https://spring.io/project..

    JavaThread 에 대해 깊게 이해해보자 (feat. Openjdk 커널 분석)

    JavaThread 에 대해 깊게 이해해보자 (feat. Openjdk 커널 분석)

    Thread에 대한 기초적인 os 지식은 이 글(쓰레드(Thread)와 동기화 문제)을 참고하기 바람 Thread는 user가 관리하느냐, os가 관리하느냐에 따라 User-Level-Thread 또는 Kernel-Level-Thread 로 나뉜다. 두 가지의 장점을 합친 Hybrid 모델도 존재한다. Java에서는 Kernel thread와 User thread를 모두 사용하는 Hybrid 모델이다. (jdk 1.2 버전까지는 100% User-Level-Thread인 GreenThread라는 것이 있었다고 한다.) 그림을 잘 보면, User-level thread 3개가 2개의 Kernel-Level-Thread를 공유하고 있는 것을 알 수 있다. OS 수업을 듣다가, java 는 구체적으로 이런 방..

    [JVM] 레퍼런스

    GC 관련 HotSpot Virtual Machine Garbage Collection Tuning Guide One strength of the Java SE platform is that it shields the developer from the complexity of memory allocation and garbage collection. docs.oracle.com JVM specification The Java® Virtual Machine Specification Tim Lindholm Frank Yellin Gilad Bracha Alex Buckley Daniel Smith docs.oracle.com Java concurrency 정리 잘된 블로그 https://jenkov.com/..

    JIT compiler

    JIT compiler

    JVM 은 이식성을 위해 java specific instruction 을 생성하고 JVM 에서 line by line 으로 해석한다. 하지만 이런 방식은 c 같은 언어에 비해 매우 느릴 수 밖에 없다. c 는 모든 코드를 기계어로 한번에 번역하여 실행하는 반면 java 는 동일한 함수가 여러번 호출되는 경우에, 해당 함수를 번역하고 실행하는 작업이 반복되기 때문이다. 그러한 코드를 hot code 라고 하고, 잘 호출되지 않는 코드를 cold 코드라고 한다. 그래서 JIT 컴파일러를 도입하여, hot code 는 machine specific 한 기계어로 번역을 하고 캐시하는 것이다. 이런 방식으로 인터프리터 방식의 단점을 보완한다.