목록JVM (4)
dev-sohee 님의 블로그
malloc()과 free()는 런타임 도중에 사용할 메모리 공간 할당과 해제를 위한 즉, 동적 메모리 사용을 위한 C언어의 대표적인 함수들입니다. C언어로 개발을 해보신 분들이라면 이 함수들을 봤을 때 인상을 찡그리실 수도 있습니다.malloc()을 사용하는 순간 시스템은 사용하지 않는 메모리를 할당하고 이에 대한 포인터를 리턴합니다. 이것은 프로그램의 실행 지체를 유발하기 때문에 조심해서 사용해야 하는 아주 까다로운 녀석입니다. 그리고 malloc()으로 메모리를 할당한 후에 free()로 해제를 안하면 메모리 누수, 성능 저하의 문제가 발생할 수 있으므로 free()도 꼭 잊지말고 해줘야 합니다. 하지만 자바에서는 이런 고민을 할 필요가 없습니다. 자바의 가비지 컬렉터가 알아서 해주니까요. 이 글..
인터프리터는 바이트 코드를 한줄 한줄 읽으면서 OS가 실행할 수 있도록 기계어로 번역을 하는 방식입니다. 초기 JVM은 인터프리터 방식만 이용하여 한줄 한줄 읽기 때문에 실행속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 도입해 속도를 보완했습니다. 오늘은 JIT 컴파일러가 무엇인지, 어떻게 JVM의 속도를 개선했다는 것인지 자세히 알아보겠습니다.* 인터프리터 * 컴파일러* JIT-Compiler(Just-In-Time) # 인터프리터와 컴파일러 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환합니다. 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행합니다.파이썬은 인터프리트 언어이고 C, C++는 컴파일 언어..
이 글에서는 자바의 핵심이자 두뇌인 JVM에 대해 깊이 알아보겠습니다. * 클래스 로더* 실행 엔진* 메모리 영역 # 클래스 로더자바는 동적 로드, 즉 컴파일 타임이 아니라 런타임(바이트 코드를 실행할 때)에 클래스를 로드하고 링크한다는 특징이 있습니다. 이 동적 로드를 담당하는 부분이 JVM의 클래스 로더입니다. 정리하자면, 클래스 로더는 런타임 중에 JVM의 메서드 영역에 동적으로 Java 클래스를 로드하는 역할을 합니다.**바이트코드란? : 자바 소스 코드를 컴파일한 결과로 생성되는 중간 코드. 자바 소스 파일(.java)을 자바 컴파일러(javac)에 의해 바이트코드(.class)로 변환한다. 사람이 읽기 쉽도록 쓰인 소스코드와 비교했을 때, 바이트 코드가 덜 추상적이며, 더 간결하고, 더 컴퓨터..
저는 첫 직장의 첫 프로젝트에서 C언어로 개발을 시작했습니다. 반복문이나 연산이 많은 프로그램에서 C언어의 저수준 접근 방식은 코드 최적화에 유리하여 고성능 애플리케이션을 작성할 수 있다는 장점이 있고 메모리 관리나 포인터 같은 개념을 깊이 이해하는 데 큰 도움이 되었습니다. 그러나 시간이 지나면서 소프트웨어 개발의 복잡성이 증가할수록, 대규모 소프트웨어 개발에 효율적인 프로그래밍 언어의 필요성을 느꼈고 자바를 공부하기 시작했습니다. 자바의 구동원리에 대해 공부하면서 JVM(Java Virtual Machine)에 대해 알게 되었습니다. 처음에는 단순히 자바 프로그램을 실행하기 위한 환경으로만 생각했지만, 점차 그 내부 구조와 동작 원리에 대해 더 깊이 이해하고 싶어졌습니다. JVM은 자바 프로그램을 ..