자바 개발자가 Java Virtual Machine을 학습해야 하는 이유는?

2013-03-22 12:24

요즘 2학기(next는 2학기가 7,8월이다.) 수업 중 자바 강의에 대한 준비를 하고 있다. 최근에 준비하고 있는 내용이 Java Virtual Machine(이하 JVM)이다.

먼저 JVM의 전체 구조에 대해 파악한 후 자바 바이트 코드를 javap를 통해 읽는 과정을 준비하고 있다. JVM의 Execution Engine이 바이트 코드의 각 라인을 읽어 실행할 때 JVM내에서 어떤 일이 일어나는지에 대해서도 알아보려 하고 있다.

이렇게 준비를 하다보니 자바 개발자가 JVM을 학습해야 되는 이유에 대한 궁금증이 생겼다. 학습해야 하는 이유 중 한가지는 Multi Thread 환경에서 Thread Safe한 경우와 그렇지 않은 경우를 파악해 Single Instance로 만들 것인지, 매번 생성할 것인지를 명확하게 판단할 수 있을 것으로 생각한다. 그 외 또 찾아본다면 반복문을 사용하는 경우와 recursive method를 사용할 때의 성능 차이나 메모리 사용량등을 정확하게 파악할 수 있을 듯하다.

이 외에 전문적으로 성능을 튜닝하는 관점이 아니라 일반 자바 개발자의 관점에서 JVM의 내부 구조와 자바 바이트 코드가 어떻게 동작하는지를 이해하는 것이 어떤 도움이 될지 궁금해졌다. 자바 개발자 관점에서 필요한 부분이 있다면 그 부분을 강의 내용에 더 포함시키기 위함이니 지금까지 경험으로 봤을 때 정말 유용한 점이 있다면 공유해 주었으면 좋겠다.

물론 다 알면 좋겠지만 이제 시작하는 친구들에게 너무 많은 정보를 주는 것보다 꼭 필요한 정보르 전달하고 동기 부여를 해준다면 추후에 본인들이 스스로 학습해 나가는 것이 더 좋은 접근 방법이라고 생각한다.

3개의 의견 from FB

3개의 의견 from SLiPP

2013-03-22 17:28

그런데 JVM에 대한 이해를 바탕으로 자바코드를 어떻게 작성해야 하는지 판단할 수 있으려면, 어떤 자바코드가 어떤 바이트코드를 생성하게 되는지도 올바르게 이해해야 하지 않나요? 그러러면 이 JVM 수업이 컴파일러 수업을 포함하게 될 것 같은데, 한 학기에 다 하기 어렵지 않을까요?

2013-03-22 17:38

@@semtlnori 그 단계까지는 생각하지 않고 있고요. 자바 바이트 코드를 읽는 부분만 진행해 보려고 합니다. javap를 통해 생성되는 바이트 코드 읽는 방법을 알려주고, JVM에서 Stack과 Heap 메모리를 어떻게 활용하는지 정도 수준에서만 진행하려고 생각하고 있습니다. 말씀하신대로 컴파일러는 다루지 않을 겁니다.

깊이 있는 수준으로는 다룰 계획은 없고요. 대략적인 내용만 다룰 계획입니다.

2013-03-22 22:35

저는 why에 대한 의문을 해결할 수 있을 것 같네요. 왜 jsp 라인수 제약이 있는지, 디버그할 때 라인 브레이크가 왜 가능한지에 대해서 이해할 수 있는 좋은 기회인 것 같아요.

시스템 프로그램(native system i386이나 마이크로 프로세서)에서 JVM에서 발전한(심볼을 주소기반에서 객체 스트링 기반으로 발전) 점 등 설명해 주시면 더 좋을 것 같아요.

ruby VM, erlang VM 등도 JVM의 기능을 구현하기 위해서 노력하는 이유를 좀더 이해할 수 있지 않을까 생각되네요.

의견 추가하기

연관태그

← 목록으로