KR100450312B1 - 읽기전용메모리에클래스들을로딩하기위한방법및시스템 - Google Patents

읽기전용메모리에클래스들을로딩하기위한방법및시스템 Download PDF

Info

Publication number
KR100450312B1
KR100450312B1 KR1019970022986A KR19970022986A KR100450312B1 KR 100450312 B1 KR100450312 B1 KR 100450312B1 KR 1019970022986 A KR1019970022986 A KR 1019970022986A KR 19970022986 A KR19970022986 A KR 19970022986A KR 100450312 B1 KR100450312 B1 KR 100450312B1
Authority
KR
South Korea
Prior art keywords
class
data
computer
executable module
read
Prior art date
Application number
KR1019970022986A
Other languages
English (en)
Other versions
KR970076313A (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 선 마이크로시스템즈 인코퍼레이티드
Publication of KR970076313A publication Critical patent/KR970076313A/ko
Application granted granted Critical
Publication of KR100450312B1 publication Critical patent/KR100450312B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • 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
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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
    • G06F9/44557Code layout in executable memory
    • G06F9/44563Sharing
    • 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
    • G06F9/44568Immediately runnable code
    • G06F9/44573Execute-in-place [XIP]
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution

Abstract

읽기 전용 저장 매체에 위치한 프로그램 데이터를 저장하기 위한 주소 공간과 랜덤 액세스 메모리에 위치한 프로그램 데이터를 저장하기 위한 주소 공간을 가지고 있는 실행 모듈을 제공하는 방법과 시스템이 여기에서 설명된다. 그 실행 모듈은 동적인 클래스 로딩을 위하여 구조화된 자바(Java) 클래스들을 나타낸다. 정적 클래스 로더는 정적 로딩을 수용하기 위하여 클래스 구조를 수정하기 위해서 사용된다. 정적인 클래스 로더도 마찬가지로 해결되지 않는 기호적 참조들을 가지고 있는 방법들과 그 모듈의 실행동안에 변화하는 데이터를 식별한다. 이러한 방법과 데이터들은 그들을 랜덤 액세스 메모리에 위치하는 주소 공간에 놓기 위하여 식별된다. 정적 로더는 보조 기억장치가 없거나 또는 거의 없어서 애플리케이션들이 전부 랜덤 액세스 메모리에서 런(run)되어야만 하는 클라이언트 컴퓨터를 가지고 있는 분산 컴퓨팅 환경에서 매우 유익하다. 정적으로 로드될 수 있는 클래스들을 위하여 읽기 전용 메모리를 활용함으로써, 랜덤 액세스 메모리가 다른 용도를 위하여 사용될 수 있도록 남겨지게 된다.

Description

읽기 전용 메모리에 클래스들을 로딩하기 위한 방법 및 시스템
객체 지향형 프로그래밍 언어들에 있어서의 현재의 경향은 언어의 기능성을 확장하여 분산 컴퓨팅 환경에서의 동적 컨텐트(content)의 분산을 수용하도록 하는 것이다. 그와 같은 한 언어에 있어서, 런타임시에 클래스들을 동적으로 로딩 함으로써 달성된다. 한 클래스는 오브젝트의 활동을 모델(model)하는 방법들과 변수들의 집합이다. 런타임시에 클래스들을 동적으로 로딩함으로써, 기존의 애플리케이션들은 분산 컴퓨팅 환경 내에 있는 어떤 컴퓨터 시스템에 있는 새로운 클래스들에게로의 링크에 의하여 기능성을 부가할 수 있다.
그런 언어들에 있어서, 기호적 참조들이 클래스 멤버들(예, 클래스의 방법들과 변수들)을 참조하기 위하여 사용된다. 클래스가 인보크(invoked)되었을 때, 동적 로더는 클래스를 위한 스키마를 결정하며 기호적 참조를 해결한다. 그런 로딩 방식은 자주 갱신되는 클래스들을 액세스할 때 유익하다. 그러나, 그런 액세싱 방식의 한계는 랜덤 액세스 메모리(RAM)과 같은 읽기/쓰기 메모리 장치에의 종속에 있다.
보조 기억장치(예, 비휘발성 자기 디스크 저장장치)가 거의 없거나 전혀 없는 컴퓨팅 환경에서, 이러한 방식에 의한 클래스들의 동적 저장은 RAM의 저장용량을 금방 소모해 버린다. RAM의 용량은 한계가 있기 때문에, 애플리케이션에 의하여 소모되는 RAM의 양을 최소화하는 것이 바람직스럽다. 따라서, 동적으로 로드할 수 있는 클래스들을 갖는 객체 지향형 프로그램 코드를 수행하기 위하여 사용되어질 RAM의 양을 제한할 필요가 있는 것이다.
이런 선행기술의 결함을 해결하는 방법과 시스템을 제공하는 것은 매우 유용할 것이다.
본 발명의 부가적인 목적들과 특징들은 후술하는 상세한 설명과 첨부된 청구항들을 도면들과 관련하여 이해될 때 더욱 명백해 질 것이다.
도 1은 분산 컴퓨터 시스템의 블록도이다.
도 2는 도 1의 분산 컴퓨터 시스템에 있어서의 클라이언트 컴퓨터의 블록도이다.
도 3은 프리로드될 수 있고 실행 모듈을 만들어내기 위하여 사용되는 프로세싱 부품들을 나타내는 흐름도이다.
도 4는 클래스 파일을 위한 파일 배치를 나타낸다.
도 5는 컨스턴트 풀(constant pool)을 의한 파일의 배치를 나타낸다.
도 6은 클래스 블록 데이터 구조들을 나타낸다.
도 7은 명령어 바이트코드 스트림을 나타낸다.
도 8은 오프라인 클래스 로더에 의하여 사용되는 방법의 플로우 차트이다.
도 9는 클래스 블록 데이터 구조들을 만들기 위한 플로우 차트이다.
도 10은 중복되는 콘스턴트(constant)들을 제거하기 위한 방법의 플로우 차트이다.
도 11은 빠른 명령어 포맷이 아닌 것을 빠른 명령어 포맷으로 변환하기 위한방법의 플로우 차트이다.
도 12는 프리로드된 애플리케이션을 읽기 전용 메모리 및 랜덤 액세스 메모리로 매핑하는 것을 보여주며 또한 정적 클래스 개시기에 의하여 랜덤 액세스 메모리로 매핑된 데이터와 방법들에 관한 부분의 로딩을 나타내는 블럭도이다.
* 도면의 주요부분에 대한 부호의 설명 *
100 : 분산 컴퓨터 시스템 102 : 클라이언 컴퓨터
104 : 서버 106 : 네트웍 연결 (인터넷)
114 : 유저 인터페이스 116 : 유저 인터페이스
400 : 클래스 파일 404 : 컨스턴트 풀
602 : 클래스 블록 604 : 메소드 블록
이 발명의 개시는 그 클래스들이 런타임 동적 로딩을 요구하지 아니하고 메모리로 프리로드(preloaded)되는 실행 모듈을 생산하기 위하여 사용되는 오프라인(offline) 클래스 로더에 관한 것이다. 그럼에도 불구하고, 실행 모듈은 런타임 동적 로딩에 맞게 변형된 클래스 구조를 가지고 있다. 그러므로, 오프라인클래스 로더는 정적 로딩을 수용하기 위하여 기존의 클래스 구조들을 수정한다. 그러나, 그 클래스 구조는 해결되지 않는 참조들을 가진 다양한 데이터와 방법들을 허용한다. 오프라인 클래스 로더는 이러한 방법들과 데이터에 태그(tags)를 붙여 그들이 랜덤 액세스 메모리에 저장된다는 것을 나타낸다. 모든 다른 데이터들은 읽기 전용 메모리에 저장된다. 정적 로딩 프로세스의 완성 단계에서, 선 로드될 수 있는 실행가능 모듈이 생성되어 두 개의 주소 공간을 가진다. 해결 안된 참조들을 갖고 있는 방법들 및 그 모듈의 실행동안에 변화하는 데이터를 가지는 첫 번째 주소 공간은 랜덤 액세스 메모리에 로드된다. 두 번째 주소 공간은 정적으로 로드된 클래스들을 가진 방법들 및 읽기 전용 메모리로 로드된 불변 데이터를 포함한다.
한 구현 예에서, 최소의 보조 기억장치를 가지고 있는 클라이언트 컴퓨터는 클라이언트의 읽기 전용 메모리에서 브라우저를 프리로드하기 위하여 오프라인 클래스 로더를 사용한다. 브라우저는 앞에서 언급한 두 개의 주소 공간들로 나뉘어진다. 시스템 초기화 또는 전원 인가 시에, 브라우저의 랜덤액세스 메모리 부는 읽기 전용 메모리에서 랜덤 액세스 메모리로 로드된다. 랜덤액세스 메모리로부터 브라우저의 많은 부분을 실행함으로써, 브라우저는 정보내용 및 클라이언트가 통신 연결된 다른 서버 컴퓨터들로부터 얻을 수 있는 실행 가능한 모듈들을 저장하기 위한 부가적인 RAM 저장장치를 가진다.
여기에서 설명되는 방법과 시스템은 적어도 하나의 서버와 다수의 클라이언트 컴퓨터들을 연결하는 통신 링크를 가진 분산 컴퓨팅 환경을 활용한다. 몇몇 클라이언트 컴퓨터들은 보조기억장치(예, 비휘발성 자기 디스크 저장장치)를 거의 또는 전혀 갖고 있지 않아서 애플리케이션들이 전적으로 랜덤 액세스 메모리로부터 런(run)되어 질 것이 요구된다. 자바(Java) 프로그래밍 언어로 개발된 애플리케이션은 그러한 클라이언트 컴퓨터에서 실행된다. 바람직하게는, 그 애플리케이션은 하나 또는 그 이상의 서버 컴퓨터들로부터 자바 애플릿들(Java applets)과 같은 자바 컨텐트(Java content)를 임포트(import)하기 위하여 사용되는 브라우저(browser)이다. 전형적으로, 브라우저는 하이퍼텍스트 마크업 랭귀지(HyperText Markup Language (HTML)) 문서들로써 포맷된 하나 또는 그 이상의 웹 페이지들에 액세스하기 위한 하이퍼텍스트 트랜스퍼 프로트콜(HyperText Transfer Protocol(HTTP))을 사용하여 웹 사이트(web site)로서의 역할을 하는 서버로부터 웹 문서들을 읽어 들이는 인터프리트된(interpreted) 프로그램 모듈이다. HTML 문서들은 인터프리트되고 그리고 클라이언트 컴퓨터와 관련된 사용자에게 제공된다. 종종, HTML 문서들은 애플릿(applet)들을 임베드한다. 애플릿은 자바 클래스로 표현된 실행 모듈이다. 브라우저는 그 애플릿을 실행하기 위하여 그 애플릿 및 그와 관련된 클래스들을 로드한다. 브라우저, HTML 문서들, 그리고 애플릿들은 모두 컴퓨터의 RAM에 위치한다. 경우에 따라서, RAM에 로드된 데이터의 양은 그 용량을 초과할 수 있다. 클라이언트 컴퓨터는 보조기억장치를 가지지 않을 수 있으므로, 브라우저 및 다른 기본 지원 클래스들의 부분들을 읽기 전용 메모리에 두는 것이 유리하다. 이 방법에서, RAM 저장장치는 인포트된 애플릿들을 위하여 특별히 보존된다. 바람직하게는, 브라우저와 다른 기본 지원 클래스들(예, I/O 및 유틸리티 클래스들)은 읽기 전용 메모리에 프리로드(preload)된다.
오프라인 클래스 로더는 브라우저 및 기본 지원 클래스들과 같은 자바 애플리케이션을 적어도 두 개의 분리된 주소공간으로 분할한다. 첫 번째 주소 공간은 읽기 전용 메모리 저장장치에 위치하며 동적 로딩을 요구하지 않는 방법들과 불변 상태로 유지되는 데이터를 갖는다. 두 번째 주소 공간은 랜덤 액세스 메모리와 같은 읽기/쓰기 메모리 장치에 위치하며 동적 로딩을 요구하는 방법들과 실행동안에 변하는 데이터를 갖는다.
이 방법으로 나뉘어진 브라우저는 애당초 클라이언트 컴퓨터의 일기 전용 메모리에 저장될 수 있다. 시스템에 전원을 인가할 때, 두 번째 주소 공간이 RAM에 프리로드된다. 이것은 브라우저가 HTML 문서들, 애플릿들, 다른 정보 내용, 그리고 통신 링크를 통하여 액세스할 수 있는 실행 모듈들을 임포트 하기 위하여 사용하도록 많은 양의 RAM 저장장치를 남겨둘 것이다.
분명히 해야 할 것은 이 발명의 개시가 자바 프로그래밍 언어와 관련하여 설명된다는 것이다. 이 이유에 의하여, 이 상세한 설명에서는 자바의 용어를 사용할 것이다. 이하에서의 자바 용어는 상세한 설명을 통하여 자주 사용될 것이며 여기에서 간단히 설명될 것이다. 클래스는 객체의 활동을 표현하기 위하여 사용되는 인스턴스 변수(instance variable)들 및 메소드(method)들의 그룹핑(grouping)이다. 객체는 클래스의 한 인스턴스이다. 인스턴스 변수는 한 클래스로부터 인스턴시에이션(instantiation)되는 한 객체의 데이터이다. 정적 인스턴스 변수는 그 클래스의 모든 인스턴스들에게 동일하게 될 것이다. 비 정적(non-static) 인스턴스 변수는 그 클래스의 각 인스턴스에 따라 다르다. 불변 데이터(constant data)는 프로그램 실행동안에 변경되지 아니하는 데이터를 말한다.
메소드(method)는 잘 정의된 일련의 연산들을 수행하는 프로그램 세그먼트이다. 자바에서, 메소드는 바이트코드들의 스트림으로 표현된 명령어들에 의하여 구현된다. 바이트코드는 8비트 오퍼랜드(operand) 혹은 연산코드(opcode)와 같은 명령어의 일부분이 될 수 있는 8비트 코드이다. 인터페이스는 추상적인 클래스인데 거기에서 메소드를 구현하는 바이트코드들이 런타임에서 정의된다. 자바 애플리케이션은 자바 인터프리터나 자바 저스트인타임(just-in-time) 컴파일러를 사용하여 실행될 수 있는 바이트코드들로 구성된 실행 모듈이다. 자바 프로그래밍 언어에 관한 더 상세한 특징들은 New Riders Publishing에서 발행한 Tim Ritchey의 Programming with Java Beta 2.0에 기술되어 있다.
도 1과 관련하여, 다수의 클라이언트 컴퓨터들 102와 다수의 서버 컴퓨터들 104를 가지고 있는 분산 컴퓨터 시스템 100이 나타나 있다. 한 실시 예에서, 각 클라이언트 컴퓨터 102는, 비록 다른 형태의 통신 연결도 사용될 수 있지만, 인터넷 106을 통하여 서버들 104에 연결되어 있다. 바람직하게는, 서버와 클라이언트 컴퓨터들은 SUN 워크스테이션, IBM 호환 컴퓨터들, 그리고 매킨토시 컴퓨터들과 같은 데스크탑 컴퓨터일 수 있으나, 실질적으로 어느 유형의 컴퓨터도 서버나 클라이언트 컴퓨터가 될 수 있다. 더욱이, 시스템은 분산 컴퓨터 시스템에 한정되지 아니한다. 그것은 상세한 설명 없이 실현될 수 있을 것이며 또한 다양한 컴퓨터 시스템에서 그리고 다양한 구성, 또는 밀결합 프로세서들 제조자들이나 모델들에서 또는 소결합 마이크로프로세서 시스템들의 다양한 구성에서 구현될 수 있을 것이다.
한 구현 예에서, 하나 또는 그 이상의 컴퓨터들이 자바 컨텐트 또는 애플릿을 가지고 있는 HTML 문서들의 레퍼지토리(repository)를 포함하는 웹 사이트로서의 역할을 한다. 클라이언트 컴퓨터는 그 클라이언트와 결합된 사용자에게 서버 컴퓨터로부터 이용 가능한 HTML 문서들에게로의 액세스를 제공하는 브라우저를 실행한다. 도1과 관련하여, 서버 컴퓨터는 전형적으로 하나 또는 그 이상의 프로세서 112, 통신 인터페이스 116, 유저 인터페이스 114, 그리고 메모리 110을 포함한다. 메모리 110 은 다음의 것들을 포함한다.
· 오퍼레이팅 시스템 118;
· 인터넷 통신 관리 프로그램 또는 다른 타입의 액세스 프로시져들 120;
· 자바 프로그래밍 언어로 쓰여진 소스 코드를 바이트코드의 스트림으로 번역하기 위한 컴파일러 122;
· 하나 또는 그 이상의 소스 코드 파일 126을 포함하는 소스코드 레퍼지토리 124;
· 하나 또는 그 이상의 클래스 파일 130, 그리고 클래스 파일들을 포함하는 하나 또는 그 이상의 클래스 라이브러리 131 (각 클래스 파일들은 특정 클래스를 나타내는 데이터를 포함한다)을 포함하는 클래스 파일 레퍼지토리 128;
· 클래스들의 어떤 한 세트를 프리로드하기 위하여 사용되는 오프라인 클래스 로더 132 (오프라인 클래스 로더는 정적 클래스 로더라고도 불리운다);
· 링커에 의하여 인식될 수 있는 형식으로 클래스 멤버들, 클래스 데이터 구조들, 그리고 메모리 저장장치 지시기들을 나타내는 오브젝트 파일들을 만들어내기 위한 어셈블러 134;
· 프리로드된 한 세트의 클래스들의 메모리 배치를 결정하며 모든 기호적 참조들을 해결하기 위한 링커 136;
· HTML 문서들을 액세스하는데 사용하기 위한 브라우저 138;
· 서버에 의하여 사용되기 위한 하나 또는 그 이상의 데이터 파일들 146.
브라우저는 다음의 것들을 포함할 수 있다.
· 클래스들을 유저의 주소공간에 로드하며 각 로드된 클래스와 관련된 메소드들의 무결성을 확인하기 위한 바이트코드 프로그램 확인기(verifier)를 사용하는 런타임 클래스 로더 모듈 140;
· 특정 프로그램이 어떤 미리 정의된 무결성 기준을 만족하는지의 여부를 확인하기 위한 바이트코드 프로그램 확인기 모듈 142;
· 다른 모듈뿐만 아니라 HTML 문서들을 로드하기 위한 HTML 로더 144
도 2는 하나 또는 그 이상의 프로세서 202, 통신 인터페이스 206, 유저 인터페이스 204, 읽기 전용 메모리 208, 그리고 랜덤 액세스 메모리 210을 포함하는 클라이언트 컴퓨터를 나타내고 있다. 읽기 전용 메모리 208은 브라우저 212의 일부분 및 해결되지 아니하는 참조들을 갖는 메소드들과 변하지 아니하고 남아있는 데이터를 포함하는 (운영체제 213 및 네트워크 액세스 프로시져들 214를 포함하는) 지원 프로시져들을 저장한다. 랜덤 액세스 메모리 210은 다음의 것들을 저장한다.
· 브라우저 215의 두 번째 부분 및 해결되지 아니하는 참조들을 갖는 메소드들과 애플리케이션의 실행 동안에 변하는 데이터를 포함하는 지원 프로시져들 216, 217
· 유저 인터페이스 204를 통한 사용자의 요구에 브라우저에 의하여 얻어지는 하나또는 그 이상의 HTML 문서들 222를 갖고있는 HTML 문서 레퍼지토리 220;
· 하나 또는 그 이상의 클래스 파일들 또는 애플릿들 226을 포함하는 클래스 파일 레퍼지토리 224;
· 그 프로세싱 동안에 클라이언트가 사용할 수 있는 하나 또는 그 이상의 데이터 파일들 288
도 3은 프리로드할 수 있는 실행 모듈을 만들기 위하여 사용되는 단계들의 절차를 나타내는 개관도 이다. 확실히 해두어야 할 것은 여기에서 설명된 메소드와 시스템은 브라우저와 다른 지원 프로시져들을 프리로드하는 것과 관련이 있다는 것이다. 그러나, 여기에서 설명된 메소드와 시스템은 이들 특별한 자바 애프리케이션들에 한정되지 아니한다. 어떠한 자바 애플리케이션, 또는 런타임에 정상적으로 연결되는 어떠한 다른 메소드들의 집합도 여기에서 설명된 메소드와 시스템을 사용하여 프리로드 될 수 있다.
자바 애플리케이션을 포함하는 각 클래스를 위한 소스 코드 126은 컴파일러 122에 의하여 클래스 파일 130으로 컴파일 된다. 클래스 파일은 다른 정보 뿐 아니라 클래스들, 각 메소드의 바이트코드들, 컨스턴트 데이터를 표현하는 클래스 데이터 구조들을 포함한다. 클래스 파일의 더 자세한 설명은 아래에서 기술된다. 다른 대안으로써, 그 애플리케이션에 상당하는 클래스 파일들은 이미 하나 또는 그 이상의 클래스 라이브러리들 131에 있을 수 있다. 일단 그 클래스 파일들이 사용 가능하면, 프리로드될 애플리케이션을 구성하는 클래스 파일들의 모든 세트 128은 오프라인 클래스 로더 132에게 전송된다.
오프라인 클래스 로더 132의 목적은 각 클래스와 연관된 어떤 메소드들과 변수들이 읽기 전용 메모리에 저장될 것인지 또한 어떤 것이 랜덤 액세스 메모리에 저장되어야 할 것인지를 결정하는데 있다. 자바 인터페이스들을 인보크(invoke)하거나 비 정적(non-static) 인스턴스 변수들을 사용하는 메소드들은 랜덤 액세스 메모리에 위치할 필요가 있다. 이것은 인터페이스들을 구현하는 바이트코드들이 런타임에 결정되고 비 정적 인스턴스 변수들이 관련 클래스들의 각 인스턴시에이션(instantiation)을 위해서 변경되기 때문이다. 오프라인 클래스 로더 132는 이들 메소드들과 변수들을 찾아내며 그들이 랜덤 액세스 메모리 장치에 로드될 것이라는 것을 나타내는 특별한 지시자를 삽입함으로써 그들을 플래그(flag)한다. 또한 오프라인 클래스 로더는 실행 코드의 더욱 컴팩트한 기술(representation)을 이루기 위하여 많은 최적화 동작을 수행한다. 예를 들어, 각 클래스와 연관된 컨스턴트 풀(constant pool)은 그 애플리케이션에 위치한 모든 클래스들을 위하여 결합되어 있다. 또한, 오프라인 클래스 로더는 애당초 프리로드된 클래스 환경을 위한 동적 로딩을 위하여 구축된 클래스 파일들을 적절히 조작하기 위해서 부가적인 프로세싱을 수행한다.
오프라인 클래스 로더 302의 출력은 두 개의 파일들로 구성될 수 있다. 즉, 모든 애플리케이션을 위한 컨스턴트 데이터를 포함하는 컨스턴트 풀 파일, 그리고 클래스 데이터 구조들과 클래스 멤버들을 포함하는 갱신된 클래스 파일이 그것이다. 이 파일들 모두에 있는 데이터는 데이터 정의들에 맞추어 포맷되는데, 거기에서 각 정의는 바이트코드와 메모리 위치를 나타내는 오프셋을 명확히 지시한다. 갱신된 클래스 파일은 바이트 코드들의 특별한 세트가 어떤 타입의 메모리 저장 장치에 위치되어야 할 것인가를 나타내는 메모리 저장장치 지시기들을 포함할 것이다. 그러나, 여기에서 설명된 메소드와 시스템은 이 두 파일들을 만들어내는 것에 한정되지 아니한다. 모든 관련 클래스 데이터를 갖고 있는 단일의 파일을 포함하는 다른 파일 시스템 구성(단, 여기에 한정되는 것은 아니다)도 사용될 수 있다.
그리고서 파일들은 링커(linker)가 그 데이터를 적당한 주소공간들에게로 맵(map)하게 하기 위하여 요구되는 포맷을 가지고 있는 오브젝트 모듈을 만들어내는 어셈블러 134로 전송된다. 바람직하게는, 두 개의 주소공간이 있게 되는데, 하나는 랜덤 액세스 메모리 장치를 위한 것이고 두 번째 것은 읽기 전용장치를 위한 것이다. 그리고서 오브젝트 모듈은 애플리케이션에 있는 클래스들을 위하여 메모리 배치를 만들어 내는 링커 136으로 전송된다. 일반 메모리 배치가 결정되면, 링커 136은 모든 기호적 참조들을 해결하고 그들을 직접주소들로 교체한다. 메모리 배치는 두 주소 공간으로 분할된다. 읽기 전용 메모리를 위하여 플래깅된 데이터와 메소드들은 첫 번째 주소 공간에 포함되며 랜덤 액세스 메모리에 저장될 것을 요구하는 것으로써 플래깅된 데이터와 메소드들은 두 번째 주소공간에 포함된다. 링커 136으로 부터의 출력은 이들 두 주소공간을 위한 데이터와 메소드들을 포함하는 프리로드될 수 있는 실행 모듈 306이다.
오프라인 클래스 로더의 주된 기능은 앞에서 설명되었듯이 읽기 전용 메모리에 저장되어야 할 데이터와 메소드들 및 랜덤 액세스 메모리에 저장되어야 할 그거들을 결정하는 것이다. 또한, 모든 프리로드된 클래스들을 위한 컨스턴트 풀은 바람직하게는 오프라인 클래스 로더에 의하여 연결되어 있어서, 사용되는 읽기 전용 저장장치의 양을 최소화한다. 컨스턴트 풀을 결합하기 위해서, 사용된 저장장치의 양을 감소시키기 위하여 어떤 최적화 동작이 수행된다. 특히, 중복 표현들은 제거되며 긴 스트링(string)들의 부분인 스트링들은 긴 스트링 내에서 서브스트링 위치들에 알맞는 포인터들과 교체된다.
모든 클래스들을 포함하는 범 컨스턴트 풀(universal constant pool)은 두 세그먼트로 나뉘는데, 첫 번째 세그먼트는 256바이트를 차지하며 두 번째 세그먼트는 64K-256 바이트를 차지한다. 첫 번째 세그먼트는 적어도 256개의 컨스턴트를 포함하며 두 번째 세그먼트는 나머지 컨스턴트들을 포함한다. 컨스턴트 풀은 가장 자주 참조되는 컨스턴트들은 풀의 첫 번째 세그먼트에 저장되도록 하고 가장 적게 참조되는 컨스턴트들은 두 번째 세그먼트에 저장되도록 명령을 받는다. 일단 컨스턴트 풀이 결합되어지면, 컨스턴트들을 참조하는 바이트코드들은 조정될 필요가 있을 수 있다. 첫 번째 세그먼트에 있는 컨스턴트들은 하나의 8비트 오퍼렌드에 의하여 참조되는 반면 두 번째 세그먼트에 있는 컨스턴트들은 두 개의 8비트 오퍼렌드들에 의하여 참조된다(오퍼렌드 702가 8비트 오퍼렌드이고 704와 706 오퍼렌드들은 함께 16비트 오퍼렌드를 구성하는 도7 참조). 8비트 오퍼렌드에서 16비트 오퍼렌드로의 확장은 그 메소드들에 있는 바이트 코드들의 변화된 상대 위치들을 설명하기 위하여 메소드들에 있는 바이트코드 오프셋 값들(예, 분기 명령어들에서)의 조정뿐만 아니라, 범 컨스턴트 풀의 두 번째 세그먼트에 있는 컨스턴트들을 참조하는 그 바이트 코드들의 조정을 요한다. 또한, 그 바이트코드들의 변경은 변화된 바이트코드시작과 끝 위치들을 다양한 예외 처리기들이 할당되어 있는 메소드들 안으로 반영시키기 위하여 예외 테이블(excepion table)에 저장된 오프셋들을 갱신할 것을 요한다.
더 나아가, 오프라인 클래스 로더는 클래스들을 프리로딩하는데 적합한 것으로 클래스 구조를 맞추기 위하여 두 개의 다른 변형동작을 수행한다. 정적 클래스 개시기(initializer)가 만들어져서 프리로드될 클래스들을 위해서 클래스 개시동작을 수행한다. 또한 메소드들을 기호적으로 참조하는 넌퀵(non-quick) 명령어 포맷을 사용하는 바이트코들도 메소드들을 직접 참조하는 퀵(quick) 명령어 포맷으로 레코드된다.
도 8은 오프라인 클래스 로더 132에 의하여 사용되는 단계들을 더 자세하게 나나낸다. 처음에 오프라인 클래스 로더는 그의 클래스들이 프리로드될 애플리케이션의 부분인 각 클래스들에 대한 클래스 파일을 받는다. 도4는 클래스 파일에 대한 포맷을 보여준다. 클래스 파일은 하나 또는 그 이상의 헤더 레코드 402, 컨스턴트 풀 404, 하나 또는 그 이상의 메소드 406, 그리고 예외 테이블408을 포함한다. 헤더 레코드 402는 컨스턴트 풀의 크기, 메소드의 수, 예외 테이블의 크기 등을 나타낼 수 있다. 컨스턴트 풀 404는 애플리케이션의 실행동안에 변경되지 아니하고 남아있는 데이터를 포함한다. 그런 데이터의 예는 스트링 컨스턴트들, 정적 최종 정수들, 메소드로의 참조들, 그리고 예외 테이블의 크기 등일 수 있다. 메소드 데이터 406은 각 메소드를 구현할 수 있는 바이트코드들의 스트림으로 구성되어 있다. 예외 테이블에 있는 각 엔트리(entry)는 바이트코드로의 시작 및 끝 오프셋, 예외의 유형, 그리고 예외를 위한 처리기의 오프셋등을 제공한다. 그 엔트리는 시작과 끝 오프셋들에 의하여 지시된 코드 내에서 언제 지시된 유형의 예외가 발생할 것인지를 나타내며, 예외에 대한 처리기는 주어진 처리기 오프셋에서 발견된다.
각 클래스 파일은 오프라인 클래스 로더에 의하여 준비되며(단계 802) 각 클래스에 대한 적절한 클래스 데이터 구조들이 형성되는데(단계 804), 그것은 애플리케니션을 전처리하기 위하여 사용되고 있는 컴퓨터의 메모리에 저장된다. 도6은 클래스 데이터 구조들 600을 보여준다. 각 클래스에 대하여 클래스 블록 602, 하나 또는 그 이상의 메소드 블록 604, 각 메소드에 대한 바이트코드들 608, 하나 또는 그 이상의 필드 블록 614, 필드들을 위한 분리된 데이터 영역들 618, 컨스턴트 풀 624, 맵 테이블 626, 그리고 예외 테이블 628이 있다.
클래스 블록은 다음의 데이터를 포함하는 고정 크기의 데이터 구조이다.
· 클래스 이름 630;
· 현재 클래스의 임시 슈퍼클래스(immediate superclass)의 클래스 블록에 대한 포인터 632;
· 각 포인터가 하나의 메소드 블록을 참조하는 하나 또는 그 이상의 포인터들의 배열 634
· 각 포인터가 하나의 필드 블록을 참조하는 하나 또는 그 이상의 포인터들의 배열 636
· 클래스의 컨스턴트 풀에 대한 포인터 638
· 클래스의 예외 테이블에 대한 포인터 640
메소드 블록 604는 미리 결정된 수의 메소드들을 포함하는 고정된 크기의 데이터 구조이다. 하나 또는 그 이상의 메소드 블록들은 한 클래스의 모든 메소드들을 포함하도록 할당된다. 메소드 블록 604는 메소드의 이름 612 및 상응하는 바이트코드들 608에 대한 포인터 610을 포함한다.
필드 블록 614는 인스턴스 변수들과 필드들을 포함하는 고정된 크기의 데이터 구조이다. 자바에서 제공된 두 가지 다른 인스턴스 변수들의 유형 각각에 대해 다른 필드 블록 포맷이 있다. 첫번째 포맷 616은 정수 또는 부동소수점 인스턴스 변수에 대해 사용된다. 이 포맷(616)은 인스턴스 변수의 이름, 유형(예, 정수 또는 부동 소수점), 및 그 값을 포함한다. 두 번째 포맷(620)은 더블 또는 롱 타입 인스턴스 변수에 대해 사용된다. 이 포맷(620)은 인스턴스 변수의 이름, 유형(예를 들어, 더블 또는 롱) 및 인스턴스 변수(618) 값의 위치에 대한 포인터를 포함한다.
도 9는 클래스 데이터 구조들을 만들기 위하여 사용되는 단계들을 보여준다. 헤더 레코드에 있는 정보는 각각의 클래스 데이터 구조들을 위한 공간을 할당하기 위하여 사용된다(단계 1002). 일단 클래스 데이터 구조들이 할당되면, 이 구조들 각각의 위치에 대한 포인터들은 클래스 블록에 포함된다(단계1004).
다음으로, 오프라인 클래스 로더는 컨스턴트 풀에서 읽기를 한다. 이 단계들을 논하기 전에, 컨스턴트 풀의 컨텐트가 먼저 설명될 것이다. 도5는 각 클래스 파일에 저장된 컨스턴트 풀의 구조를 보여준다. 첫 번째 엔트리는 클래스의 이름과 슈퍼클래스의 이름 502를 가진다. 이 이름들은 스트링 컨스턴트들로 저장되며 첫 번째 엔트리는 컨스턴트 풀에 있는 이 스트링들의 위치에 대한 포인터들을 포함한다. 다음 엔트리는 필드들과 인스턴스 변수들에 관련한 것이다. 헤더 504는 컨스턴트 풀에 있는 필드들의 수를 표시하기 위하여 사용된다. 다양한 필드들 506이 헤더 뒤를 따른다.
마찬가지로, 스트링 컨스턴트은 컨스턴트 풀에 있는 스트링 컨스턴트들의 수를 나타내는 헤더 508에 의하여 시작된다. 다양한 스트링 컨스턴트들 510이 그 뒤를 따른다. 스트링 컨스턴트들은 메소드 이름들, 클래스 이름들, 그리고 인터페이스 이름들을 표시하기 위하여 사용된다. 다음으로, 메소드 참조들이 메소드들 512의 수를 나타내는 헤더에 의하여 시작되는 컨스턴트 풀에 저장된다. 컨스턴트 풀은 각 메소드에 대하여 그 메소드의 이름에 대한 포인터 514와 그 메소드의 클래스 이름 에 대한 포인터 516을 포함하는 메소드 포인터 511을 포함한다. 이 이름들은 컨스턴트 풀 내에 스트링 컨스턴트들로써 저장된다. 메소드 포인터 511은 메소드를 기호적으로 참조하기 위하여 사용된다. 이것은 인보크(invoke) 메소드 명령어의 넌퀵(non-quick) 포맷에서 사용된다.
메소드는 메소드 하나를 인보크하기 위한 명령어를 포함할 수 있다. 넌퀵 포맷에 있는 명령어는 다음과 같이 될 수 있다.
invoke method "class"."method"
여기에서 "class"는 클래스 이름을 가지고 있는 스트링 컨스턴트를 의미하며 "method"는 메소드 이름을 가지고 있는 스트링 컨스턴트를 의미한다. 인보크 메소드 명령어는 그 메소드의 포인터 511에 대한 포인터를 가지고 있다. 오프라인 클래스 로더는 메소드의 이름에 메소드의 블록에 대한 포인터를 더함으로써 이 기호적참조를 해결하려고 시도한다. 일단 링커가 클래스들을 위한 메모리 배치를 결정하였다면, 링커는 인보크 메소드 명령어의 넌퀵 포맷을 (예, 메소드의 주소를 저장함으로써) 메소드를 직접 참조하는 퀵 포맷으로 교체한다. 기호적 참조를 해결함으로써, 메소드는 프리로드 될 수 있다.
도 9로 다시 돌아가서, 컨스턴트들이 범 컨스턴트 풀에 저장될 때까지 클래스 파일의 컨스턴트 풀에 있는 그들의 본래의 위치로부터 다양한 임시 위치까지 컨스턴트들의 움직임을 추적할 맵 테이블 626을 위하여 저장장치가 할당되었다. 맵 테이블 626은 각 클래스를 위하여 만들어 졌고 컨스턴트 풀 내의 각 컨스턴트의 원래의 주소를 그의 현재의 위치로 맵해준다(단계 1006). 필드들을 제외한 컨스턴트 풀 내에 포함된 모든 데이터는 클래스 파일로부터 읽혀져서 컨스턴트 풀에 저장된다(단계 1008). 컨스턴트들이 클래스 파일에서 컨스턴트 풀로 전송될 때, 맵 테이블 626은 본래의 주소와 컨스턴트 풀 내의 현재의 위치를 반영하기 위하여 갱신된다. 그러나 컨스턴트 풀로부터 읽혀지는 필드들은 하나 또는 그 이상의 필드 불럭들로 로드되며 그들을 위하여 맵 테이블 내에서 아무런 엔트리들도 만들어지지 아니한다(단계 1008).
메소드 데이터는 클래스 파일로부터 읽혀지고 하나 또는 그 이상의 메소드 블록들에 저장된다. 부가적인 저장장치는 각 메소드와 연관된 바이트 코드들을 위하여 할당된다. 메소드의 이름은 바이트 코드들의 위치에 대한 포인터와 함께 메소드 블록에 놓이게 된다(단계 1010). 마찬가지로, 예외 테이블은 클래스 파일로부터 그에 상응하는 예외 테이블 데이터 구조로 로드된다(단계1012).
도 8로 다시 돌아가서, 클래스 데이터 구조들이 구축된 후, 해시(hash) 테이블 180 (도3 참조)이 모든 컨스턴트 풀의 총 크기에 맞추어 할당되며 중복 컨스턴트들의 제거를 위하여 나중에 사용된다(단계 805).
다음으로, 오프라인 클래스 로더는 중복 컨스턴트들을 제거하기 위한 절차를 수행한다. 이것은 공간 효율화 방식으로 모든 클래스들의 컨스턴트 풀들을 결합하기 위하여 수행된다. 각 클래스 파일에 대하여(단계 806), 클래스 컨스턴트 풀에 있는 각 엔트리는 중복 컨스턴트들을 위하여 스캔된다(단계 812). 도10과 관련하여, 중복 컨스턴트들은 해시 테이블을 사용함으로써 감지된다. 컨스턴트의 해시 값은 적절한 해싱 동작에 의하여 결정된다(단계 1102). 해시 값이 해시 테이블에 포함되어 있는지의 여부를 결정하기 위하여 체크 동작이 이루어진다(단계 1104). 만약 해시 값이 해시 테이블에 존재하면, 그 컨스턴트는 중복인 것이며 그 엔트리는 현존의 컨스턴트의 메모리 위치를 반영하기 위하여 맵 테이블에 있는 컨스턴트의 엔트리를 변경함으로써 컨스턴트 풀로부터 제거된다(단계 1106). 그렇지 않으면, 그 컨스턴트의 해시 값과 메모리 위치는 해시 테이블에 저장된다(단계1108).
도 8로 다시 돌아가, 오프라인 클래스 로더는 공통의 서브스트링들을 결정하기 위한 단계를 진행한다. 공통의 서브스트링은 이미 컨스턴트 풀에 저장되어 있는 긴 스트링의 일부분으로써 포함되어 있는 것이다. 각 클래스 파일에 대하여(단계 814), 각 스트링 컨스턴트는 그것이 컨스턴트 풀에 저장되어 있는 긴 스트링의 일부분인지의 여부를 결정하기 위하여 스캔된다(단계 816). 이 스캔은 몇몇 잘 알려진 스트링 매칭 알고리즘들 중의 하나를 사용하여 달성될 수 있다. 그런 서브스트링들이 발견되면, 그것은 큰 스트링에 있는 서브스트링의 위치에 대한 포인터와 교체된다(단계 818).
다음으로, 오프라인 클래스 로더는 클래스 파일들의 각각에 포함되어 있는 모든 메소드들의 바이트코드들을 스캔하는 동작을 진행한다(단계 820-824). 도11과 관련하여, 바이트코드들은 인터페이스 명령어를 인보크하기 위하여 검사된다(단계 1202). 인보크 인터페이스 명령어를 가진 메소드는 그런 명령어에 의하여 인보크되는 메소드는 런타임 때까지는 구현되지 아니할 것이므로 RAM 저장장치를 위하여 표시된다(단계 1204). 그렇지 않으면, 바이트코드는 인보크 메소드 명령어를 위하여 검사된다(단계 1206). 이 경우, 인보크될 메소드를 갖고있는 메소드 블록에 대한 포인터 518(도5 참조)은 컨스턴트 풀에 저장된 메소드의 이름에 추가된다(단계 1208). 다음으로, 링커가 모든 클래스들의 메모리 배치를 결정했을 때, 링커는 메소드에 관한 기호적 참조들을 메소드에 관한 직접 주소로 교체한다. 이것은 메소드에 관한 포인터를 가지고 있는 메소드 블록에 대한 메소드의 이름 포인터를 추적함으로써 결정된다.
각 바이트코드가 스캔되었을 때, 바이트코드에 의하여 액세스되는 각 컨스턴트에 대하여 참조 카운트가 이루어진다(단계 828). 참조 카운트는 맵 테이블에 포함되어 있는 별도의 필드이다. 이것은 컨스턴트 풀을 재정리하기 위하여 가장 자주 사용되는 컨스턴트들을 결정하기 위해 나중에 사용될 것이다. 추가적으로, 각 바이트코드는 바이트코드에 의하여 변경된 필드들을 위하여 스캔된다. 이것은 필드가 할당 기술(assignment statement)의 좌측에서 사용된 적이 있는지를 점검함으로써결정될 수 있다. 이 경우, 필드는 새로운 값을 받는다. 만약 변경된 필드가 필드 블록에 저장된 그의 값을 가진 것이라면, 모든 필드 블록은 RAM 저장장치를 위하여 표시된다(단계 830).
일단 공간이 범 컨스턴트 풀을 위하여 할당되면, 다양한 클래스 컨스턴트 풀로부터의 각 엔트리는 범 컨스턴트 풀로 합쳐진다(단계 902). 전에 언급되었듯이, 컨스턴트 풀은 두 개의 세그먼트로 분할된다. 첫 번째 세그먼트는 256개까지의 가장 자주 참조되는 컨스턴트들을 포함한다. 두 번째 세그먼트는 나머지 컨스턴트를 포함한다. 전혀 참조된 적이 없는 컨스턴트들은 제거되며 범 컨스턴트 풀에 저장되지 않는다. 컨스턴트 풀 엔트리들은 각 클래스의 맵 테이블에서 읽혀지는데 맵 테이블이 참조 카운트를 가지고 있고, 중복 엔트리들을 제거했으며, 그리고 공통의 서브 스트링들에 대한 포인터들을 가지고 있기 때문이다.
일단 범 컨스턴트 풀이 형성되면, 범 컨스턴트 풀의 두 번째 세그먼트에 저장된 컨스턴트들을 참조하는 바이트코드들은 두배길이의 오프셋 값을 요구하는데, 그것은 컨스턴트를 참조하기 위하여 하나가 아닌 두 바이트를 차지한다. 이것은 각 클래스의 메소드를 위하여 각 바이트코드를 통한 스캐닝 및 범 컨스턴트 풀의 두 번째 세그먼트에 있는 컨스턴트를 참조하는 각 바이트코드를 위하여, 한 바이트의 오프셋을 컨스턴트의 주소지정을 위하여 두 바이트의 오프셋과 교체하는 것을 요구한다(단계910). 이것은 바이크코드를 저장하기 위한 다른 데이터 영역을 할당함으로써 이루어질 수 있다. 바이트코드가 스캔될 때, 그들은 새로운 데이터 영역으로 읽혀질 수 있고 두 바이트 오프셋들과의 교체를 요구하는 한 바이트 오프셋들은 이복사 절차 중에 교체된다. 그리고는 메소드 블록이 그 바이트코드들을 위한 새로운 저장 위치를 반영하기 위하여 갱신된다. 분기 명령어들을 나타내는 바이트코드를 위한 오프셋 오퍼랜드들은 분기 바이트코드와 분기 목표 바이트코드의 위치 사이에 추가된 (만약 있다면) 바이트들의 수에 맞추어 조절된다.
마찬가지로, 만약 클래스 파일에 있는 메소드의 어떤 것이 컨스턴트 풀의 두 번째 세그먼트에 있는 컨스턴트들을 참조한다면 각 클래스 파일을 위한 예외 테이블은 조정을 요구할 것이다. 컨스턴트 풀의 두 번째 세그먼트에 있는 커느턴트들을 참조하는 조정된 명령어들은 전보다도 더 많은 공간을 차지할 것이며, 그럼으로써 예외 테이블에 있는 오프셋들에 영향을 미칠 것이다. 두 배 길이의 컨스턴트 풀 오프셋들의 삽입에 의해서 영향을 받은 처리기 오프셋들 뿐만 아니라 수정된 시작 및 끝 오프셋들은 계산되어지고 예외 테이블에 저장된다(단계 916-918).
다음으로, 새로운 메소드는 정적 클래스 개시를 처리하기 위해서 만들어진다. 정상적으로, 클래스가 동적으로 로드될 때, 클래스 개시기는 어떤 변수들 및 클래스와 관련된 그와 같은 것들을 개시시키기 위하여 동시에 수행된다. 그 클래스들이 여기에서 설명된 메소드와 시스템에 프리로드 되기 때문에, 클래스 개시기는 수행되지 않는다. 그러므로, 오프라인 클래스 로더는 프리로드된 클래스 로더를 위하여 클래스 개시를 수행할 메소드를 만들어야만 한다. 그러나, 각 클래스 개시기를 수행하기 위한 실행 절차를 결정하기 위해서 데이터 흐름 분석이 가장 먼저 수행된다(단계 920-924). 그 절차는 한 클래스가 다른 클래스에서 개시된 데이터를 활용할 수 있으므로 매우 중요하다. 만약 정확한 절차가 유지되지 않는다면, 정적클래스 개시기는 부정확한 결과를 낳을 것이다. 일단 절차가 결정되면, 프리로드되어야 하는 그 클래스들을 위한 절차에 있는 각 클래스를 개시할 새로운 메소드가 만들어진다(단계 926).
연결 지시자들은 어떤 메소드들과 필드 블록들이 랜덤 액세스 메모리에 저장되어야 하는가를 플래그하기 위하여 클래스 블록 구조들로 삽입된다. 링커는 랜덤 액세스 메모리에 저장되어야 하는 메소드들과 필드 블록들을 위한 분리된 주소 공간을 만들어 내기 위하여 이 정보를 사용한다. 링커는 지시자가 없다는 것이 메서드들과 필드들이 읽기 전용 메모리에 저장되어야 한다는 것을 의미한다고 여길 수 있다. 다른 방법으로는, 부가적인 지시자가 읽기 전용 메모리에 저장되어야 할 그 메소드들, 클래스 데이터 구조들, 그리고 필드들을 명시적으로 나타내기 위해서 사용될 수도 있다(단계 928).
마지막으로, 오프라인 클래스 로더는 범 컨스턴트 풀, 클래스 데이터 구조들을 가지고 있는 갱신된 클래스 파일 그리고 메모리 저장 요구사항들을 특정하는 지시자들, 또한 특별한 부트(boot) 시간 개시기를 만들어 낸다(단계 930).
도 12와 관련하여, 프리로드될 수 있는 실행모듈 및 부트 시간 지시기 1220은 클라이언트 컴퓨터의 읽기 전용 메모리에 영구적으로 저장된다. 클라이언트 컴퓨터가 전원이 인가되거나 리부팅될 때마다, 부트 시간 개시기(1220)는 자동으로 실행된다. 다른 태스크 중에서, 부트 시간 개시기는 실행동안에 랜덤 액세스 메모리에 있어야만 하는 모든 메소드들과 데이터를 링커에 의하여 그들에게 할당된 랜덤 액세스 메모리로 복사한다.
비록, 앞에서 설명한 시스템과 메소드가 자바 브라우저와 관련하여 설명되었고 또 인터넷을 통한 HTML 문서들에 액세스하기 위한 절차를 지원하지만, 여기서 기술된 메소드와 시스템은 어떠한 자바 애플리케이션에도 응용이 가능하다. 더욱이, 자바 애플리케이션은 분산 환경에서 수행될 필요가 없고, 외부 시스템으로부터 새로운 클래스들의 임포팅이 없이 클라이언트 또는 서버 컴퓨터에서 실행되는 스탠드 얼론 모드에서 수행될 수 있다. 스탠드 얼론 모드에서, 애플리케이션은 특별한 컴퓨팅 환경의 메모리 컨스트레인트들을 만족시키기 위하여 두 주소공간으로 나뉘어져 있다.
비록 여기에서 설명된 메소드와 시스템이 자바 프로그래밍 언어와 관련하여 설명되었지만, 클래스들의 동적 런타임 로딩을 활용하는 다른 오브젝트 지향형 클래스들을 사용하는 컴퓨터 시스템에 응용이 가능하다.
더 나아가, 여기 위에서 설명된 메소드와 시스템은 랜덤 액세스 메모리와 같은 메모리 장치가 아닌 다른 실행 가능한 다양한 형태의 매체들 상에서의 실행에 따라 달라질 수 있다. 어떤 메모리 장치가 될 수 있는 컴퓨터가 읽어 들일 수 있는 저장 매체, 컴팩트 디스크, 또는 플로피 디스크 등과 같은 다른 유형의 실행 가능한 매체들(단, 여기에 한정되는 것은 아님)이 사용될 수 있다.
본 발명은 그들의 충분한 균등 영역에 비추어 첨부된 청구범위에 의하여 정의된다.
이 방법에 의한 프리 로드될 수 있는 실행 가능한 모듈은 보조기억장치가 거의 없거나 전혀 없는 클라이언트 컴퓨터를 가지고 있는 분산 컴퓨터 시스템에서 유익하다. 그런 클라이언트 컴퓨터들은 쉽게 제한된 자원으로 될 수 있는 랜덤 액세스 메모리에서 전적으로 실행될 애프리케이션들을 요구한다. 한 애플리케이션을 두 개의 주소 공간으로 할당하기 위한 오프라인 클래스 로더를 활용함으로써, 선 로드될 수 있는 모듈에 의하여 사용된 RAM의 양은 최소화된다.

Claims (20)

  1. 컴퓨터를 운용하는 방법에 있어서,
    클래스를 메모리에 저장하는 단계를 포함하는데, 상기 클래스는 다수의 명령어를 포함하는 적어도 하나의 메소드(method) 및 데이터를 포함하며, 상기 명령어의 서브세트는 컴퓨터 액세스가능 메소드에 대한 기호적 참조를 포함하며;
    상기 클래스의 데이터가 상기 클래스 메소드 중 하나에 의해 수정될 수 있을 때 상기 클래스 데이터의 일부를 플래깅(flagging)하는 단계;
    상기 메모리에 저장되지 않은 메소드에 대한 기호적 참조를 포함하는 상기 클래스의 각 메소드를 플래깅하는 단계; 그리고
    상기 클래스를 포함하는 실행가능 모듈을 제공하는 단계를 포함하며, 플래깅되지 않은 각 메소드 및 플래깅되지 않은 각 데이터는 읽기-전용 저장 매체에 프리로딩(preloading)되며 플래깅된 각 메소드 및 플래깅된 각 데이터는 실행가능한 모듈을 실행할 때 읽기 및 쓰기가능 저장 매체에 저장되는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 메모리에 저장된 특정 메소드에 대한 각 기호적 참조를 상기 읽기 전용 저장 매체의 특정 메소드 위치에 대응하는 값으로 대체하는 단계를 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서, 상기 읽기 전용 저장 매체에 프리로딩된 상기 플래깅되지 않은 메소드 및 데이터는 실행가능 모듈이 실행될 때 읽기 전용 저장 매체로부터 액세스되도록 구성되는 것을 특징으로 하는 방법.
  4. 제 1 항에 있어서, 상기 실행가능한 모듈은 상기 컴퓨터에 저장된 오브젝트(object)뿐만 아니라 다른 컴퓨터에 저장된 오브젝트를 액세스하는 브라우저 모듈인 것을 특징으로 하는 방법.
  5. 제 4 항에 있어서, 상기 브라우저 모듈은 정보-컨텐트(content) 데이터 및 컴퓨터-실행가능 모듈을 임포팅(importing)하고, 상기 임포팅된 데이터 및 컴퓨터 실행가능 모듈을 상기 읽기 및 쓰기 가능 저장 매체에 저장하기 위한 명령어들을 포함하는 것을 특징으로 하는 방법.
  6. 컴퓨터를 운용하는 방법에 있어서,
    실행가능한 모듈에 포함되는 다수의 클래스를 메모리에 저장하는 단계를 포함하는데, 상기 클래스 중 적어도 하나는 다수의 명령어들을 포함하는 적어도 하나의 메소드 및 데이터를 포함하며, 상기 명령어들의 서브세트는 컴퓨터 액세스가능 메소드에 대한 기호적 참조를 포함하며;
    상기 클래스의 데이터가 상기 클래스의 메소드 중 하나에 의해 수정될 수 있을 때각 클래스에 대해 상기 클래스의 데이터를 플래깅(flagging)하는 단계;
    상기 다수의 클래스에서 각 메소드를 플래깅하는 단계를 포함하는데, 상기 클래스의 각 메소드의 바이트코드는 상기 메모리에 저장되지 않은 메소드에 대한 기호적 참조를 포함하며;
    상기 다수의 클래스 각각을 포함하는 상기 실행가능한 모듈을 제공하는 단계를 포함하며, 플래깅되지 않은 각 메소드 및 플래깅되지 않은 각 데이터는 읽기 전용 저장 매체에 프리로딩되며 플래깅된 각 메소드 및 플래깅된 각 데이터는 상기 실행가능한 모듈을 실행할 때 읽기 및 쓰기 가능 저장 매체에 저장되는 것을 특징으로 하는 방법.
  7. 제 6 항에 있어서,
    상기 메모리에 저장된 특정 방법에 대한 각 기호적 참조를 상기 읽기 전용 저장 매체의 상기 특정 메소드의 위치에 대응하는 값으로 대체하는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제 6 항에 있어서, 상기 읽기 전용 저장 매체에 프리로딩된 상기 플래깅되지 않은 메소드 및 상기 플래깅되지 않은 데이터는 상기 실행가능한 모듈이 실행될 때 상기 읽기 전용 저장 매체로부터 액세스되도록 구성되는 것을 특징으로 하는 방법.
  9. 제 6 항에 있어서, 상기 실행가능한 모듈은 상기 컴퓨터에 저장된 오브젝트뿐만 아니라 다른 컴퓨터에 저장된 오브젝트를 액세스하는 브라우저 모듈인 것을 특징으로 하는 방법.
  10. 제 9 항에 있어서, 상기 브라우저 모듈은 정보-컨텐트 데이터 및 컴퓨터-실행가능 모듈을 임포팅하고, 상기 임포팅된 데이터 및 컴퓨터-실행가능 모듈을 상기 읽기 및 쓰기 가능 저장 매체에 저장하기 위한 명령어들을 포함하는 것을 특징으로 하는 방법.
  11. 실행가능한 모듈에 포함되는 클래스를 저장하는 메모리를 포함하는데, 상기 클래스는 다수의 명령어를 포함하는 적어도 하나의 메소드 및 데이터를 포함하며, 상기 명령어의 서브세트는 컴퓨터 액세스가능 메소드에 대한 기호적 참조를 포함하며;
    상기 클래스의 데이터가 상기 클래스 메소드 중 하나에 의해 수정될 수 있을 때 상기 클래스 데이터를 플래깅하고, 바이트코드들이 상기 메모리에 저장되지 않은 메소드에 대한 기호적 참조를 포함하는 상기 클래스의 각 메소드를 플래깅하는 오프라인 클래스 로더; 그리고
    제 1 부분 및 제 2 부분을 갖는 실행가능 모듈을 생성하는 링커(linker)를 포함하며, 상기 제 1 부분은 상기 오프라인 클래스 로더에 의해 플래깅되는 상기 메소드 및 데이터 각각을 포함하며, 상기 제 2 부분은 상기 제 1 부분에 있지 않은 상기 메소드 및 데이터 각각을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  12. 제 11 항에 있어서, 상기 실행가능 모듈의 상기 제 1 부분은 상기 실행가능 모듈이 실행될 때 읽기 및 쓰기 가능 매체에 저장되도록 구성되며, 상기 제 2 부분은 상기 실행가능 모듈이 실행될 때 읽기 전용 저장 매체에 저장되도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  13. 제 12 항에 있어서, 상기 오프라인 클래스 로더는 상기 메모리에 저장된 특정 메소드에 대한 각 기호적 참조를 상기 읽기 전용 저장 매체의 특정 메소드 위치에 대응하는 값으로 대체하는 것을 특징으로 하는 컴퓨터 시스템.
  14. 제 12 항에 있어서, 상기 실행가능 모듈은 상기 컴퓨터에 저장된 오브젝트뿐만 아니라 다른 컴퓨터에 저장된 오브젝트를 액세스하는 브라우저 모듈인 것을 특징으로 하는 컴퓨터 시스템.
  15. 제 14 항에 있어서, 상기 브라우저 모듈은 정보-컨텐트 데이터 및 컴퓨터-실행가능 모듈을 임포팅하고, 상기 임포팅된 데이터 및 컴퓨터-실행가능 모듈을 상기 읽기 및 쓰기 가능 저장 매체에 저장하기 위한 명령어들을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  16. 실행가능 모듈에 포함되는 다수의 클래스를 저장하는 메모리를 포함하는데, 상기 클래스 중 적어도 하나는 다수의 명령어들을 포함하는 적어도 하나의 메소드 및 데이터를 포함하며, 상기 명령어들의 서브세트는 컴퓨터 액세스가능 메소드에 대한 기호적 참조를 포함하며;
    상기 클래스 데이터가 상기 클래스의 메소드 중 하나에 의해 수정될 수 있을 때 상기 다수의 클래스의 각 클래스에 대해 상기 클래스 데이터를 플래깅하고, 바이트코드가 상기 메모리에 저장되지 않는 메소드에 대한 기호적 참조를 포함하는 상기 다수의 클래스의 각 메소드를 플래깅하는 오프라인 클래스 로더;
    제 1 부분 및 제 2 부분을 갖는 실행가능 모듈을 생성하는 링커를 포함하며, 상기 제 1 부분은 상기 오프라인 클래스 로더에 의해 플래깅되는 상기 클래스의 메소드 및 데이터 각각을 포함하며, 상기 제 2 부분은 상기 제 1 부분에 있지 않은 상기 클래스의 메소드 및 데이터 각각을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
  17. 제 16 항에 있어서,
    상기 실행가능 모듈의 상기 제 1 부분은 상기 실행가능 모듈이 실행될 때 읽기 및 쓰기 가능 매체에 저장되도록 구성되며, 상기 제 2 부분은 상기 실행가능 모듈이 실행될 때 읽기 전용 저장 매체에 저장되도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  18. 제 17 항에 있어서, 상기 오프라인 클래스 로더는 상기 메모리에 저장된 특정 메소드에 대한 각 기호적 참조를 상기 읽기 전용 저장 매체의 특정 메소드 위치에 대응하는 값으로 대체하는 것을 특징으로 하는 컴퓨터 시스템.
  19. 제 17 항에 있어서, 상기 실행가능 모듈은 상기 컴퓨터에 저장된 오브젝트뿐만 아니라 다른 컴퓨터에 저장된 오브젝트를 액세스하는 브라우저 모듈인 것을 특징으로 하는 컴퓨터 시스템.
  20. 제 19 항에 있어서, 상기 브라우저 모듈은 정보-컨텐트 데이터 및 컴퓨터-실행가능 모듈을 임포팅하고, 상기 임포팅된 데이터 및 컴퓨터-실행가능 모듈을 상기 읽기 및 쓰기 가능 저장 매체에 저장하기 위한 명령어들을 포함하는 것을 특징으로 하는 컴퓨터 시스템.
KR1019970022986A 1996-05-30 1997-05-30 읽기전용메모리에클래스들을로딩하기위한방법및시스템 KR100450312B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/655,474 1996-05-30
US08/655,474 US5815718A (en) 1996-05-30 1996-05-30 Method and system for loading classes in read-only memory

Publications (2)

Publication Number Publication Date
KR970076313A KR970076313A (ko) 1997-12-12
KR100450312B1 true KR100450312B1 (ko) 2004-12-09

Family

ID=24629025

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019970022986A KR100450312B1 (ko) 1996-05-30 1997-05-30 읽기전용메모리에클래스들을로딩하기위한방법및시스템

Country Status (8)

Country Link
US (4) US5815718A (ko)
EP (2) EP0810522B1 (ko)
JP (1) JP4021520B2 (ko)
KR (1) KR100450312B1 (ko)
CN (1) CN1114155C (ko)
DE (2) DE69707752T2 (ko)
SG (1) SG76513A1 (ko)
TW (1) TW363167B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10866817B2 (en) 2016-03-14 2020-12-15 Samsung Electronics Co.. Ltd. Computing system, and driving method and compiling method thereof

Families Citing this family (155)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US6473768B1 (en) * 1996-11-12 2002-10-29 Computer Associates Think, Inc. System and method for modifying an executing application
US6003038A (en) * 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method
US5974428A (en) * 1997-08-29 1999-10-26 International Business Machines Corporation Method and apparatus for class version naming and mapping
US5966702A (en) * 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6026237A (en) * 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files
US5953526A (en) * 1997-11-10 1999-09-14 Internatinal Business Machines Corp. Object oriented programming system with displayable natural language documentation through dual translation of program source code
US5995975A (en) * 1997-11-25 1999-11-30 International Business Machines Corporation Dictionary based process for object containment
US6272673B1 (en) * 1997-11-25 2001-08-07 Alphablox Corporation Mechanism for automatically establishing connections between executable components of a hypertext-based application
US6349344B1 (en) * 1997-12-16 2002-02-19 Microsoft Corporation Combining multiple java class files into a run-time image
DE19810675A1 (de) * 1998-03-12 1999-10-14 Giesecke & Devrient Gmbh Datenträger
US6199196B1 (en) * 1998-03-20 2001-03-06 Sun Microsystems, Inc. Methods and apparatus for linking a program for remote execution
US6658492B1 (en) * 1998-03-20 2003-12-02 Sun Microsystems, Inc. System and method for reducing the footprint of preloaded classes
US6493870B1 (en) * 1998-03-20 2002-12-10 Sun Microsystems, Inc. Methods and apparatus for packaging a program for remote execution
DE69814174T2 (de) * 1998-03-23 2004-03-04 International Business Machines Corp. Java laufzeitsystem mit veränderter sammlung von konstanten
US6061520A (en) * 1998-04-07 2000-05-09 Sun Microsystems, Inc. Method and system for performing static initialization
US7089331B1 (en) * 1998-05-29 2006-08-08 Oracle International Corporation Method and mechanism for reducing client-side memory footprint of transmitted data
JP4026940B2 (ja) * 1998-07-22 2007-12-26 松下電器産業株式会社 プログラム変換装置
US6374266B1 (en) * 1998-07-28 2002-04-16 Ralph Shnelvar Method and apparatus for storing information in a data processing system
US6430569B1 (en) * 1998-08-14 2002-08-06 Sun Microsystems, Inc. Methods and apparatus for type safe, lazy, user-defined class loading
US7143421B2 (en) * 1998-09-09 2006-11-28 Microsoft Corporation Highly componentized system architecture with a demand-loading namespace and programming model
US8434099B2 (en) 1998-09-09 2013-04-30 Microsoft Corporation Efficient linking and loading for late binding and platform retargeting
US6446084B1 (en) 1998-09-22 2002-09-03 Sun Microsystems, Inc. Optimizing symbol table lookups in platform-independent virtual machines
US6631515B1 (en) 1998-09-24 2003-10-07 International Business Machines Corporation Method and apparatus to reduce code size and runtime in a Java environment
JP2000122876A (ja) * 1998-10-16 2000-04-28 Matsushita Electric Ind Co Ltd 情報処理装置
GB2343021A (en) * 1998-10-19 2000-04-26 Ibm Class loading model for object oriented programming
JP2000148503A (ja) * 1998-11-10 2000-05-30 Mitsubishi Electric Corp 動的モジュール構成方式及び動的モジュール構成方法及びデバイス
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
CA2255042C (en) * 1998-11-30 2004-04-13 Leonard W. Theivendra Class loader
US6305012B1 (en) * 1998-12-03 2001-10-16 International Business Machines Corporation Method and apparatus for dynamic selection of instructions for compiling using tags
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
US6338160B1 (en) * 1998-12-08 2002-01-08 Nazomi Communications, Inc. Constant pool reference resolution method
US6624761B2 (en) 1998-12-11 2003-09-23 Realtime Data, Llc Content independent data compression method and system
US6848111B1 (en) * 1999-02-02 2005-01-25 Sun Microsystems, Inc. Zero overhead exception handling
US6637023B1 (en) 1999-03-03 2003-10-21 Microsoft Corporation Method and system for updating read-only software modules
US7195661B2 (en) * 1999-03-05 2007-03-27 Pioneer Metals And Technology, Inc. Magnetic material
US6601104B1 (en) 1999-03-11 2003-07-29 Realtime Data Llc System and methods for accelerated data storage and retrieval
CA2267539C (en) * 1999-03-30 2004-04-13 Object Technology International Inc. Access to resource files stored in rom
US6845498B1 (en) * 1999-05-11 2005-01-18 Microsoft Corporation Method and apparatus for sharing data files among run time environment applets in an integrated circuit card
US6618769B1 (en) * 1999-05-27 2003-09-09 Sun Microsystems, Inc. Module-by-module verification
US6763397B1 (en) 1999-05-27 2004-07-13 Sun Microsystems, Inc. Fully lazy linking
US6766521B1 (en) 1999-05-27 2004-07-20 Sun Microsystems, Inc. Dataflow algorithm for symbolic computation of lowest upper bound type
US6601114B1 (en) * 1999-05-27 2003-07-29 Sun Microsystems, Inc. Fully lazy linking with module-by-module verification
JP3531536B2 (ja) * 1999-05-28 2004-05-31 日本電気株式会社 抽象構文記法を用いたデータ構造定義における型情報の動的割り当て方法
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US6968549B1 (en) * 1999-07-02 2005-11-22 Beryl Technical Assays Llc Method and system for dynamically loading data structures into memory with global constant pool
US6460136B1 (en) * 1999-07-12 2002-10-01 Hewlett-Packard Co., Method and apparatus for loading an operating system kernel from a shared disk memory
US6701334B1 (en) * 1999-07-13 2004-03-02 Sun Microsystems, Inc. Methods and apparatus for implementing individual class loaders
US7257812B1 (en) 1999-12-16 2007-08-14 Sun Microsystems, Inc. Methods and apparatus for managing an application
US6874145B1 (en) 1999-07-13 2005-03-29 Sun Microsystems, Inc. Methods and apparatus for implementing an application lifecycle design for applications
US6584612B1 (en) * 1999-07-15 2003-06-24 International Business Machines Corporation Transparent loading of resources from read-only memory for an application program
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US7076788B1 (en) * 1999-11-01 2006-07-11 Nokia Networks Oy Method for describing software architecture
US20010042241A1 (en) * 2000-01-21 2001-11-15 Fujitsu Limited Apparatus and method for executing program using just-in time-compiler system
WO2001057649A2 (en) * 2000-02-07 2001-08-09 Insignia Solutions Plc Global constant pool to allow deletion of constant pool entries
EP1128263B1 (en) * 2000-02-21 2010-05-19 Panasonic Corporation Linking of Java class files for embedded devices
US6813762B1 (en) * 2000-02-22 2004-11-02 Freescale Semiconductor, Inc. Method for processing program files in a programming language capable of dynamic loading
US7389284B1 (en) 2000-02-29 2008-06-17 Oracle International Corporation Method and mechanism for efficient processing of remote-mapped queries
US6865730B1 (en) * 2000-03-08 2005-03-08 International Business Machines Corporation Interprocedural analysis and optimization of an object oriented program in the presence of dynamic class loading
US6745386B1 (en) * 2000-03-09 2004-06-01 Sun Microsystems, Inc. System and method for preloading classes in a data processing device that does not have a virtual memory manager
JP2001256058A (ja) * 2000-03-13 2001-09-21 Omron Corp インタプリタ型言語によるプログラムの実行方法およびその方法を用いた情報処理装置
JP2003528390A (ja) * 2000-03-20 2003-09-24 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ インタプリタによりコンピュータプログラムを実行する方法、コンピュータシステムならびにコンピュータプログラムプロダクト
US20020087958A1 (en) * 2000-04-20 2002-07-04 International Business Machines Corporation Method and apparatus of transforming a class
US6675375B1 (en) * 2000-04-28 2004-01-06 Sun Microsystems, Inc. Method and apparatus for optimized multiprocessing in a safe language
WO2001097013A2 (fr) * 2000-06-15 2001-12-20 Canal + Technologies Procede de gestion de classes pour un langage de programmation oriente objet a resolution dynamique et outil de generation des structures natives depuis les binaires java mettant en oeuvre ce procede
US6918106B1 (en) * 2000-07-31 2005-07-12 Sun Microsystems, Inc. Method and apparatus for collocating dynamically loaded program files
AU2001292555A1 (en) * 2000-08-18 2002-03-04 United States Postal Service Apparatus and methods for the secure transfer of electronic data
WO2002017262A2 (en) 2000-08-21 2002-02-28 United States Postal Services Delivery point validation system
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
US9143546B2 (en) 2000-10-03 2015-09-22 Realtime Data Llc System and method for data feed acceleration and encryption
US8692695B2 (en) 2000-10-03 2014-04-08 Realtime Data, Llc Methods for encoding and decoding data
US6968540B2 (en) * 2000-10-25 2005-11-22 Opnet Technologies Inc. Software instrumentation method and apparatus
US6978456B1 (en) * 2000-10-31 2005-12-20 Sun Microsystems, Inc. Methods and apparatus for numeric constant value inlining in virtual machines
US6901591B1 (en) * 2000-10-31 2005-05-31 Sun Microsystems, Inc. Frameworks for invoking methods in virtual machines
US6996813B1 (en) 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
EP1207454A1 (en) * 2000-11-15 2002-05-22 International Business Machines Corporation Java run-time system with modified linking identifiers
WO2002048864A2 (en) * 2000-11-20 2002-06-20 Zucotto Wireless, Inc. System registers for an object-oriented processor
US7107537B2 (en) 2001-01-16 2006-09-12 Hewlett-Packard Development Company, L.P. Apparatus and method for updating applications to embedded devices and peripherals within a network environment
US7386046B2 (en) 2001-02-13 2008-06-10 Realtime Data Llc Bandwidth sensitive data compression and decompression
US20020170047A1 (en) * 2001-02-23 2002-11-14 Brian Swetland System and method for transforming object code
EP1374046B1 (en) * 2001-02-23 2012-02-22 Microsoft Corporation System and method for transforming object code
US7080373B2 (en) * 2001-03-07 2006-07-18 Freescale Semiconductor, Inc. Method and device for creating and using pre-internalized program files
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) * 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US6957428B2 (en) * 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
DE60237718D1 (de) * 2001-05-30 2010-10-28 Research In Motion Ltd System zur verarbeitung einer anwendung für ein mobiles kommunikationsgerät
US6748396B2 (en) 2001-06-01 2004-06-08 International Business Machines Corporation Independent class loader for dynamic class loading
US6901589B2 (en) * 2001-06-25 2005-05-31 Wind River Systems, Inc. System and method for determining a root cause of a failure
US7076695B2 (en) * 2001-07-20 2006-07-11 Opnet Technologies, Inc. System and methods for adaptive threshold determination for performance metrics
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US7103590B1 (en) * 2001-08-24 2006-09-05 Oracle International Corporation Method and system for pipelined database table functions
US7058934B2 (en) * 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
US7219034B2 (en) 2001-09-13 2007-05-15 Opnet Technologies, Inc. System and methods for display of time-series data distribution
US7213240B2 (en) * 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
US6976254B2 (en) 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
EP1324221A3 (en) * 2001-12-21 2003-12-03 Sap Ag Storing data objects either in database or in archive
US7114152B2 (en) * 2002-01-08 2006-09-26 International Business Machines Corporation Method, apparatus, and program to determine the mutability of an object at loading time
US7664731B2 (en) * 2002-03-21 2010-02-16 United States Postal Service Method and system for storing and retrieving data using hash-accessed multiple data stores
US7587408B2 (en) * 2002-03-21 2009-09-08 United States Postal Service Method and system for storing and retrieving data using hash-accessed multiple data stores
US7272827B2 (en) * 2002-04-03 2007-09-18 International Business Machines Corporation Statically detecting externally referenced interfaces of a program
US6973457B1 (en) 2002-05-10 2005-12-06 Oracle International Corporation Method and system for scrollable cursors
US7610351B1 (en) 2002-05-10 2009-10-27 Oracle International Corporation Method and mechanism for pipelined prefetching
US7246347B1 (en) * 2002-06-26 2007-07-17 Sun Microsystems, Inc Method and apparatus for loading class files into non-volatile memory
JP2006520493A (ja) * 2002-09-06 2006-09-07 ユナイテッド ステイツ ポスタル サービス 安全な事前処理が施されたアクセス情報により、保護されているデータを効率的に検索する方法及びシステム
US7159119B2 (en) * 2002-09-06 2007-01-02 United States Postal Service Method and system for efficiently retrieving secured data by securely pre-processing provided access information
US7051323B2 (en) * 2002-10-08 2006-05-23 Sun Microsystems, Inc. Method and apparatus for initializing romized system classes at virtual machine build time
US7093243B2 (en) * 2002-10-09 2006-08-15 International Business Machines Corporation Software mechanism for efficient compiling and loading of java server pages (JSPs)
US7055145B2 (en) * 2002-10-30 2006-05-30 Intel Corporation Dynamic management of execute in place applications
US20040123270A1 (en) * 2002-12-23 2004-06-24 Motorola, Inc. Method and apparatus for shared libraries on mobile devices
KR100493893B1 (ko) * 2003-02-07 2005-06-10 삼성전자주식회사 자바 프로그램에서 클래스 로딩 과정을 단축시키는 시스템및 방법
US7073171B2 (en) * 2003-02-28 2006-07-04 Bea Systems, Inc. EJB implementation class loading with removed dependencies with ability to replace EJB implementation class without full redeployment
DE10310290A1 (de) * 2003-03-10 2004-09-23 Robert Bosch Gmbh Rechenvorrichtung
US7143398B2 (en) * 2003-03-13 2006-11-28 Che-An Chang Application infa operating system
US7328432B2 (en) * 2003-06-02 2008-02-05 Sun Microsystems, Inc. Proximity-based addressing for supporting in-place execution in virtual machines
US7411956B2 (en) * 2003-06-05 2008-08-12 International Business Machines Corporation Methods and apparatus for routing packets
US7248895B2 (en) * 2003-06-12 2007-07-24 Nokia Corporation Controlling settings for mobile telecommunications apparatus
FR2862395B1 (fr) * 2003-11-14 2006-12-15 Trusted Logic Procede pour l'amelioration de l'efficacite et de la consommation memoire d'un systeme informatique
US20050261857A1 (en) * 2004-05-21 2005-11-24 Clark Jones System and method for linking and loading compiled pattern data
WO2005114491A2 (en) * 2004-05-21 2005-12-01 Computer Associates Think, Inc. Structure of an alternate evaluator for directory operations
US7574705B2 (en) * 2004-06-29 2009-08-11 Sun Microsystems, Inc. Method and apparatus for efficiently resolving symbolic references in a virtual machine
KR100597413B1 (ko) * 2004-09-24 2006-07-05 삼성전자주식회사 자바 바이트코드 변환 방법 및 상기 변환을 수행하는 자바인터프리터
US20060075394A1 (en) * 2004-10-01 2006-04-06 Tatsuya Iwamoto Dynamic loading and unloading for processing unit
US7444629B2 (en) * 2004-11-12 2008-10-28 International Business Machines Corporation Autonomic self-healing of java resources
US20060123397A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US7801925B2 (en) 2004-12-22 2010-09-21 United States Postal Service System and method for electronically processing address information
FR2883390A1 (fr) * 2005-03-15 2006-09-22 Gemplus Sa Gestion du placement de structure de donnees en memoire basee sur une langage de programmation dedie
US8165909B2 (en) 2005-05-17 2012-04-24 The United States Postal Service System and method for automated management of an address database
US20060288336A1 (en) * 2005-06-21 2006-12-21 Microsoft Corporation Module initialization
US7698685B2 (en) * 2005-10-12 2010-04-13 Microsoft Corporation Discovery, qualification, and activation of software add-in components
US8042103B2 (en) * 2005-11-29 2011-10-18 International Business Machines Corporation Pre-translated files used in a virtual machine
US20070169028A1 (en) * 2005-12-15 2007-07-19 Glenn Kasten Partitioning of non-volatile memories for vectorization
US7873952B2 (en) * 2006-03-09 2011-01-18 Oracle America, Inc. Code transformation to optimize fragments that implement constant loading
US8250559B2 (en) * 2006-04-12 2012-08-21 Oracle America, Inc. Supporting per-program classpaths with class sharing in a multi-tasking virtual machine
US7882198B2 (en) 2007-07-02 2011-02-01 Oracle America, Inc. Shared JAVA JAR files
US20090070752A1 (en) * 2007-09-06 2009-03-12 International Business Machines Corporation Method and system for optimization of an application
US8719196B2 (en) 2011-12-19 2014-05-06 Go Daddy Operating Company, LLC Methods for monitoring computer resources using a first and second matrix, and a feature relationship tree
US8600915B2 (en) 2011-12-19 2013-12-03 Go Daddy Operating Company, LLC Systems for monitoring computer resources
US9507613B2 (en) * 2012-03-30 2016-11-29 Oracle International Corporation Methods and apparatus for dynamically preloading classes
US8910138B2 (en) 2012-05-23 2014-12-09 Oracle International Corporation Hot pluggable extensions for access management system
US9383448B2 (en) 2012-07-05 2016-07-05 Deca System Co., Ltd. Golf GPS device with automatic hole recognition and playing hole selection
US9952879B2 (en) * 2012-08-30 2018-04-24 Microsoft Technology Licensing, Llc Application pre-layout in byte-addressable persistent random access memory
US9740500B2 (en) * 2012-08-30 2017-08-22 Microsoft Technology Licensing, Llc Layout system for operating systems using BPRAM
US8938796B2 (en) 2012-09-20 2015-01-20 Paul Case, SR. Case secure computer architecture
CN103473089A (zh) * 2013-09-02 2013-12-25 深圳市华傲数据技术有限公司 一种分布式java程序运行方法、装置和系统
US10217254B2 (en) 2015-09-24 2019-02-26 Oracle International Corporation Graphical editing of memory layout rules for software programs
US10489130B2 (en) * 2015-09-24 2019-11-26 Oracle International Corporation Configurable memory layouts for software programs
US10127136B2 (en) 2015-09-24 2018-11-13 Oracle International Corporation Identifying and visualizing suboptimal memory layouts in software programs
US10394528B2 (en) * 2016-03-30 2019-08-27 Oracle International Corporation Returning a runtime type loaded from an archive in a module system
US10191753B2 (en) 2016-03-30 2019-01-29 Oracle International Corporation Generating verification metadata and verifying a runtime type based on verification metadata
CN112559073A (zh) * 2020-12-16 2021-03-26 北京百度网讯科技有限公司 程序启动方法、类间关系构建方法及装置、移动终端
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication
CN117234590B (zh) * 2023-08-02 2024-03-29 北京握奇数据股份有限公司 指令集生成方法、装置、介质及设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5051893A (en) * 1988-07-11 1991-09-24 Digital Equipment Corporation System for processing data to facilitate the creation of executable images
US5355489A (en) * 1989-08-25 1994-10-11 International Business Machines Corp. Bios load for a personal computer system having a removable processor card
DE69031936T2 (de) * 1989-11-17 1998-06-10 Digital Equipment Corp System und Verfahren zur Speicherung von Firmware in einem adressunabhängigen Format
GB2242293A (en) * 1990-01-05 1991-09-25 Apple Computer Apparatus and method for dynamic linking of computer software components
US5594903A (en) * 1991-02-26 1997-01-14 Lynx Real-Time Systems, Inc. Operating System architecture with reserved memory space resident program code identified in file system name space
FR2675602B1 (fr) * 1991-04-16 1995-04-14 Hewlett Packard Co Procede et dispositif de protection d'un systeme informatique.
US5369766A (en) * 1993-03-25 1994-11-29 Taligent, Inc. Object-oriented loader system with support for different load formats
US5450489A (en) * 1993-10-29 1995-09-12 Time Warner Entertainment Co., L.P. System and method for authenticating software carriers
US5574915A (en) * 1993-12-21 1996-11-12 Taligent Object-oriented booting framework
JPH07311752A (ja) * 1994-05-11 1995-11-28 Internatl Business Mach Corp <Ibm> 分散データ処理システム及び初期プログラムロード方法
US5613120A (en) * 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US5671413A (en) * 1994-10-31 1997-09-23 Intel Corporation Method and apparatus for providing basic input/output services in a computer
US5664128A (en) * 1995-02-23 1997-09-02 Apple Computer, Inc. Object storage apparatus for use with data sets in computer applications
JP3234850B2 (ja) * 1995-03-20 2001-12-04 アルプス電気株式会社 記録再生装置の立ち上げ方法
US5815718A (en) * 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10866817B2 (en) 2016-03-14 2020-12-15 Samsung Electronics Co.. Ltd. Computing system, and driving method and compiling method thereof

Also Published As

Publication number Publication date
EP1098247B1 (en) 2008-02-06
US7159213B2 (en) 2007-01-02
US20010047513A1 (en) 2001-11-29
US5966542A (en) 1999-10-12
JPH10198570A (ja) 1998-07-31
EP0810522A3 (en) 1998-04-15
DE69738504D1 (de) 2008-03-20
DE69707752T2 (de) 2002-08-01
SG76513A1 (en) 2000-11-21
JP4021520B2 (ja) 2007-12-12
CN1172303A (zh) 1998-02-04
EP1098247A2 (en) 2001-05-09
US6223346B1 (en) 2001-04-24
DE69707752D1 (de) 2001-12-06
TW363167B (en) 1999-07-01
CN1114155C (zh) 2003-07-09
EP1098247A3 (en) 2004-11-03
US5815718A (en) 1998-09-29
EP0810522A2 (en) 1997-12-03
EP0810522B1 (en) 2001-10-31
KR970076313A (ko) 1997-12-12

Similar Documents

Publication Publication Date Title
KR100450312B1 (ko) 읽기전용메모리에클래스들을로딩하기위한방법및시스템
US7793272B2 (en) Method and apparatus for combined execution of native code and target code during program code conversion
US6654954B1 (en) Computer system, program product and method utilizing executable file with alternate program code attached as a file attribute
US11347489B2 (en) Accessing a migrated member in an updated type
EP1214645B1 (en) Method and system for distributing object-oriented computer programs
US20080005719A1 (en) Methods, systems, and computer program products for providing a program execution environment
JP2000047874A (ja) プレロ―ドクラスのフットプリント低減装置及び方法
US20080005728A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment
US10789047B2 (en) Returning a runtime type loaded from an archive in a module system
US10417024B2 (en) Generating verification metadata and verifying a runtime type based on verification metadata
US20080022265A1 (en) Methods, systems, and computer program products for generating and using object modules
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
US8606766B2 (en) Method and system to handle java class versioning
US10387142B2 (en) Using annotation processors defined by modules with annotation processors defined by non-module code
EP1889158B1 (en) Method and apparatus for combined execution of native code and target code during program code conversion
US11030097B2 (en) Verifying the validity of a transition from a current tail template to a new tail template for a fused object
US11243876B2 (en) Techniques for accessing off-heap memory
Schoettner et al. Linking and Loading in a Persistent DSM Operating System “
Chamberlain Using ld
Griswold et al. Configuring the Source Code for Version 8.10 of Icon
Townsend et al. Configuring the Source Code for Version 9 of Icon
Kutter A run-time linking environment to enable dynamic compilation

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120821

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20130820

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20150819

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20160818

Year of fee payment: 13