KR101140522B1 - 객체 관리 시스템 및 방법 - Google Patents

객체 관리 시스템 및 방법 Download PDF

Info

Publication number
KR101140522B1
KR101140522B1 KR1020050063643A KR20050063643A KR101140522B1 KR 101140522 B1 KR101140522 B1 KR 101140522B1 KR 1020050063643 A KR1020050063643 A KR 1020050063643A KR 20050063643 A KR20050063643 A KR 20050063643A KR 101140522 B1 KR101140522 B1 KR 101140522B1
Authority
KR
South Korea
Prior art keywords
bytecode
main memory
manager module
application
identifier
Prior art date
Application number
KR1020050063643A
Other languages
English (en)
Other versions
KR20070009777A (ko
Inventor
민효식
임흥순
김유일
조희승
한환수
김진수
Original Assignee
에스케이플래닛 주식회사
에스케이 텔레콤주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에스케이플래닛 주식회사, 에스케이 텔레콤주식회사 filed Critical 에스케이플래닛 주식회사
Priority to KR1020050063643A priority Critical patent/KR101140522B1/ko
Publication of KR20070009777A publication Critical patent/KR20070009777A/ko
Application granted granted Critical
Publication of KR101140522B1 publication Critical patent/KR101140522B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 자바 가상 머신을 수정할 필요 없이, 기 설치된 가상 머신을 그대로 이용하기 위해, 자바 바이트코드 레벨에서 객체의 식별자와 레퍼런스의 상호 교환을 지원하고, 객체를 보조기억장치나 원격 서버를 이용하여 언로딩/로딩함으로써, 모바일, 내장형 장치들의 메모리 자원 한계를 극복하도록 하는 객체 관리 시스템 및 방법에 관한 것이다.
본 발명의 객체 관리 시스템은, 응용 프로그램 수행 중 객체의 생성 및 객체에 대한 접근에 관여하고, 주기억장치의 공간이 부족한 경우 객체를 보조기억장치와 원격 서버 중 어느 하나에 언로딩하며, 응용 프로그램에서 요구하는 객체를 다시 주기억장치로 로딩하여 복원하는 객체 관리 역할을 담당하는 객체 관리자 모듈과; 클라이언트 장치에서 수행될 자바 클래스 파일(class file)들이 입력되면, 코드를 자동으로 생성하는데 필요한 정보를 수집하기 위해 바이트코드를 분석하는 바이트코드 분석기와; 객체 생성 및 접근 시, 상기 객체 관리자 모듈을 호출하도록 응용 프로그램의 자바 바이트코드를 수정하고, 함수 단위로 작업을 나누어 계산이 복잡한 함수가 서버 측에서 실행하도록 하며, 클라이언트/서버 응용 프로그램이 바이트코드 수준에서 동작하도록 자동으로 코드를 생성해 주는 코드 생성기; 를 포함하여 이루어짐에 기술적 특징이 있다.

Description

객체 관리 시스템 및 방법{System and Method for Managing Object}
도 1은 본 발명의 객체 관리 시스템을 설명하기 위한 개념도,
도 2는 본 발명의 일 실시예에 따른 객체 관리 시스템의 블록도,
도 3은 본 발명의 일 실시예에 따른 객체 관리자 모듈의 객체 관리 방법 및 객체 관리자 모듈의 호출 방법을 설명하기 위한 개념도,
도 4는 본 발명의 일 실시예에 따른 객체 관리자 모듈이 유지하는 객체 관리 테이블,
도 5와 도 6은 자바 응용 프로그램의 동작 방식을 설명하기 위한 일 실시예도,
도 7과 도 8은 자바 응용 프로그램 실행 과정에서 본 발명의 일 실시예에 따른 객체 관리자 모듈의 객체 생성 예제 및 코드 생성기에 의해 생성된 바이트코드 실행 과정을 설명하기 위한 개념도,
도 9 내지 도 11은 본 발명의 일 실시예에 따라 생성된 객체로의 접근 방법을 설명하기 위한 개념도,
도 12는 본 발명의 일 실시예에 따른 객체 관리 방법의 코드 변경 과정을 나타낸 흐름도,
도 13은 본 발명의 일 실시예에 따른 객체 관리 방법의 객체 생성 과정을 나 타낸 흐름도,
도 14는 본 발명의 일 실시예에 따른 객체 관리 방법의 객체 접근 과정을 나타낸 흐름도이다.
< 도면의 주요 부분에 대한 부호의 설명 >
10 : 주기억장치 20 : 보조기억장치
30 : 원격 서버 110 : 객체 관리자 모듈
120 : 바이트코드 분석기 130 : 코드 생성기
본 발명은 객체 관리 시스템 및 방법에 관한 것으로 보다 자세하게는, 휴대폰(cellular phone), PDA(Personal Digital Assistants) 등의 모바일(mobile) 장치 혹은 내장형(embedded) 시스템(system) 등의 장치에서 응용 프로그램을 수행함에 있어서, 시스템 가용 자원 상황에 따라 객체를 보조기억장치나 원격 서버로 언로딩하고, 언로딩된 객체의 사용시 다시 주기억장치로 로딩하여 응용 프로그램이 동작할 수 있도록 함으로써 시스템 자원의 한계를 극복할 수 있도록 하는 객체 관리 시스템 및 방법에 관한 것이다.
휴대폰(cellular phone), PDA(Personal Digital Assistants) 등의 모바일(mobile) 장치 혹은 내장형(embedded) 시스템(system) 등은 주기억장치나 중앙처리장치의 시스템 자원에 한계가 있으며, 가상 메모리가 지원되지 않기 때문에, 주기 억장치만으로는 많은 시스템 자원을 필요로 하는 응용 프로그램을 실행할 수 없다.
이에 따라, 제안된 자원 한계 극복 방법은 중앙처리장치의 한계를 극복하기 위해 상대적으로 자원이 풍부한 서버로 클라이언트의 작업을 분담시켜, 클라이언트가 서버의 도움을 받아 중앙처리장치의 자원 제약을 극복할 수 있도록 하는 방법이다.
그러나, 상기의 자원 제약 극복 방법은 응용 프로그램 개발자가 서버와 클라이언트를 염두에 두고, 각각의 응용 프로그램을 작성해야 한다. 따라서, 상기 방법은 분산 시스템 분야에서 많이 시도된 기술이나, 클라이언트와 서버 형태로 만들어지지 않은 기존의 응용 프로그램을 클라이언트와 서버 형태의 응용 프로그램으로 다시 개발해야 하는 부담 때문에, 많은 시간과 비용이 추가로 필요하다는 단점이 있다.
또한, 주기억장치의 자원이 부족하고, 가상 메모리 관리가 지원되지 않는 장치에서 주기억장치의 자원 제약을 극복하기 위한 기존의 방법은, 주로 주기억장치의 코드 영역을 효율적으로 사용하는데 집중되어 있다.
예를 들어, 컴파일러(compiler)를 이용해 원래의 코드에 별도의 코드를 삽입하여, 함수 단위로 코드를 주기억장치에 적재시킬 수 있는 형태로 만들고, 실행에 필요한 코드만 부분적으로 적재시켜 응용 프로그램을 수행하는 것이다. 즉, 실행 코드에서 필요한 코드의 일부를 주기억장치에 적재하여 수행하고, 필요하지 않은 나머지 코드 부분은 컴파일러가 삽입한 코드에 의해 나중에 필요할 때 주기억장치로 적재되어 응용 프로그램을 수행하게 하는 것이다.
그러나, 응용 프로그램을 실행하기 위해 필요한 코드의 크기는 전체 프로그램 수행에 필요한 주기억장치의 크기에 비하면 20%미만일 정도로 작아서, 데이터 영역으로 할당된 나머지 80% 이상의 주기억장치 영역에 대해서는 관리를 할 수 없다는 문제점이 있다.
따라서, 본 발명은 상기와 같은 종래 기술의 제반 단점과 문제점을 해결하기 위한 것으로, 자바 가상 머신을 수정할 필요 없이 이미 설치된 가상 머신을 그대로 이용할 수 있도록 자바 바이트코드 레벨에서 객체의 식별자와 레퍼런스의 상호 교환을 지원하도록 함으로써, 시스템 자원의 한계가 있는 장치에서 응용 프로그램 수행 시, 객체의 저장 위치를 보조기억장치나 자원이 풍부한 원격 서버 등으로 확장시키고, 응용 프로그램이 동적으로 객체를 생성하거나, 객체에 접근하는 동작을 제어하여 적은 용량의 주기억장치에서도 응용 프로그램이 원활하게 수행될 수 있도록 하는 분산 수행 환경을 구성하고, 주기억장치의 데이터 영역에 대한 메모리 관리가 효율적으로 이루어질 수 있도록 하는 객체 관리 시스템 및 방법을 제공함에 본 발명의 목적이 있다.
본 발명의 상기 목적은 자바 가상 머신을 수정할 필요 없이, 이미 설치된 가상 머신을 그대로 이용하기 위해 자바 어플리케이션 수준에서 구현되며, 자바 바이트코드 수준에서 객체의 식별자와 레퍼런스의 상호 교환을 지원하고, 시스템 가용 자원이 부족한 클라이언트 장치에서 객체를 보조기억장치나 원격 서버로 언로딩하 고, 언로딩된 객체의 사용시 다시 주기억장치로 로딩하여 응용 프로그램이 동작할 수 있도록 하기 위해 상기 클라이언트 장치에 구비되는 객체 관리 시스템으로서, 응용 프로그램 수행 중 객체의 생성 및 객체에 대한 접근에 관여하고, 주기억장치의 공간이 부족한 경우 객체를 보조기억장치와 원격 서버 중 어느 하나에 언로딩하며, 객체의 언로딩 위치 정보를 객체 관리 테이블로 유지하여 응용 프로그램에서 요구하는 객체를 다시 주기억장치로 로딩하여 복원하는 객체 관리 역할을 담당하는 객체 관리자 모듈과; 클라이언트 장치에서 수행될 자바 클래스 파일(class file)들이 입력되면, 코드를 자동으로 생성하는데 필요한 정보를 수집하기 위해 바이트코드를 분석하는 바이트코드 분석기와; 객체를 생성하거나 생성된 객체에 접근하고자 할 때, 상기 객체 관리자 모듈을 호출하도록 자바 바이트코드를 수정하고, 함수 단위로 작업을 나누어 계산이 복잡한 함수가 서버 측에서 실행하도록 하며, 클라이언트/서버 응용 프로그램이 바이트코드 수준에서 동작하도록 자동으로 코드를 생성해 주는 코드 생성기; 를 포함하여 이루어지는 객체 관리 시스템에 의해 달성된다.
또한, 본 발명의 상기 목적은 기 설치된 가상 머신을 그대로 이용하기 위해 자바 어플리케이션 수준에서 구현되며, 응용 프로그램 수행 중 객체 생성 및 접근에 관여하는 객체 관리자 모듈과, 바이트코드를 분석하는 바이트코드 분석기 및 응용 프로그램이 상기 객체 관리자 모듈을 호출하여 바이트코드 수준에서 동작하도록 바이트코드를 수정하는 코드 생성기를 포함하여 이루어져, 시스템 가용 자원이 부족한 클라이언트 장치에서 보조기억장치나 원격 서버를 이용하여 객체를 언로딩/로 딩할 수 있도록 하는 객체 관리 시스템에서의 객체 관리 방법으로서, 응용 프로그램으로부터 바이트코드가 입력되면, 바이트코드를 분석하여 코드를 자동으로 생성하는데 필요한 정보를 수집하고, 그 분석 정보를 상기 코드 생성기로 입력하는 제1단계와; 상기 코드 생성기가 상기 바이트코드 분석기로부터의 분석 정보를 이용하여 응용 프로그램이 객체를 생성하거나 생성된 객체에 접근하고자 할 때, 상기 객체 관리자 모듈을 호출하도록 바이트코드를 수정하고, 바이트코드 수준에서 동작하도록 변경된 응용 프로그램을 자동 생성하는 제2단계와; 상기 변경된 응용 프로그램으로부터 객체 관리자 모듈로 객체의 생성을 위한 주기억장치 상의 객체 위치를 나타내는 객체 레퍼런스가 전달되면, 해당 객체를 주기억장치에 할당한 후 고유 식별자를 부여하여 상기 응용 프로그램으로 객체 식별자를 반환하는 객체 생성 과정을 수행하고, 상기 변경된 응용 프로그램으로부터 객체 관리자 모듈로 객체로의 접근을 위한 객체 식별자가 전달되면, 해당 객체의 레퍼런스를 반환하는 객체 접근 과정을 수행하는 제3단계; 를 포함하여 이루어지는 객체 관리 방법에 의해 달성된다.
본 발명의 상기 목적과 기술적 구성 및 그에 따른 작용 효과에 관한 자세한 사항은 본 발명의 명세서에 첨부된 도면에 의거한 이하 상세한 설명에 의해 보다 명확하게 이해될 것이다.
먼저, 도 1은 본 발명의 객체 관리 시스템을 설명하기 위한 개념도이고, 도 2는 본 발명의 일 실시예에 따른 객체 관리 시스템의 블록도, 도 3은 본 발명의 일 실시예에 따른 객체 관리자 모듈의 객체 관리 방법 및 객체 관리자 모듈의 호출 방법을 설명하기 위한 개념도, 도 4는 본 발명의 일 실시예에 따른 객체 관리자 모듈이 유지하는 객체 관리 테이블을 나타낸 것이다.
도 1에 도시된 바와 같이, 본 발명의 객체 관리 시스템은 자원 제약이 있는 클라이언트 장치에 적용하기 위한 것으로, 클라이언트 장치에는 객체의 저장 위치를 주기억장치(10)뿐만 아니라 보조기억장치(20)와 원격 서버(30)로 확장할 수 있도록 하는 객체 관리자 모듈(110)이 구비된다.
본 발명에서 상기 객체 관리자 모듈(110)은 주기억장치(10)의 힙 메모리 영역에 객체 단위로 로딩하고, 공간이 부족하면 보조기억장치(20)나 원격 서버(30)로 언로딩한다.
또한, 본 발명은 객체지향 언어 중 자바 언어로 개발된 자바 응용 프로그램에서 데이터의 집합으로 볼 수 있는 객체를 대상으로 하며, 주기억장치의 힙 영역에 해당하는 데이터 영역을 대상으로 한다.
상기와 같이 객체의 저장 위치를 확장하기 위하여 본 발명의 객체 관리 시스템은 도 2에 도시된 바와 같이 객체 관리자 모듈(110) 및 바이트코드 분석기(120), 코드 생성기(130)를 포함하여 구성된다.
상기 바이트코드 분석기(120)는 클라이언트 장치에서 수행될 자바 클래스 파일(class file)들을 입력으로 읽어들여 코드를 자동으로 생성하는데 필요한 정보를 수집하기 위해 바이트코드를 분석하는 구성요소이다.
객체 관리자 모듈(110)은 응용프로그램 수행 중 객체의 생성과 객체에 대한 접근에 관여하며, 주기억장치의 공간 확보, 객체를 저장 및 복원하는 등의 객체 관리 역할을 담당하며, 객체를 보조기억장치(20), 원격 서버(30)로 언로딩한 후 다시 로딩하기 위해 객체의 저장 위치 정보를 객체 관리 테이블로 유지하여, 응용 프로그램에서 요구하는 객체를 주기억장치(10)로 복원한다.
또한, 상기 객체 관리자 모듈(110)은 객체에 고유 식별자를 부여하고, 식별자와 저장 위치 정보를 상기 객체 관리 테이블로 관리하며, 응용 프로그램에서 고유 식별자를 이용하여 객체에 접근하고자 하면 해당 객체를 복원하여 레퍼런스를 반환해 자바 응용 프로그램이 원활히 수행되도록 한다.
코드 생성기(130)는 객체를 생성하거나 생성된 객체에 접근하고자 할 때, 객체 관리자를 호출하도록 자바 바이트코드를 수정하는 역할 및 함수단위로 작업을 나누어 계산이 복잡한 함수를 서버 측에서 실행하도록 하는 형태의 클라이언트/서버 응용 프로그램을 자동으로 생성하는 역할을 담당한다.
즉, 상기 코드 생성기(130)는 중앙처리장치의 자원을 많이 사용하는 함수를 서버 측에서 수행하게 하고, 나머지 코드들은 클라이언트 측에서 수행하는 형태로 코드를 자동으로 생성하며, 주기억장치 상의 객체 위치를 나타내는 레퍼런스 대신 정수형의 고유 식별자를 사용하도록 응용 프로그램을 변경한다.
본 발명에 의해 상기와 같이 자동으로 변경된 자바 응용 프로그램은 시스템 가용 자원이 풍부한 원격 서버(30)와 시스템 자원이 부족한 클라이언트 장치의 연동으로 수행되게 된다.
도 3 및 도 4를 참조하여 각 구성 요소에 대한 구체적인 동작 방식을 설명하면 다음과 같다.
우선, 코드 생성기(130)는 객체 생성 시 객체에 대한 레퍼런스를 반환하도록 동작하는 기존의 자바 바이트코드가 고유의 식별자를 반환하도록 수정하여, 생성된 객체에 접근하고자 할 때, 객체 레퍼런스를 직접 사용하는 대신 객체 식별자를 객체 관리자 모듈(110)로 넘겨 레퍼런스를 요구하는 방식으로 응용 프로그램을 수정한다.
그리고, 상기 코드 생성기(130)는 바이트코드 분석기(120)의 정보를 이용하여 서버 측 수행 함수가 결정되면, 소켓 관련 함수들을 이용하여 데이터 통신을 하면서, 본래 함수를 서버 측에서 실행하도록 원격으로 요청하는 형태의 프록시 함수를 각각의 응용 프로그램 코드에 포함하도록 하여, 변경된 응용 프로그램을 자동으로 생성한다.
상기 코드 생성기(130)에 의해, 객체의 저장의 위치에 관계없이 객체 식별자로 일관되게 객체에 접근하는 동시에 각 장치에 해당하는 응용 프로그램 코드가 자동으로 생성되어, 모바일 혹은 내장형 시스템의 주기억장치(10)와 보조기억장치(20) 및 원격 서버(30) 등을 이용해 쉽고 다양하게 분산 수행 환경을 구축할 수 있게 된다.
다음, 객체 관리자 모듈(110)은 관리 대상인 객체가 클라이언트의 주기억장치(10)에 있는지 아니면 클라이언트의 보조기억장치(20) 또는 원격의 서버(30)에 있는지를 빠르게 알 수 있어야 한다. 이를 위해서 객체 관리자 모듈(110)은 객체를 고유의 식별자와 주기억장치의 힙 영역에 할당된 객체를 가리키는 레퍼런스 그리고 객체가 어느 위치에 저장되어 있는지를 표시하는 플래그(flag)를 두어, 이것들을 하나의 항목(entry)으로 갖는 테이블 형태의 자료구조를 유지하며, 이 객체 관리 테이블의 일 실시예를 도 4에 나타내었다.
도 4에 도시된 바와 같이, 객체 관리 테이블은 각 객체에 대한 고유 식별자, 저장 위치를 나타내는 플래그, 객체 레퍼런스 정보를 포함한다.
객체의 고유 식별자는 정수형의 숫자이고, 주기억장치 열은 해당하는 객체가 주기억장치(10)에 적재되어 있는지의 여부를 0과 1로 표시한다. 1이면 주기억장치에 적재되어 있음을 의미하고 0이면 적재되어 있지 않다는 것을 의미한다. 마찬가지로, 보조기억장치와 원격 서버의 열도 동일한 의미를 갖는다. 마지막 열인 객체레퍼런스 열에는 주기억장치(10)에 객체가 적재되어 있을 경우, 객체가 적재되어 있는 레퍼런스가 기록되며, 보조기억장치(20)에 저장되어 있을 경우 파일 이름과 그 파일에서 객체가 위치한 오프셋(offset)이 기록된다. 원격 서버(30)에 객체가 위치한 경우 서버(30)의 인터넷 주소와 포트(port)가 기록된다.
상기의 객체 관리 테이블 정보를 바탕으로 객체 관리자 모듈(110)은 응용 프로그램 수행 도중에, 객체에 접근하려는 요청에 대해 객체가 실제 위치한 곳을 알아내어 객체를 복원한 후, 해당하는 객체의 레퍼런스를 반환해준다.
다음, 도 5와 도 6은 자바 응용 프로그램의 동작 방식을 설명하기 위한 일 실시예도로서, 자바 응용 프로그램을 수행하는데 있어서, 객체 생성을 위한 자바 소스 코드와 자바 바이트코드의 실행 과정 및 주기억장치에서의 동작을 보여주는 개념도이며, 이를 통해 일반적인 자바 응용 프로그램의 동작 방식에 대해 알아보면 다음과 같다.
도 5에 도시된 바와 같이, 객체를 생성하는 자바 소스 코드를 컴파일하면, 아래쪽과 같은 자바 바이트코드가 생성된다. 자바 클래스 파일에는 클래스에서 사용하는 상수(constant)들이 저장되어 있는 공간이 존재하는데, 이것을 컨스턴트 풀(constant pool)이라고 하며, 컨스턴트 풀은 응용 프로그램에서 사용하는 상수들이 저장되어 있는 배열이다.
생성된 자바 바이트코드 가운데 #10, #11 과 같은 표시는 상수들이 저장되어 있는 컨스턴트 풀에서의 인덱스(index)를 의미한다.
도 6a는 상기 생성된 자바 바이트코드의 각 명령어를 표시한 것이고, 도 6b 내지 도 6d는 도 6a의 명령어에 따르는 동작에 의한 주기억장치에서의 구조를 나타낸 것이다.
도 6a에서 (1)항의 new 명령어에 따르는 동작은 컨스턴트 풀의 10번째에 해당하는 인덱스(index) 값인 "ClassA" 타입으로 데이터 값이 초기화되지 않은 상태의 객체를 생성하고, 그 객체를 가리키는 레퍼런스를 피연산자 스택(operand stack)의 톱(top)에 저장하는 것이다. 이 명령어가 수행되면 주기억장치에서의 구조는 도 6b와 같아진다.
다음, 도 6a에서 (2)항목에 해당하는 dup는 (1)항목에 의해 생성된 레퍼런스를 복사하여 피연산자 스택의 톱에 저장하라는 명령어이며, 이를 수행하면 주기억 장치의 구조는 도 6c와 같은 구조가 된다.
도 6a에서 (3)항목은 컨스턴트 풀의 11번째에 해당하는 값인 ClassA."<init>"를 읽어와 init 메서드(method) 즉, 컨스트럭터(constructor)를 실행시켜 (1)항목에서 생성한 객체의 데이터 값을 초기화하라는 명령어이다.
이때, (2)항목에 따라 복사된 레퍼런스는 피연산자 스택의 톱에서 팝(pop)되어 init 메서드 실행에 사용되며, 이러한 동작으로 주기억장치는 도 6d와 같은 메모리 구조를 갖게 된다.
한편, 도 6a에서 (4)항목은 지역변수들을 저장하고 있는 공간 중 인덱스 1에 해당하는 곳 즉, a에 해당하는 곳에 초기화된 객체를 가리키는 레퍼런스를 저장하는 역할을 한다.
위와 같은 과정을 통해 ClassA 타입의 객체가 생성되고, 객체에 접근하려고 할 때는 레퍼런스가 저장되어 있는 지역변수 a의 값을 피연산자의 스택의 톱에 푸시(push)한 후, 스택에 있는 레퍼런스를 사용하는 것이 일반적인 자바 프로그램의 동작방식이다.
다음, 도 7과 도 8은 자바 응용 프로그램 실행 과정에서 본 발명의 일 실시예에 따른 객체 관리자 모듈의 객체 생성 예제 및 코드 생성기에 의해 생성된 바이트코드 실행 과정을 설명하기 위한 개념도로서, 응용 프로그램 실행 과정에서 객체 생성 요청이 발생했을 경우, 객체 관리자 모듈(110)의 호출 방법과 동작 방법을 나타낸다.
도 7은 본 발명의 구성요소인 바이트코드 분석기(120)와 코드 생성기(130)가 도 5의 자바 바이트코드를 어떤 방식으로 변경하여, 도 7처럼 수정되는지를 나타내고 있다.
바이트코드 분석기(120)는 바이트코드 명령어를 분석하다가 new 명령어를 찾으면, 객체를 생성하기 위한 명령어 패턴을 분석하고, 객체를 초기화하는 명령어인 invokespecial #11 다음에 객체 관리자 모듈(110)을 호출하기 위한 invokestatic ObjManager.create 명령어를 삽입한다.
객체 관리자 모듈(110)의 함수인 create는 생성된 객체를 인자로 받아, 객체를 생성할 공간이 있는지 판단을 하고, 객체를 생성할 공간이 있으면 객체를 할당하여, 객체 관리 테이블에 위치 정보와 레퍼런스를 기록하고, 현재 생성한 객체에 객체 고유 식별자를 부여하여 이를 반환한다.
만약, 객체를 생성하기 위한 주기억장치(10)의 용량이 부족하다면, 미래에 자주 사용되지 않을 객체를 선택해서, 보조기억장치(20)나 원격의 서버(30)에 객체를 저장하고, 저장된 객체의 정보를 객체 관리 테이블에 기록한다.
이와 같은 방식으로 객체 관리자 모듈(110)은 객체의 할당 공간을 확보하고 이 공간에 객체를 생성한 후, 객체의 식별자를 응응 프로그램으로 반환한다. 객체의 식별자를 반환하기 위해서, 바이트코드 분석기(120)는 객체의 레퍼런스를 저장하기 위한 astore 명령어를 객체의 식별자를 저장하기 위한 istore로 변경한다.
변경된 바이트코드를 자바 소스 코드 레벨로 역컴파일 해보면, 도 7에서 가장 아래 항목인 "변경된 자바 소스 코드" 항목과 같아진다. 즉, ClassA a는 객체의 고유 식별자를 저장하는 타입인 int a로 바뀌고, new ClassA()는 객체 관리자 모듈의 메서드인 create의 인자로 전달된다.
이를 통해 객체 관리자 모듈(110)이 객체를 생성하여 객체의 레퍼런스를 객체 관리 테이블에 기록하고 고유의 식별자를 생성해 int a에 반환해 주는 코드가 된다.
도 8a는 본 발명의 구성 요소들에 의해 변경된 자바 바이트코드이고, 각 명령어를 수행한 후 주기억장치(10)의 메모리 구조는 도 8b, 도 8c와 같다.
도 8a에서 (1), (2), (3) 항목은 도 6b, 도 6c, 도 6d와 같으므로, 동작 후, 주기억장치(10)는 도 8b와 같은 구조가 된다. 차이점은 객체 관리자 모듈(110)이 있고, 객체 관리 테이블이 일정 공간의 힙 영역에 할당되어 있다는 것이다.
도 8a에서 (4) 항목은 위에서 설명한 create 함수를 수행하는 과정으로써, (1), (2), (3) 과정을 통해 생성된 객체를 객체 관리자 모듈(110)에게 전달해 객체 관리 테이블에 객체에 대한 정보를 저장하고, 객체의 식별자를 얻어오는 동작을 하는 명령어이다.
이 함수는 도 8c처럼 피연산자 스택의 톱에 저장되어 있는 객체의 레 퍼런스를 팝하고 객체 관리 테이블에 기록한 후, 고유의 식별자를 생성해 피연산자 스택에 저장한다.
위의 과정에서 저장된 객체의 식별자는 도 8a에서 (6)항목의 명령어인 istore를 통해 식별자 값을 지역변수로 저장하게 된다.
도 9 내지 도 11은 본 발명의 일 실시예에 따라 생성된 객체로의 접근 방법을 설명하기 위한 개념도로서, 객체 관리자 모듈(110)로부터 어떻게 객체의 레퍼런스를 얻어오는지에 대한 동작을 설명하고 있다.
ClassA 타입의 객체인 a에서 필드 x를 읽어오려고 할 때, 변경하기 전의 객체 접근 방법은 aload_1, getfield 명령어를 수행하면 되었다. 즉, a가 저장되어 있는 지역변수 공간에서 인덱스 1에 해당하는 값을 피연산자 스택의 톱에 저장하여 객체의 레퍼런스를 얻고, 피연산자 스택의 톱에 저장된 객체의 레퍼런스에 대해 컨스턴트 풀의 인덱스 26번에 저장되어 있는 ClassA.x:I를 읽어서 a.x의 값을 얻는 것이다.
자세한 동작 방식은 도 10b, 도 10c의 구조를 갖는 것으로 설명된다.
도 10a에서 (1)항목 aload_1은 지역변수가 저장되어 있는 공간에서 인덱스 1에 해당하는 곳의 값인 객체 레퍼런스를 피연산자 스택의 톱에 저장하며, 이는 도 10b에 해당한다.
도 10a에서 (2)항목 getfield #26은 피연산자 스택의 톱에 있는 레퍼런스를 사용해, 그 레퍼런스에 해당하는 객체에 접근하여 필드 x의 값을 읽는 것이다. 객체의 접근을 통해 얻은 x값은 스택의 톱에 저장되며, 이는 도 10c에 나타나 있다.
주기억장치(10)의 공간 제약을 극복하기 위해 객체 관리자 모듈(110)은 객체를 주기억장치(10)뿐만 아니라 보조기억장치(20), 원격서버(30) 등에 위치시키므로 기존의 객체 접근 방식을 그대로 적용하기는 어렵다.
따라서, 응용 프로그램에서 객체 관리자 모듈(110)을 통해 객체에 접근하도 록 변경하여, 객체 식별자를 객체 관리자 모듈(110)에게 인자로 주고, 객체 관리 테이블에서 식별자에 해당하는 항목의 정보를 이용해 객체의 레퍼런스를 반환해준다.
본 발명에 의해 변경된 자바 응용 프로그램은 이러한 방식으로 객체에 접근하며, 이는 위치 독립적으로 객체를 사용할 수 있게 한다. 자세한 설명은 다음과 같다.
본 발명에 의해서 a.x에 해당하는 기존의 자바 소스 코드는 도 9에서 보는 바와 같이 ObjManager.getRef(a).x로 변경되며, 변경된 코드에 의한 동작을 도 11a 내지 도 11d를 통해 설명하면 다음과 같다.
코드 생성기(130)에 의해서 응용 프로그램은 객체의 레퍼런스 대신 객체의 고유 식별자를 사용토록 수정되었으므로, 객체 식별자는 지역 변수인 a에 저장되어 있다. 따라서 객체 식별자를 얻기 위해, 지역변수들을 위한 공간에서의 인덱스 1에 해당하는 값을 피연산자 스택의 톱에 저장하며, 이러한 동작은 도 11a에서 (1)항목인 iload_1을 수행한 것으로, iload_1 수행 후의 메모리 구조는 도 11b와 같다.
도 11a 에서 (2)항목은 객체 관리자 모듈(110)의 함수인 getRef를 호출하기 위한 명령어이다. (1)항목에서 피연산자 스택에 저장된 값은 getRef의 인자로 사용되기 위해 팝 되며, 소스 코드 수준에서 보면 ObjManager.getRef(a)에 해당한다.
getRef 함수는 정수형의 객체 식별자를 인자로 받아 객체 관리 테이블의 정보를 이용해 식별자에 해당하는 객체의 레퍼런스를 피연산자 스택에 저장해주며, 이에 해당하는 메모리 구조는 도 11c와 같다.
도 11a 에서 (3)항목은 (2)항목 수행 과정을 통해 얻은 객체의 레퍼런스를 이용해 객체에 접근하여, 필드 x의 값을 읽어 스택에 저장하는 동작을 하며, 이러한 동작의 결과를 반영한 메모리 구조는 도 11d와 같다.
변경된 자바 바이트코드와 객체 관리자 모듈(110)의 동작을 요약하면 다음과 같다. 변경된 자바 바이트코드는 객체를 생성하거나 객체에 접근을 하는 명령어가 실행될 때, 객체 관리자 모듈(110)을 호출하도록 수정되었다. 따라서, 객체 생성에 대해 객체 관리자 모듈(110)을 호출할 때에는, 객체의 레퍼런스를 객체 관리자 모듈(110)에게 인자로 넘겨주고 객체에 대한 식별자를 반환받고, 객체 접근 시 객체 관리자 모듈(110)을 호출할 경우에는 부여받은 식별자를 객체 관리자 모듈(110)에게 인자로 주어 객체에 대한 레퍼런스를 반환받아 프로그램을 수행한다.
다음, 도 12는 본 발명의 일 실시예에 따른 객체 관리 방법의 코드 변경 과정을 나타낸 흐름도이고, 도 13은 본 발명의 일 실시예에 따른 객체 관리 방법의 객체 생성 과정을 나타낸 흐름도이며, 도 14는 본 발명의 일 실시예에 따른 객체 관리 방법의 객체 접근 과정을 나타낸 흐름도이다.
도 12는 본 발명의 객체 관리 시스템의 구성 중 바이트코드 분석기(120) 및 코드 생성기(130)에 의해 응용 프로그램이 상기 객체 관리자 모듈(110)을 호출하여 바이트코드 수준에서 동작하도록 바이트코드를 수정하는 과정을 나타낸 것이다.
도시된 바와 같이, 먼저 응용 프로그램으로부터 바이트코드 분석기(120)로 바이트코드가 전달되면(S101), 바이트코드 분석기(120)는 바이트코드를 분석하여 코드를 자동으로 생성하는데 필요한 정보를 수집하고(S102), 그 분석 정보를 상기 코드 생성기(130)로 입력한다(S103).
다음, 코드 생성기(130)는 상기 바이트코드 분석기(120)로부터의 분석 정보를 이용하여 응용 프로그램이 객체를 생성하거나 생성된 객체에 접근하고자 할 때, 상기 객체 관리자 모듈(110)을 호출하도록 바이트코드를 수정하고(S104), 바이트코드 수준에서 동작하도록 변경된 응용 프로그램을 자동 생성한다(S105).
이때, 상기 코드 생성기(130)는 주기억장치(10) 상의 객체 위치를 나타내는 레퍼런스 대신 고유 식별자를 사용하도록 하여, 응용 프로그램이 생성된 객체에 접근하고자 할 때 객체 레퍼런스를 직접 사용하는 대신 객체 식별자를 객체 관리자 모듈(110)로 넘겨 해당 객체의 레퍼런스를 요구하도록 바이트코드 수준에서 응용 프로그램을 수정하며, 객체 관리자 모듈(110)이 객체의 레퍼런스 대신 객체의 식별자를 반환하도록 하기 위하여, 상기 바이트코드 분석기(120)에 의한 바이트코드 명령어 분석 중 객체의 레퍼런스를 저장하기 위한 명령어가 발견되면, 상기 객체 레퍼런스 저장 명령어를 객체의 식별자를 저장하기 위한 명령어로 변경하여, 응용 프로그램이 객체의 레퍼런스 대신 객체의 식별자를 사용하도록 한다.
또한, 상기 코드 생성기(130)는 상기 바이트코드 분석기(120)에 의한 바이트코드 명령어 분석 중 데이터 값이 초기화되지 않은 상태의 객체를 생성하고, 그 객체를 가리키는 레퍼런스를 피연산자 스택(operand stack)의 톱(top)에 저장하는 명령어가 발견되면, 객체를 생성하기 위한 명령어 패턴을 분석하고, 객체를 초기화하는 명령어 다음에 객체 관리자 모듈(110)을 호출하기 위한 명령어를 삽입한다.
상기와 같이 변경된 응용 프로그램에 의해 객체가 생성되고, 객체로 접근하는 과정은 도 13 및 도 14에 도시하였다.
먼저, 도 13에 도시된 바와 같이, 변경된 응용 프로그램은 수정된 바이트코드에 의해 객체 관리자 모듈(110)을 호출하여 객체 관리자 모듈(110)로 객체의 생성을 위한 객체 레퍼런스를 전달한다(S201).
객체 관리자 모듈(110)은 상기 변경된 응용 프로그램으로부터 객체의 생성을 위한 주기억장치(10) 상의 객체 위치를 나타내는 객체 레퍼런스가 전달되면(S201), 주기억장치(10)에 객체를 생성할 공간이 있는지의 여부를 판단하며(S202), 판단 결과 공간이 부족한 경우 보조기억장치(20)나 원격 서버(30)로 언로딩할 객체를 선택한다(S203).
상기 객체 관리자 모듈(110)은 상기 선택된 객체를 보조기억장치(20)나 원격 서버(30)로 언로딩한 후(S204), 언로딩된 객체의 정보를 객체 관리 테이블에 기록하여, 객체 관리 테이블을 갱신하며(S205), 상기 응용 프로그램에서 생성하고자 하는 객체를 주기억장치(10)의 객체 생성 공간에 할당하고(S206), 해당 객체에 고유 식별자를 부여하여(S207) 고유 식별자를 상기 응용 프로그램으로 반환한다(S208).
만약, 주기억장치(10)에 객체 할당 공간이 있는 경우, 상기 S203 단계 내지 S205 단계는 생략된다.
한편, 객체로의 접근 시에는, 도 14에 도시된 바와 같이, 변경된 응용 프로 그램은 수정된 바이트코드에 의해 객체 관리자 모듈(110)을 호출하여 객체 관리자 모듈(110)로 객체의 접근을 위하여 객체 식별자를 전달한다(S301).
상기 객체 관리자 모듈(110)은 객체 관리 테이블을 이용하여 해당 객체가 주기억장치(10)에 위치되어 있는지의 여부를 판단하고(S302), 판단 결과, 해당 객체가 주기억장치(10)가 아닌 보조기억장치(20)나 원격 서버(30)에 있는 경우, 해당 보조기억장치(20) 또는 원격 서버(30)로부터 주기억장치(10)로 해당 객체를 다시 로딩한다(S303).
객체 관리자 모듈(110)은 객체가 다시 주기억장치(10)로 로딩됨에 따라, 객체의 레퍼런스를 복원하고(S304), 해당 레퍼런스를 상기 응용 프로그램으로 전달한다(S305).
만약, 접근하고자 하는 객체가 주기억장치(10)에 있는 경우, 상기 S303 단계 내지 S304 단계는 생략된다.
본 발명이 속하는 기술분야의 당업자는 본 발명이 그 기술적 사상이나 필수적 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있으므로, 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로서 이해해야만 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 등가개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
따라서, 본 발명의 객체 관리 시스템 및 방법에 의하면, 자바 바이트코드의 구조적 변경으로 인해 가상 메모리 관리가 지원되지 않는 시스템에서도 응용 프로그램에게 실제 메모리 용량보다 큰 수행 공간을 제공하도록 소프트웨어적으로 지원해주어, 가용 메모리 용량을 확장하고 이를 효율적으로 관리하여 메모리 자원 제약 및 중앙처리장치의 자원 제약이 극복될 수 있다는 효과가 있고, 이미 개발된 많은 자바 응용 프로그램을 그대로 이용하여 호환성을 유지하는 동시에, 새로운 분산 수행 환경에 적용할 수 있는 응용 프로그램 개발을 가능하게 하고, 시스템 자원이 부족한 장치에서, 복잡한 계산을 필요로 하거나 많은 시스템 자원을 필요로 하는 응용 프로그램을 원활하게 실행할 수 있도록 시스템 자원을 확장 시키는데 쉽게 적용할 수 있다는 장점이 있다.
또한, 본 발명은 객체가 주기억장치, 보조기억장치, 원격서버 등 어느 위치에 저장되어 있어도, 객체 관리자 모듈을 통해 일관성 있게 접속할 수 있게 되어 효율적으로 객체를 관리할 수 있으며, 바이트코드 수준에서 객체의 식별자와 레퍼런스의 상호 교환을 지원하도록 함으로써 기존의 방법과 달리 자바 가상 머신을 수정할 필요 없이 이미 설치되어 있는 가상 머신을 그대로 이용할 수 있다는 효과가 있다.

Claims (13)

  1. 자바 가상 머신을 수정할 필요 없이, 이미 설치된 가상 머신을 그대로 이용하기 위해 자바 어플리케이션 수준에서 구현되며, 자바 바이트코드 수준에서 객체의 식별자와 레퍼런스의 상호 교환을 지원하고, 시스템 가용 자원이 부족한 클라이언트 장치에서 객체를 보조기억장치나 원격 서버로 언로딩하고, 언로딩된 객체의 사용시 다시 주기억장치로 로딩하여 응용 프로그램이 동작할 수 있도록 하기 위해 상기 클라이언트 장치에 구비되는 객체 관리 시스템으로서,
    응용 프로그램 수행 중 객체의 생성 및 객체에 대한 접근에 관여하고, 주기억장치의 공간이 부족한 경우 객체를 보조기억장치와 원격 서버 중 어느 하나에 언로딩하며, 객체의 언로딩 위치 정보를 객체 관리 테이블로 유지하여 응용 프로그램에서 요구하는 객체를 다시 주기억장치로 로딩하여 복원하는 객체 관리 역할을 담당하는 객체 관리자 모듈과;
    클라이언트 장치에서 수행될 자바 클래스 파일(class file)들이 입력되면, 코드를 자동으로 생성하는데 필요한 정보를 수집하기 위해 바이트코드를 분석하는 바이트코드 분석기와;
    객체를 생성하거나 생성된 객체에 접근하고자 할 때, 상기 객체 관리자 모듈을 호출하도록 자바 바이트코드를 수정하고, 함수 단위로 작업을 나누어 계산이 복잡한 함수가 서버 측에서 실행하도록 하며, 클라이언트/서버 응용 프로그램이 바이트코드 수준에서 동작하도록 자동으로 코드를 생성해 주는 코드 생성기;
    를 포함하며,
    상기 객체 관리자 모듈은,
    객체 생성 시 객체에 고유 식별자를 부여하고, 고유 식별자 및 저장 위치 관리를 위해 객체 고유의 식별자와 주기억장치의 힙 영역에 할당된 객체를 가리키는 레퍼런스 및 객체가 주기억장치, 보조기억장치, 원격 서버 중 어느 위치에 저장되어 있는지를 표시하는 플래그(flag)를 항목으로 하는 자료 구조를 갖는 객체 관리 테이블을 유지하며,
    응용 프로그램에서 고유 식별자를 이용하여 객체에 접근하고자 하면 상기 객체 관리 테이블을 통해 해당 객체의 실제 위치를 알아내어 객체를 복원한 후 레퍼런스를 반환하는 것을 특징으로 하는 객체 관리 시스템.
  2. 삭제
  3. 제1항에 있어서,
    상기 코드 생성기는,
    주기억장치 상의 객체 위치를 나타내는 레퍼런스 대신 고유 식별자를 사용하도록 하여 응용 프로그램이 생성된 객체에 접근하고자 할 때 객체 레퍼런스를 직접 사용하는 대신 객체 식별자를 객체 관리자 모듈로 넘겨 해당 객체의 레퍼런스를 요구하도록 바이트코드 수준에서 응용 프로그램을 수정하며, 변경된 응용 프로그램을 자동으로 생성하는 것을 특징으로 하는 객체 관리 시스템.
  4. 제1항에 있어서,
    상기 코드 생성기는,
    상기 바이트코드 분석기의 정보를 이용하여 서버 측 수행 함수가 결정되면, 소켓 관련 함수들을 이용하여 데이터 통신을 하면서, 본래 함수를 서버 측에서 실행하도록 원격으로 요청하는 형태의 프록시 함수를 각각의 응용 프로그램 코드에 포함하도록 하여, 변경된 응용 프로그램을 자동으로 생성하는 것을 특징으로 하는 객체 관리 시스템.
  5. 제1항에 있어서,
    상기 코드 생성기는,
    응용 프로그램 수행 시 상기 객체 관리자 모듈이 호출되도록 바이트코드 수준에서 응용 프로그램의 명령어를 변형하는 것을 특징으로 하는 객체 관리 시스템.
  6. 제5항에 있어서,
    상기 코드 생성기는,
    상기 바이트코드 분석기에 의한 바이트코드 명령어 분석 중 데이터 값이 초기화되지 않은 상태의 객체를 생성하고, 그 객체를 가리키는 레퍼런스를 피연산자 스택(operand stack)의 톱(top)에 저장하는 명령어가 발견되면, 객체를 생성하기 위한 명령어 패턴을 분석하고, 객체를 초기화하는 명령어 다음에 객체 관리자 모듈 을 호출하기 위한 명령어를 삽입하며,
    상기 객체 관리자 모듈은,
    상기 객체 관리자 모듈을 호출하기 위한 명령어를 통해 생성된 객체를 인자로 받으면, 주기억장치에 객체를 생성할 공간이 있는지 판단하고, 객체를 생성할 공간이 있으면 객체를 할당하여, 객체 관리 테이블에 위치 정보와 레퍼런스를 기록하고, 현재 생성한 객체에 객체 고유 식별자를 부여하여 이를 반환하며, 객체를 생성하기 위한 주기억장치의 용량이 부족한 경우, 자주 사용되지 않을 객체를 선택하여 보조기억장치와 원격 서버 중 어느 하나로 객체를 언로딩하고, 언로딩된 객체의 정보를 상기 객체 관리 테이블에 기록한 후, 주기억장치의 객체 생성 공간에 객체를 할당하는 것을 특징으로 하는 객체 관리 시스템.
  7. 제1항에 있어서,
    상기 객체 관리자 모듈은 객체에 고유 식별자를 할당하며,
    상기 코드 생성기는,
    객체 관리자 모듈이 객체의 레퍼런스 대신 객체의 식별자를 반환하도록 하기 위하여, 상기 바이트코드 분석기에 의한 바이트코드 명령어 분석 중 객체의 레퍼런스를 저장하기 위한 명령어가 발견되면, 상기 객체 레퍼런스 저장 명령어를 객체의 식별자를 저장하기 위한 명령어로 변경하여, 응용 프로그램이 객체의 레퍼런스 대신 객체의 식별자를 사용하도록 하는 것을 특징으로 하는 객체 관리 시스템.
  8. 기 설치된 가상 머신을 그대로 이용하기 위해 자바 어플리케이션 수준에서 구현되며, 응용 프로그램 수행 중 객체 생성 및 접근에 관여하는 객체 관리자 모듈과, 바이트코드를 분석하는 바이트코드 분석기 및 응용 프로그램이 상기 객체 관리자 모듈을 호출하여 바이트코드 수준에서 동작하도록 바이트코드를 수정하는 코드 생성기를 포함하여 이루어져, 시스템 가용 자원이 부족한 클라이언트 장치에서 보조기억장치나 원격 서버를 이용하여 객체를 언로딩/로딩할 수 있도록 하는 객체 관리 시스템에서의 객체 관리 방법으로서,
    응용 프로그램으로부터 바이트코드가 입력되면, 바이트코드를 분석하여 코드를 자동으로 생성하는데 필요한 정보를 수집하고, 그 분석 정보를 상기 코드 생성기로 입력하는 제1단계와;
    상기 코드 생성기가 상기 바이트코드 분석기로부터의 분석 정보를 이용하여 응용 프로그램이 객체를 생성하거나 생성된 객체에 접근하고자 할 때, 상기 객체 관리자 모듈을 호출하도록 바이트코드를 수정하고, 바이트코드 수준에서 동작하도록 변경된 응용 프로그램을 자동 생성하는 제2단계와;
    상기 변경된 응용 프로그램으로부터 객체 관리자 모듈로 객체의 생성을 위한 주기억장치 상의 객체 위치를 나타내는 객체 레퍼런스가 전달되면, 해당 객체를 주기억장치에 할당한 후 고유 식별자를 부여하여 상기 응용 프로그램으로 객체 식별자를 반환하는 객체 생성 과정을 수행하고, 상기 변경된 응용 프로그램으로부터 객체 관리자 모듈로 객체로의 접근을 위한 객체 식별자가 전달되면, 해당 객체의 레퍼런스를 반환하는 객체 접근 과정을 수행하는 제3단계;
    를 포함하여 이루어짐을 특징으로 하는 객체 관리 방법.
  9. 제8항에 있어서,
    상기 객체 관리자 모듈은,
    객체 생성 시 객체에 고유 식별자를 부여하고, 고유 식별자 및 저장 위치 관리를 위해 객체 고유의 식별자와 주기억장치의 힙 영역에 할당된 객체를 가리키는 레퍼런스 및 객체가 주기억장치, 보조기억장치, 원격 서버 중 어느 위치에 저장되어 있는지를 표시하는 플래그(flag)를 항목으로 하는 자료 구조를 갖는 객체 관리 테이블을 유지하며,
    상기 제3단계에서,
    상기 객체 생성 과정은,
    상기 객체 관리자 모듈로 객체의 생성을 위한 객체 레퍼런스가 전달되면, 주기억장치에 객체를 생성할 공간이 있는지의 여부를 판단하는 단계와;
    상기 판단 결과, 공간이 부족한 경우 보조기억장치와 원격 서버 중 어느 하나로 언로딩할 객체를 선택하고, 선택된 객체를 보조기억장치와 원격 서버 중 어느 하나에 언로딩한 후 언로딩된 객체의 정보를 상기 객체 관리 테이블에 기록하는 단계와;
    상기 응용 프로그램에서 생성하고자 하는 객체를 주기억장치의 객체 생성 공간에 할당하는 단계와;
    상기 객체에 고유 식별자를 부여하고, 고유 식별자를 상기 응용 프로그램으 로 반환하는 단계;
    를 포함하여 이루어짐을 특징으로 하는 객체 관리 방법.
  10. 제8항에 있어서,
    상기 객체 관리자 모듈은,
    객체 생성 시 객체에 고유 식별자를 부여하고, 고유 식별자 및 저장 위치 관리를 위해 객체 고유의 식별자와 주기억장치의 힙 영역에 할당된 객체를 가리키는 레퍼런스 및 객체가 주기억장치, 보조기억장치, 원격 서버 중 어느 위치에 저장되어 있는지를 표시하는 플래그(flag)를 항목으로 하는 자료 구조를 갖는 객체 관리 테이블을 유지하며,
    상기 제3단계에서,
    상기 객체 접근 과정은,
    상기 변경된 응용 프로그램으로부터 객체 식별자가 전달되면, 상기 객체 관리 테이블을 이용하여 해당 객체가 주기억장치에 위치되어 있는지의 여부를 판단하는 단계와;
    상기 판단 결과, 주기억장치에 없는 경우, 해당 객체가 위치되어 있는 보조기억장치와 원격 서버 중 어느 하나로부터 주기억장치로 해당 객체를 로딩하는 단계와;
    해당 객체의 레퍼런스를 상기 응용 프로그램으로 반환하는 단계;
    를 포함하여 이루어짐을 특징으로 하는 객체 관리 방법.
  11. 제8항에 있어서,
    상기 제2단계에서,
    상기 코드 생성기는,
    주기억장치 상의 객체 위치를 나타내는 레퍼런스 대신 고유 식별자를 사용하도록 하여 응용 프로그램이 생성된 객체에 접근하고자 할 때 객체 레퍼런스를 직접 사용하는 대신 객체 식별자를 객체 관리자 모듈로 넘겨 해당 객체의 레퍼런스를 요구하도록 바이트코드 수준에서 응용 프로그램을 수정하며, 변경된 응용 프로그램을 자동으로 생성하는 것을 특징으로 하는 객체 관리 방법.
  12. 제8항에 있어서,
    상기 제2단계에서,
    상기 코드 생성기는,
    상기 바이트코드 분석기에 의한 바이트코드 명령어 분석 중 데이터 값이 초기화되지 않은 상태의 객체를 생성하고, 그 객체를 가리키는 레퍼런스를 피연산자 스택(operand stack)의 톱(top)에 저장하는 명령어가 발견되면, 객체를 생성하기 위한 명령어 패턴을 분석하고, 객체를 초기화하는 명령어 다음에 객체 관리자 모듈을 호출하기 위한 명령어를 삽입하는 것을 특징으로 하는 객체 관리 방법.
  13. 제8항에 있어서,
    상기 제2단계에서,
    상기 코드 생성기는,
    객체 관리자 모듈이 객체의 레퍼런스 대신 객체의 식별자를 반환하도록 하기 위하여, 상기 바이트코드 분석기에 의한 바이트코드 명령어 분석 중 객체의 레퍼런스를 저장하기 위한 명령어가 발견되면, 상기 객체 레퍼런스 저장 명령어를 객체의 식별자를 저장하기 위한 명령어로 변경하여, 응용 프로그램이 객체의 레퍼런스 대신 객체의 식별자를 사용하도록 하는 것을 특징으로 하는 객체 관리 방법.
KR1020050063643A 2005-07-14 2005-07-14 객체 관리 시스템 및 방법 KR101140522B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020050063643A KR101140522B1 (ko) 2005-07-14 2005-07-14 객체 관리 시스템 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020050063643A KR101140522B1 (ko) 2005-07-14 2005-07-14 객체 관리 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20070009777A KR20070009777A (ko) 2007-01-19
KR101140522B1 true KR101140522B1 (ko) 2012-04-30

Family

ID=38011273

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050063643A KR101140522B1 (ko) 2005-07-14 2005-07-14 객체 관리 시스템 및 방법

Country Status (1)

Country Link
KR (1) KR101140522B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100789515B1 (ko) * 2001-09-26 2007-12-28 엘지전자 주식회사 Pvr 리모콘
KR101116615B1 (ko) 2007-03-28 2012-03-07 삼성전자주식회사 자바 가상 머신 상에서 이뤄지는 애플리케이션 및 스레드의자원 관리 시스템 및 방법
CN117201229B (zh) * 2023-11-07 2024-02-20 横川机器人(深圳)有限公司 一种通讯方法、系统及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030000926A (ko) * 2001-06-27 2003-01-06 주식회사 인터와이즈 정보 단말기의 자바 프로그램 처리 속도 향상을 위한 자바컴파일 온 디멘드 서비스 시스템 및 그 방법
KR20040076048A (ko) * 2003-02-24 2004-08-31 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030000926A (ko) * 2001-06-27 2003-01-06 주식회사 인터와이즈 정보 단말기의 자바 프로그램 처리 속도 향상을 위한 자바컴파일 온 디멘드 서비스 시스템 및 그 방법
KR20040076048A (ko) * 2003-02-24 2004-08-31 삼성전자주식회사 자바 프로그램에서 바이트 코드의 컴파일 시간 단축시스템 및 방법

Also Published As

Publication number Publication date
KR20070009777A (ko) 2007-01-19

Similar Documents

Publication Publication Date Title
KR100864192B1 (ko) 사전 내면화된 프로그램 파일들을 생성 및 이용하기 위한 방법 및 디바이스
US6799173B2 (en) Method and apparatus for sharing code containing references to non-shared objects
US10089119B2 (en) API namespace virtualization
JP5139987B2 (ja) 拡張可能メタデータ
US6738965B1 (en) Trace information in a virtual machine
US7406684B2 (en) Compiler, dynamic compiler, and replay compiler
US7246346B2 (en) System and method for persisting dynamically generated code in a directly addressable and executable storage medium
KR101059633B1 (ko) 멀티태스킹 가상 머신을 위한 힙 구성
JP2009059349A (ja) 共用型ジャバjarファイル
US6813762B1 (en) Method for processing program files in a programming language capable of dynamic loading
Corsaro et al. Virtual component: a design pattern for memory-constrained embedded applications
US7020874B2 (en) Techniques for loading class files into virtual machines
JP5401561B2 (ja) クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用
US6959430B2 (en) Specialized heaps for creation of objects in object-oriented environments
US6754796B2 (en) Frameworks for implementation of java heaps
KR101140522B1 (ko) 객체 관리 시스템 및 방법
US8341606B2 (en) Method of invoking inlined method and java virtual machine using the method
US6752836B1 (en) Method and apparatus for high-concurrency client locking with java in a data processing system
JP5646591B2 (ja) マルチタスク仮想マシンのためのヒープ組織
KR100884926B1 (ko) 가상 메모리가 없는 임베디드 시스템에서의 기존 공유라이브러리 사용방법
CN117785728A (zh) 数据处理方法和装置
US20080005160A1 (en) Assembly Sensitive Dynamic Classloading Of .Net Types in J#
KR20000003162A (ko) 효율적인 플래시 메모리 운용 방법

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160328

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170329

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190329

Year of fee payment: 8