Java 3

[Java] HikariCP maxConnectionIdleTime은 필수일까? 메모리 파편화와 GC의 발전

개요얼마 전, Spring Boot 서버에서 주기적으로 CPU 사용량이 치솟는 현상을 트러블 슈팅한 글을 읽었습니다. 문제의 원인은 데이터베이스 커넥션 관리에 있었는데요, 여러 샤드에서 동시에 대량의 커넥션이 만료(idle)되었고, 이를 한꺼번에 재수립하는 과정에서 어플리케이션 서버에 부하가 발생했던 것이죠. 글쓴이는 이 문제 상황을 해결해 나가는 과정에서 독자들에게 다음과 같은 질문을 던졌습니다. 커넥션이 유지된 채로 두면 재사용에 유리한 게 아닐까?maxConnectionIdleTime 설정이 반드시 필요한가? 해당 아티클에서는 maxConnectionIdleTime(커넥션의 최대 유휴 시간) 설정이 필수적이라고 강조하며, 다양한 이유 중 하나로 힙 메모리의 파편화 방지를 꼽았습니다. 순간 머릿속에..

Java 2025.11.29

[Java] Java가 네이티브 언어의 성능을 따라잡는 방법, JIT 컴파일러

개요 우리는 흔히 C는 빠르고 Java는 느리다라고 말합니다. 주변 개발자들에게 왜 Java는 네이티브 언어에 비해서 느린가요? 라고 물어보면, 대부분 다음과 같은 답이 돌아옵니다. Java는 JVM 이라는 가상 머신 위에서 돌아가기 때문입니다 이는 틀린 말은 아닙니다.하지만 엔지니어로서 저희는 이를 조금 더 구체적으로 짚어볼 필요가 있습니다. 가상 머신 위에서 실행된다는 것이 하드웨어 입장에서 구체적으로 어떤 비용을 치르는 일일까요? 도대체 JVM 내부에서 무슨 일이 벌어지길래 태생적으로 느리다는 꼬리표가 붙었을까요? 이 글에서는 C언어와 Java가 하드웨어를 다루는 방식의 근본적인 차이를 비교해보고, Java 진영에서 이 태생적인 한계를 극복하기 위해 도입한 JIT 컴파일러라는 기술에 대해 소개해..

Java 2025.11.26

[Java] Java와 JVM 메모리 관리

Java와 JVMJava언어가 다른 프로그래밍 언어들과 비교했을 때 가장 특별한 점은 무엇일까요? 바로 JVM 위에서 동작한다는 점입니다. C나 C++ 같은 네이티브 언어로 작성된 프로그램은 OS가 제공하는 환경 위에서 직접 시스템 콜을 호출하며 실행됩니다. 반면, Java 프로그램은 JVM이라는 중간 계층을 거치게 됩니다. 이 JVM이 OS와 상호작용하며 모든 동작을 수행하죠. 즉, Java는 OS 위에 JVM이라는 가상 머신을 한 겹 더 두고 실행되는 셈입니다.이러한 구조는 메모리 관리 관점에서도 큰 차이를 만들어냅니다. 가령, C++의 경우에는 개발자가 직접 메모리 할당과 해제를 책임져야 하지만, Java는 JVM이 이를 자동으로 관리합니다. 개발자가 이런 저수준의 동작을 신경 쓸 필요가 없다는 것..

Java 2025.10.21