cs 스터디를 한지 두달정도 됐는데, 이제 시간도 여유로워졌겠다 공부한거 정리해서 올릴 예정...
VSFe/Tech-Interview <- 이 깃허브를 참고해서 공부하는 중이다!
질문들이 굉장이 좋은 듯해서 추천합니다!!
JVM → Java Virtual Machine 자바를 실행하기 위한 가상의 기계
기능
자바 컴파일러가 바꿔둔 클래스 파일을 읽어서 해당 운영체제에 맞게 실행시킬 수 있도록 도와줌
Interpreter: 바이트 코드를 한줄씩 읽는것
JIT(Just-In-Time) compiler: 이미 실행했던거를 기억하도록 해서 좀 더 빠르게 실행할수있도록 캐싱
Garbage Collector: 메모리를 자동으로 할당하고 버리고 함
가능함. 자바만을 위한것이 아니라 특정 규칙에 따라 작성된 바이트 코드를 실행하는 것이기 때문이다.
그래서 Kotlin, Groovy, Jython 등.. 가능하다
C++, C# 같이 네이티브 코드로 컴파일 되는거는 JVM에서 바로 실행할 수 없다.
사용 가능하다. 대신 바이트 코드로 컴파일돼서 클래스 파일이 생성되는게 아니라 운영체제에 맞는 네이티브 코드로 직접 컴파일이 된다.
바로 실행 가능하지만 일부 기능은 제한될 수 있음.
장점
단점
부모-자식 관계라기보다는 동일한 프로세스 내에서 실행된다고 봐야함. JVM이 프로세스 내에서 프로그램을 실행하는 환경을 제공하는 구조
final → 값의 불변하는 키워드
→ 불변성 보장, 안정적인 코드 작성에 도움
static → 정적 변수 키워드
⇒ 코드의 안정성, 재사용성 높임
final → 불변을 의미하니까 JIT에서 캐싱해서 성능 최적화도 가능
변하지 않으니까 안정성 있는 코드 작성 가능
의도 명확하게 표현 가능
그렇다. final은 변하지 않는다고 말하는거니까 이 부분에 대해서는 재실행하지 않도록 JIT로 캐싱한다.
static도 다르게 취급. 클래스 레벨에서 공유하는 자원을 의미하기 때문에, 메모리와 CPU 자원을 효율적으로 사용하는데 도움.
느낀점
부끄럽지만 JVM에 대해서 제대로 공부한 게 처음이었고
static, final 어렴풋이 알고만 있고 제대로 알아가려고 하지 않았던 것 같다...
부족한 지식을 얼른 쌓아가야겠다 !!!