티스토리 뷰

자바가 오라클로 인수되면서 저물어 간다는 여론도 많고 자바스크립트의 떡상으로 위상이 많이 떨어지긴 한 것 같다

자바 사용자 입장에서는 가슴 아픈 일이 아닐 수 없다 

근데 난 자바의 요즘 행보를 보면 실상은 다르다고 생각한다 

벌써 나온지 8년 된 자바 세계의 혁명이었던  자바 8부터 FP를 강력히 지원하기 위해 스트림, 람다가 도입되고 

인터페이스에 default 메서드를 넣을 수 있어 하위 호환성을 유지하며 확장해 갈 수 있게 됐다

 

이후에도 버전업 하면서 코틀린의 data class에 해당하는 record,

switch case 문을 간편하게 사용할 수 있는 pattern matching도 나오고 

한정적 상속을 가능케 하는 sealed 키워드 등등 자바도 계속해서 발전하고 있다

실무에서는 아무래도 언어 자체의 버전을 올린다는 게 쉽지 않은 것 같다 

유용한 기능이 쏟아져 나와도 도입할 수 없는게 아쉽지만 아직까지 자바 8을 쓰지 않는 회사도 있으니 감사하자

이펙티브 자바를 JDK17로 작성하면서 공부하고 있는데 아는게 많지 않아 신기능을 깔짝깔짝 써보는 중인데도 재밌다

 

개발 공부를 한지 어언 1년이 다가오는 지금은 이전과는 공부 방식이 조금 달라졌다

초보때는 최대한 많은 양을 공부하기 위해 구글링을 통해 나온 결과를 

제대로 이해하지도 못하고 허겁지겁 갖다 쓰고 까먹기 바빴다

요즘은 알고 있던 것도 제대로 알고 있는게 맞나 의심스러워 반복 학습을 하고 

공식 문서를 먼저 찾아보려 하고 필요하면 코드 내부도 까보고 있다

관심사도 넓어져서 G1GC, ZGC 동작 방식 구경도 하고 GraalVM 발표 자료도 찾아본다

GC나 GraalVM을 각잡고 공부하려면 개노잼일 텐데 구경만 할 땐 나름 재밌다

제대로 알려면 해당하는 GC의 논문을 찾아봐야 하는데 지금은 구경까지만 인가 보다

 

GC에 대해 흐름만 살펴보자면 기본적으로 모든 GC들은 기존의 문제점을 해결하기 위해 새로 나온다

이건 비단 GC만이 아니라 산업 전반의 기술에 해당되는 얘기다

GC가 하는 일은 사용하지 않는 객체의 참조를 해제해주는 일이니 쉽게 말해 메모리 관리다

단 이 과정에서 stop-the-world 라는 애플리케이션이 멈추는 순간이 발생한다

이 순간을 최대한으로 줄여 애플리케이션 중단 시간을 줄이고 메모리 정리를 빠르게 하는 것이 GC의 목표다

자바 8에서 G1 GC를 사용할 수 있는데 얘도 성능이 좋아 깜놀하겠는디 더 발전된 Shenandoah, ZGC까지 나와있다

G1 GC까지 상세한 설명이 있는, 야무진 네이버 d2 글을 참고해보자

https://d2.naver.com/helloworld/1329

 

특히 GraalVM은 오라클에서 홍보를 대대적으로 하고 있는데 단순 호들갑일지 진짜 쩌는 놈일지 지켜봐야겠다

앞으로가 기대되는데 우리가 쓰지 않았을 뿐, 개발 기간은 정말 길다

이 놈은 기존의 C++로 작성된 Just-In-Time, JIT Compiler를 대체하며 자바로 작성된 컴파일러를 탑재하고 있다

기존 컴파일러는 레거시 코드라 유지보수가 힘들고 성능 최적화의 한계에 다다라서 대체했다고 한다

바이트 코드가 아닌 네이티브 이미지로 컴파일해버리는 Ahead-Of-Time, AOT compile 방식을 사용한다

자바의 약점이었던 워밍업 시간이 대폭 개선될 수 있는 것이다

맨 아래에 재밌게 본 GraalVM 소개 영상을 첨부한다

 

Java, JVM, GC는 계속해서 놀라울 정도로 발전해가고 있다

게다가 장기간 쌓인 JVM 성능 최적화 노하우, 스프링이라는 강력한 프레임워크가 뒤에 있으니 든든하다

나 같이 평범한 사람에게는 자바가 죽어가는 게 문제가 아니고 내가 자바를 못 따라갈까 봐 걱정이다

 

 

GraalVM 소개 영상

https://www.youtube.com/watch?v=4lQ-sTDlgIo&list=PLdntWJk2tJPJucjdMaXqAPzbYJNlzL7lx&index=2

'Java' 카테고리의 다른 글

객체지향  (0) 2021.08.01
댓글
링크
글 보관함
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday