Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] 컴파일 언어 Java와 JVM 본문
컴파일 언어와 인터프리터 언어
프로그램을 실행하기 위해 고급어(C, Java, Python..)로 작성된 코드를 기계어로 번역해주는 작업이 필요하다
프로그래머가 쓴 코드를 번역하는 시점에 따라 그때 그때하면 인터프리터 언어, 미리 해놓으면 컴파일러 언어라고 한다.
코드 수정이 잦은 서비스에서는 업데이트가 수월한 인터프리터 언어를 쓰는게 좋지만
매번 그때 그때 번역해야하기 때문에 속도는 컴파일러 언어보다 느리다.
Java는 컴파일 언어다

Java로 코드를 작성하고 컴파일러에 명령을 내리면 .class라는
Java Byte code로 변환된 파일이 생긴다.
이 Java Byte code는 기계어가 아니다.
그래서 운영체제(OS)가 해석할 수 없는데,
이를 자바가상머신(Java Virtual Machine)이
운영체제(OS)가 실행할 수 있도록 해석해준다.
자바 가상 머신 (JVM)

- Class Loader: Runtime시점에 클래스를 로딩하고, 인스턴스 생성 시에 메모리에 로드한다
- Runtime Data Areas: 프로그램을 수행하기 위해, 운영체제(OS)로부터 별도로 할당받은 메모리 공간을 말한다
- Excution Engine: Class Loader에 의해 별도의 메모리에 로드된 Java Byte Code를 실행하는 Runtime 모듈을 말한다.
❓ Garbage Collector
: 메모리 누수를 방지하기 위해 주기적으로 메모리를 정리한다.(변수들, 함수들, 객체들)
: 메모리를 알아서 관리하는 언어 (managed language)
- mark-and-sweep: 메모리를 쭉 훑은 다음, 필요한 것들만 마크해서 마크안된 것들을 쓸어버린다.
- reference-counting: 특정요소가 참조되는 횟수를 세서 0이되면 쓸어버린다
(※ 순환참조하지 말 것, 변수들이 서로 참조해버리면 reference-counting이 0이 안된다)
'Backend > 자바' 카테고리의 다른 글
[Java] 자바와 서블릿(Servlet), PHP, JSP (0) | 2022.12.09 |
---|---|
[Java] 미완성과 추상성 (클래스) (0) | 2022.12.07 |
[Java] 옵저버(Observer) 패턴 (0) | 2022.12.03 |
[Java] 디자인패턴 中 생성패턴, 팩토리 메서드(Factory method) 패턴 (0) | 2022.11.28 |
[Java] 디자인 패턴 中 생성패턴, 싱글톤(Singleton) 패턴 (0) | 2022.11.28 |
Comments