JVM
-
OOM: unable to create new native thread 추적하기JVM 2024. 9. 23. 02:51
1) 서론개인적으로 개발하던 애플리케이션에서 OOM이 발생했습니다. 현상과 문제 되는 코드는 명확하게 발견했는데요. 원인을 찾아나가는 과정 중에 배운 것을 공유합니다.2) OutOfMemoryError 발생JVM 기반 애플리케이션에서 발생했고, 더 이상 요청을 받을 수 없는 상태가 되었습니다.Caused by: java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) at java.lang.Thread.start(Thread.java:717) 이유는 명확했습니다. 스레드풀 생성에 singleton pattern이 적용되지 않았습니다. 한번만 초기화되고, 이후에는 초기화된 인스..
-
왜 JVM이 필요할까?JVM 2020. 6. 6. 18:49
누군가 저에게 물었습니다. "어차피 JVM도 C로 만들어진 가상 머신인데, 처음부터 C처럼 바로 기계어로 컴파일해주면 되지 않나요? 왜 굳이 속도 저하를 가지면서 두 번의 과정을 거쳐야 하죠?" 답변을 하려고 생각을 해보니 꽤 타당한 이야기입니다. 뭔가 설득당할 것 같습니다. 혼자서 나름대로 오랜 시간 고민을 해보고, 정리한 내용들입니다. 1. History of Java 모든 것을 설명하기 전에 자바의 유래에 대해서 알아보려고 합니다. 모든 것의 뿌리는 중요합니다. 아무리 변형이 일어나도, 근본이 되는 진리는 변하지 않습니다. 자바는 James Gosling이라는 캐나다의 개발자에 의해서 만들어졌습니다. 자바의 역사를 보면 지겹도록 나오는 말이 "Write once, Read anywhere"입니다. ..
-
Java Memory Model(자바 메모리 모델)JVM 2020. 5. 27. 19:10
이번에는 Java Memory Model(자바 메모리 모델)에 대해서 공부해보겠습니다. 지난번에 작성한 JVM구조부터 메모리 모델까지는 자바를 사용하는 것에 있어서 굉장히 중요합니다. 단순히 언어의 클래스, 메서드 같은 것들을 많이 아는 것도 중요하지만, 이런 것들은 그때그때 검색하면 됩니다. 하지만 구조적인 것을 모른다면, 검색을 하더라도 이해도가 낮을 수도 있고, 전체적인 프로그램 설계를 하는 것에 있어 어려움을 겪을 수도 있습니다. 혹시나 JVM 구조에 대해서 잘 모르신다면, JVM Architecture란? 이 글을 먼저 보고 오셔야 합니다! JVM은 OS의 메모리의 사용권한을 할당받게 됩니다. 기본적으로 프로그램을 실행하려면 운영체제(OS)가 제어하고 있는 메모리를 제어할 수 있어야 합니다. C..
-
[Java]JVM Architecture란?JVM 2020. 5. 24. 17:17
JVM(Java Virtual Machine) "자바 가상 머신"이라고 불리는 JVM은 자바 프로그램을 실행하고, 다른 언어로 작성된 것도 자바 byte code로 컴파일하여 실행할 수 있기 위하여 만들어졌습니다. 자바의 작동 방식 자바는 기본적으로 "Write once, Run anywhere"의 정신으로 만들어졌습니다. 말 그대로 한 번 작성한 내용은, 어디서든지 읽고 실행될 수 있어야 한다는 말인데요. 흥미롭습니다. C++ 같은 경우에는 특정한 운영체제, 하드웨어에서 실행되기 위해서 컴파일되지만, 자바는 byte code로 컴파일됩니다. 이는 흔히 우리가 보는 .class 파일입니다. 이때 JDK에 포함되어 있는 자바 컴파일러(javac)를 사용하여 컴파일하게 됩니다. 이 Bytecode를 JVM은..