MFC를 이용한 자바클래스파일 분석기 < Java Virtual Machine Simulator > 지도교수 : 이 광세 교수님 발 표 자 : 손 영언
목 차 1. 프로젝트 목적과 개발동기 2. 프로그램의 기능과 구조 3. 클래스 파일의 구조 4. 진 행 일 정 5. 시 연 목 차 1. 프로젝트 목적과 개발동기 2. 프로그램의 기능과 구조 2.1. 프로그램의 기능 2.2. 프로그램 구조도 2.3. 각 모듈별 기능과 과제 3. 클래스 파일의 구조 4. 진 행 일 정 5. 시 연 6. 프로젝트 후기와 향후과제
진 행 일 정 발료주제 선정 및 주제에 대한 개괄 적인 구성설정 자바가상머신에 대한 이해와 클래스 파일구조에 대한 자료조사 5월 6월 7월 8월 ~ 발료주제 선정 및 주제에 대한 개괄 적인 구성설정 자바가상머신에 대한 이해와 클래스 파일구조에 대한 자료조사 자바가상머신에서의 메모리관리에 대한 자료 수집과 프로그램 제작 프로그램 제작과 디버깅 작업
프로젝트의 개략 자바언어로 작성된 프로그램의 소스를 바이트코드로 부터 직접 받아들여 그 구성과 각각의 요소들을 분석하여 화면상에 시각적으로 표시하여 프로그램이 수행되는 일련의 과정을 직접 눈으로 확인할 수 있으며 고급 프로그램 제작에 필수적 요소인 메모리 관리에 있어 메모리 사용량과 가비지 컬렉션과정을 가시적으로 표시한다. 그로인해 규모가 큰 프로그램 제작시 쉽게 발생하는 난해한 디버깅과 트레이싱 작업을 용이하게 한다.
프로젝트의 목적과 개발 동기 자바가상기계의 구조와 동작원리의 이해 - 클래스 파일을 입력으로 받아 바이트코드를 분석, 실행하는 모습을 들여다 볼 수 있는 자바가상기계 시뮬레이터의 제작 보다 높은 단계의 컴파일언어의 이해 시뮬레이터 자바가상기계 클래스 파일 실행 결과
기능 및 개발과제 클래스 파일을 분석하여 클래스 정보를 보여주는 기능 바이트코드 실행 시 메모리 변화를 시각적으로 보여주는 기능 자바원시코드의 편집 및 컴파일 기능
시 스 템 구 조 미구현 : 모듈 : 자료구조
모듈별 기능과 수행과제 -1 클래스 파일 자료구조 모듈 : 클래스 파일의 정보를 가짐
모듈별 기능과 수행과제 -2 클래스 파일 분석 모듈 : 클래스 파일을 분석하여 자료구조를 생성
모듈별 기능과 수행과제 -3 클래스 파일 분석 뷰어 모듈 : 클래스 파일의 정보를 가짐
자바 클래스 파일의 구조 1.1 ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; } 타입(type), 이름(name), 개수(count)의 정보가 순차적으로 나타남 여기서 u1, u2, u4는 각각 unsinged 1, 2, 4 byte값을 의미 자바가상기계 명세 참조 (http://java.sun.com/docs/books/vmspec/)
magic : 자바 클래스 파일이라는 것을 나타내는 고유 값 (0xCAFEBABE) minor_version & major_number : 클래스 파일을 생성한 컴파일러의 버전 constant_pool_count & constant_pool - 클래스와 인터페이스에 관계되는 상수를 담아 놓은 일종의 메모리 공간 - 상수 값을 한 곳에 모아 둠으로써 모든 곳에서 쉽게 참조 access flag (2byte) - interface 정보와 class의 access permissions표시 this_class (2byte) : 자신 클래스의 이름 super_class (2byte) : 부모 클래스의 이름 (지정하지 않았다면, java.lang.Object) interfaces_count & interfaces - 자신 클래스가 구현한 interface의 개수를 나타냄 - 자신 클래스가 구현한 interface에 해당하는 CONSTANT_Class entry의 index들을 가짐
fields_count - 자신의 클래스에서 정의된 클래스 변수 또는 인스턴스 변수들의 개수를 나타냄 - 자신의 클래스에서 명시적으로 정의된 변수들만 해당 - 부모 클래스에서 물려받거나 단순히 접근만 가능한 변수들은 포함하지 않음 fields : 클래스 자신의 필드에 대한 보다 자세한 정보를 가지고 있음 methods_count - 클래스에서 정의된 클래스 메쏘드, 또는 인스턴스 메쏘드의 개수를 나타냄 - 클래스에서 명시적으로 정의된 메쏘드만을 포함, 상속받은 메쏘드는 포함하지 않음 methods - 클래스의 메쏘드에 대한 보다 자세한 정보를 갖고 있으며, fields의 구조체와 비슷함 attributes_count -자신의 클래스에 대한 부과적인 attribute의 개수 attributes - 클래스 혹은 인터페이스의 속성 - class file은 다양한 속성을 가질 수 있음
모듈별 기능과 향후과제 -1 클래스 로더 모듈 : 클래스 파일 자료구조를 class area영역에 로드
모듈별 기능과 향후과제 -1 메모리 자료구조 모듈 : class area, heap, stack
모듈별 기능과 향후과제 -2 실행 엔진 모듈 : class area에 있는 바이트코드들을 순차적으로 실행
모듈별 기능과 향후과제 -3 메모리 상태 뷰어 모듈 : 메모리 상태를 시각화 ■ garbage collector - 실행시간에 메모리를 관리하여, 사용되지 않는 메모리를 회수한다. ■ profiler - 시뮬레이션이 끝난 후 사용된 메쏘드의 실행시간과 사용빈도 및 메모리 사용량을 보여준다.
시 연
프로젝트 후기 및 향후과제 프로그램 자료 수집 시간대비 직접적인 코딩 시간의 부족으로 완성된 프로그램을 제작하지 못하였음이 아쉽고 많은 에러와 작동상의 문제점을 안고 있음을 스스로 인식하게 되었다. 본 프로그램의 핵심적인 요소인 메모리 관리기술의 완벽한 구현이 앞으로 남은 가장 큰 과제이며 접근이 쉽지않은 주제임에는 분명하나 그 전망과 활용도가 우수함을 직접적인 프로그램 작업수행을 통해서 절감했다.
개발툴 및 참고자료 Visual Stiduo 7.0 MFC http://java.sun.com/docs/books/vmspec http://pl.changwon.ac.kr/%7Epl/seminar/jvm/98_jvm_sche.html 자바 가상머신 프로그래밍(인포북)