[Java] 코드 캐시(Code Cache)
·
Language/Java
설명하기에 앞서, `Java` 언어로 작성된 코드가 어떻게 실행되는지 아주 간단하게 짚고 가보자. Java 코드 실행 과정 요약개발자가 `.java` 형식의 `Java` 코드를 작성한다.해당 소스코드를 컴파일하면, 바이트코드(`.class`)로 변환이 된다.이후, 클래스로더가 해당 바이트코드를 읽어 다양한 정보를 적절하게 메모리에 적재한다.그리고 이때 실행엔진이 인터프리터 방식 혹은 JIT 컴파일러 방식으로 코드를 실행한다. 앞서, 순서에서 언급되긴 했지만 `JVM`이 중간 형태인 바이트코드를 읽어서 실행하는 방법에는 어떤 것들이 있을까? `JVM`은 바이트코드를 실제 CPU에 실행시키기 위해서 인터프리터 방식과 JIT(Just-In-Time) 컴파일러를 모두 사용한다. 인터프리터JVM의 실행엔진 `..
[GC] Mark And Sweep vs Mark And Compact
·
Language/Java
과거 자바의 `GC`에 관해 알아보았을 때 `Mark And Sweep`만 알고 공부했었는데, 추후 `Mark Anc Compact`를 알게 되어 둘의 차이점에 관해 간단하게 정리하려고 한다. Mark And SweepMark 단계:살아있는 객체들은 마킹하고, 살아있지 않은 객체들에 관해서는 마킹을 수행하지 않는다.Sweep 단계:Mark되지 않은 쓰레기 객체들(참조되지 않은 객체)을 찾아 제거위 과정은 메모리에서 객체를 청소하는 단계이때, 메모리의 단편화가 발생할 수 있음왜냐? 삭제만 할 뿐 JVM의 메모리에 이곳저곳 남아있기 때문 Mark And Compact`Mark And Compact`는 `Mark And Sweep`의 확장된 버전으로, Sweep 단계 후 객체들을 압축하여 메모리 단편화를..
[Java] Java를 복습해보자
·
Language/Java
Java의 컴파일 과정자바 프로그래머가 `.java`의 확장자를 갖는 소스 파일을 생성한 뒤 `javac` 컴파일러를 이용해 `.class`의 확장자를 갖는 바이트 코드를 만들어내는 것을 컴파일 과정이라고 한다. Java 프로그램은 바로 실행이 가능할까?Java 프로그램은 완전한 기계어가 아닌 중간 단계의 바이트 코드를 사용한다.그렇기에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다.해당 가상 운영체제는 JVM으로, JVM 덕분에 우리는 다른 운영체제에서도 JVM만 설치되어있으면,동일한 결과를 내는 Java 프로그램을 수행할 수 있게 된다.즉, 운영체제마다 Java 프로그램을 개발하는 것보다 운영체제와 자바 프로그램을 중계하는 JVM을 두어,어떤 운영체제에서도 동일한 실행 결과가 나오도록 설..
[Java] 자바 구성
·
Language/Java
자바 구성 운영체제는 자바 프로그램을 바로 실행할 수 없다. 그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문이다. 따라서, 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이것이 자바 가상 기계(JVM: Java Virtual Machine)이다. JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 한다. 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제별로 자바 프로그램을 별도로 개발하는 것보다는 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것이다. 따라서, 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다. 바이트 코드..