개요 C, C++과 같은 언어는 운영체제. 즉, 실행환경에 따라 컴파일러가 그에 맞는 기계어 코드로 변환합니다. Java는 이와 같은 환경 종속성을 어느 정도 해결하기 위해 JVM, Java Virtual Machine이라는 구조를 채용했습니다. JVM은 Java를 실행하기 위한 환경을 제공해줄 뿐 아니라, GC, JIT 등과 같은 기능을 제공하고, 주기억장치를 할당받아 사용하는 역할을 맡고 있습니다. 오늘은 JVM이 주기억장치를 할당받으면 이를 어떻게 나누고 사용하는지 알아보도록 하겠습니다. JVM 메모리구조 JVM은 위와 같은 구조를 가지고 있습니다. 여기서, Java가 실행될 때 클래스, 메서드, 객체 등의 정보를 적재하는 부분은 Runtime Data Area입니다. 이러한 메모리구조는 각 Jav..
개요 Java에서는 동시성 프로그래밍을 위해 Thread Class를 지원합니다. 이 Thread는 우리가 CS를 공부할 때 배웠던 Process, Thread의 Thread를 Java에서 구현한 것입니다. Thread를 사용하면 Process보다 많은 자원을 절약할 수 있습니다. 하지만, Thread를 그냥 사용한다면 많은 오버헤드가 발생합니다. Thread는 Kernel Thread, User Thread라는 두 종류가 있습니다. JVM은 User Thread를 Kernel Thread하나와 매칭하여 동작시킵니다. 따라서, Java로 Thread객체를 만들 때 Kernel단에 갔다 와야 할 것입니다. 그렇게 되면, System call, Interrupt, ISR등의 과정을 거쳐야 하기 때문에 비용이..
개요 Java개발을 처음 시작하는 분들이 항상 헷갈리는 부분이 있습니다. JVM, JIT, JNI, JRE, JDK... J로 시작하는 3글자 단어들이 왜 이렇게 많은지. 오늘은 J로 시작하는 3글자 단어들 중 JVM, JIT, JRE, JDK에 대해 간단하게 알아보겠습니다. JVM(Java Virtual Machine) JVM은 Java를 실행하기 위한 가상 환경입니다. JAVA이전의 세상을 잠깐 보겠습니다. 어셈블리, C와 같은 로우 레벨 언어들이 세상을 지배하던 시절에는 개발환경이 정말 큰 변수였습니다. 세상에 나오는 수많은 HW들이 사용하는 명령어 집합이 모두 다르고, OS마다 라이브러리가 다르고... HW를 하나 바꿀 때마다 코드 수정을 하고, OS를 바꿀 떄마다 수정을 하고, 다시 만들고.....