KR20010006750A - 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법 - Google Patents

호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법 Download PDF

Info

Publication number
KR20010006750A
KR20010006750A KR1020000011446A KR20000011446A KR20010006750A KR 20010006750 A KR20010006750 A KR 20010006750A KR 1020000011446 A KR1020000011446 A KR 1020000011446A KR 20000011446 A KR20000011446 A KR 20000011446A KR 20010006750 A KR20010006750 A KR 20010006750A
Authority
KR
South Korea
Prior art keywords
package
call
class
targets
belong
Prior art date
Application number
KR1020000011446A
Other languages
English (en)
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 KR20010006750A publication Critical patent/KR20010006750A/ko

Links

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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • 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
    • G06F9/4491Optimising based on receiver type

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 발명은 호출의 타겟(target)이 그 내부에 속한다고 보증된 자바 패키지(Java package) 내의 호출을 식별하는 방법 및 시스템에 관한 것이다. 본 발명의 방법에 따르면, 패키지 내의 각 구성 요소에 대한 접근 허가 및 상속 그래프(inherent graph)를 결정하여, 패키지가 밀봉[seal] 및 서명[sign]되었다는 사실과 함께 상기 접근 허가 및 상속 그래프를 사용함으로써 호출의 모든 타겟이 그 패키지에 속한다고 보증되는지의 여부를 판단한다. 본 발명에 따른 호출의 식별 작업은 패키지가 밀봉 및 서명될 때 또는 별도의 단계로 수행될 수 있으며, 보다 나은 컴파일러 최적화를 가능하게 한다.

Description

호출의 타겟이 동일한 패키지에 속한다고 보증된 자바 패키지 내의 호출을 식별하는 방법{METHOD FOR IDENTIFYING CALLS IN JAVA PACKAGES WHOSE TARGETS ARE GUARANTEED TO BELONG TO THE SAME PACKAGE}
본 발명은 자바 프로그램 모듈(Java program modules)의 프로그램 분석 및 최적화에 관한 것이다.
프로그램의 실행 시간은 하드웨어 자원을 보다 효과적으로 이용하기 위한 코드 및 컴파일러(compiler) 최적화를 이용함으로써 상당히 감소될 수 있다. 다수의 짧은 프로시져(procedure)를 포함하는 프로그램에 있어서, 효과적인 코드를 얻기 위해서는 많은 객체 지향(object-oriented) 프로그램에서 행해지는 프로시져간 최적화(inter-procedural optimization)가 요구된다. 가장 적절한 프로시져간 최적화는 인라인(inline) 함수를 사용하는 것인데, 이는 호출로 인한 오버헤드(overhead)를 감소시키고 최적화의 기회를 증가시킴으로써 성능을 향상시킬 수 있다. 그러나, 이러한 프로시져간 최적화는 객체 지향 프로그램의 가상 호출에 의해 제한된다. 따라서, 이러한 프로그램에 있어서는 종종 "호출의 반가상화(反假像化)(call devirtualization)"라고 불르고 있는 가상 호출의 잠재적인 타겟을 식별하는 능력이 중요하며, 최근들어 많은 관심이 집중되고 있다.
자바 프로그래밍 언어 및 실행 시간 환경은 이러한 반가상화를 위한 새로운 시도를 하고 있다. 실제로, 자바 내의 가상 호출의 모든 가능한 타겟을 미리 식별하는 것은 불가능하다. 예상치 못한 추가적인 타겟을 포함하는 새로운 클래스(class)가 언제든지 로드(load)될 수 있다. 가상 호출의 가능한 타겟을 모두 결정하기 위해서는 복잡한 형태의 분석이 요구될 것이다. 이러한 잠재적인 타겟 식별의 불확실성은 프로시져간 최적화의 수행 능력을 크게 제한한다. 이러한 최적화를 위해서는 사용자가 동적으로 로드될 수 있는 모든 클래스 및 인터페이스(interface)를 특정해야 하거나, 또는 실제 타겟이 무엇인지를 반복적으로 검사하여 예상치 못한 타겟에 대한 디폴트 동작(default action)을 준비해야 할 것이다. 그렇지 않으면, 최적화가 무용지물이 될 위험이 있으며, 이 경우 최적화를 취소하기 위한 특별한 기법이 요구된다. 이러한 기법은 데이비드 그리스올드(David Griswold)의 "Java™ HotSpot™ 가상 머신의 구조(The Java™ HotSpot™ Virtual Machine Architecture)"[1998년 3월, 썬 마이크로시스템즈(Sun Microsystems) 발행, http://java.sun.com:81/products/hotspot/whitepaper.html에서 백서로 입수 가능함]에 기재되어 있다.
C++과 같은 통상적인 객체 지향 언어에 있어서는, 가상 호출의 가능한 타겟의 세트를 쉽게 결정할 수 있거나, 최소한 대략적으로 추산할 수 있다. 이는 프로그램에 의해 사용될 수 있는 모든 클래스를 컴파일시에 결정하여 알 수 있기 때문이다. 주어진 메소드에 대한 호출은 그 메소드의 임의의 오버라이딩의 구현(overriding implementation)을 잠재적으로 겨냥할 수 있다. 따라서, 호출의 타겟에 대한 간단한 근사는 호출된 메소드의 모든 오버라이딩의 구현 세트이다. 이 세트는 호출된 클래스에 근원을 둔 상속 트리(inheritance tree)를 스캔함으로써 효과적으로 구성될 수 있다. 최근 들어, 가상 호출의 가능한 타겟의 세트를 세분하여 모든 오버라이딩의 구현 세트의 서브세트를 생성하는 여러 기술들이 개발되었다. 잠재적인 타겟의 후보일 때부터 프로그램의 실행 도중에 결코 호출되지 않을 것이라고 보증된 "비활성[dead] 메소드의 구현"을 회피하기 위한 동적[liveness] 분석의 사용이 알려져 있다. 이러한 모든 기술은 실행 시간에서 참조될 수 있고 분석 시간에서 고정 및 사용 가능해질 수 있는 모든 관련 클래스를 가진다고 가정한다.
그러나, 자바 프로그램에 대해서는, 일반적으로 어느 클래스가 실제로 관여하게 될 지를 미리 안다는 것은 불가능하다. 특정 클래스 파일은 실행 시간 도중에서만 그 클래스가 최초로 참조될 때에 위치 설정되어 로드된다. 이때까지는, 클래스 파일 자체 또는 기타 파라미터(예컨대, CLASSPATH 환경 변수)에 대한 임의의 변경이 로드될 클래스에 영향을 미칠 수 있다. 이러한 동적 동작은 클래스간(inter-class) 분석 수행 능력을 제한하며, 특히 가상 호출의 가능한 타겟의 결정을 제한한다. 가상 호출의 잠재적인 타겟에 관하여, 자바 및 기타 객체 지향 언어간에는 또 다른 차이점이 있다. 기타 언어와 달리 자바에 있어서는 가상 호출이, 그 클래스가 호출된 인터페이스를 구현하지 않는 오버라이딩의 구현에 도달하는 것이 가능하다. 그러나, 자바 메소드를 포함하는 인터페이스 또는 클래스의 서브클래스를 스캔하거나, 종종 이러한 서브클래스의 슈퍼클래스(superclass)를 검사함으로써, 자바 메소드의 모든 오버라이딩의 구현을 찾는 것도 가능하다.
자바의 이러한 동적 특성에 대처하고, 또한 클래스간 분석 및 최적화를 가능하게 하기 위하여, 최근 두 가지 주요 기법이 사용된다. 첫번째 기법은 모든 관련 클래스가 사용자에 의해 제공된다고 가정하고, 통상의 정적인 기술로 복귀하는 것이다. 이러한 기법은 인스탄티에이션즈사(Instantiations, Inc.)에 의해 전체 "밀봉된" 자바 애플리케이션(application)을 분석하고 컴파일하는 JOVE™에서 채택되었다(http://www.instantiations.com/jove/jovereport.htm).
이러한 기법의 주요 단점은 예측되지 않은 클래스 또는 인터페이스를 실행 시간에서 동적으로 로드할 수 있는 동적 애플리케이션에 적용할 수 없다는 것이다.
두번째 기법은 새로운 클래스가 실행 시간에서 나타날 수 있다고 가정하고, 사용되지 않는 분석을 검출하여 이러한 분석을 기초로 한 최적화를 "취소[undo]"하는 메커니즘을 준비하는 것이다. 최적화된 코드가 진입된 후에는 최적화를 "취소"하는 것이 통상적으로 불가능하며, 따라서 특정 메소드 내로 코드를 인라이닝(inlining)할 때 예측되지 않은 타겟을 처리하기 위해서는 일정한 디폴트 동작이 제공되어야만 한다. 이러한 기법은 전술한 핫스팟(hotspot)에 의해 사용되고 있다. 이 기법의 주요 단점은 이러한 추가적인 메커니즘과 종종 예측되지 않은 타겟을 검출하여 처리해야 하는 요구에 의한 실행 시간의 오버헤드이다.
초기 최적화가 완전[self-contained]하여 실행 시간 동안 쓸모 없게 되지 않을 것이라는 것을 보장함으로써, 이러한 후 컴파일(post-compilation)을 피하는 것이 좋다. 그러나, 이는 특정 호출이 실행 시간 이전에 잠재적인 타겟의 세트가 완전히 그리고 명백히 결정될 수 있는 "밀봉된 호출"로 적절히 식별될 수 있을 때에만 달성될 수 있다.
따라서, 본 발명의 목적은 자바 패키지 내에서 호출의 타겟이 동일한 패키지에 속한다고 보증되는 호출을 식별하는 방법을 제공하는 것이다.
본 발명에 따르면, 호출의 타겟이 그 내부에 속한다고 보증되는 자바 밀봉 패키지 내의 호출을 식별하는 방법에 있어서,
(1) 패키지가 밀봉 및 서명되었음을 검증하는 단계와,
(2) 상기 패키지의 클래스 및 인터페이스에 대한 클래스 계층 그래프(class hierarchy graph; CHG)를 구하는 단계와,
(3) 상기 패키지 내의 개별적인 구성 요소에 대한 접근 허가를 구하는 단계 와,
(4) 상기 패키지가 밀봉 및 서명되었다는 사실과 함께 상기 클래스 계층 그래프 및 접근 허가를 사용하여, 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되는지의 여부를 판단하는 단계 를 포함한다.
본 발명은 JDK(Java Development Kit) 버젼 1.2의 패키지가 밀봉되는 것을 가능하게 하는 기능을 사용한다. 본 발명에서는 주로 한층 높은 보안을 제공하는 이러한 기능을 사용함으로써, 호출이 밀봉 및 서명된 자바 패키지 내부에 있고 그 호출의 모든 타겟이 그 패키지에 속한다고 보증되는 경우에 그 호출을 소위 "밀봉된 호출"로 식별한다.
밀봉된 호출 및 그 잠재적인 타겟의 식별은 적극적인 프로시져간[패키지내(intra-package)] 최적화를 용이하게 한다. 특히, 밀봉된 호출이 하나의 잠재적인 타겟만을 가진 경우, 이는 안전하게 인라이닝될 수 있다. 이러한 최적화는 JIT(Just-In-Time) 컴파일러의 내부에서나, 표준 컴파일 시간(실행 시간 이전) 컴파일러의 내부, 또는 바이트 코드 변환 단계에서 발생할 수 있다.
본 발명에 따르면, 특정 시나리오가 식별되는데, 이때 전체 프로그램에 대한 가정 또는 제한 없이도, 그리고 쓸모없게 되거나 실행 시간 오버헤드를 부가할 염려 없이도 정적 분석이 안전하게 적용될 수 있다. 본 발명에 따른 방법을 적용 가능한 경우에 이용할 수 있으며, 임의의 선행 기술을 사용할 수 있다.
도 1a 및 도 1b는 본 발명에 따른 방법의 주요 동작 단계를 도시한 흐름도.
도 2, 도 3 및 도 4는 패키지 내의 각 메소드(method)에 부과된 접근 제한을 판단하기 위하여 본 발명에서 다루어지는 상속 시나리오를 도시한 도면.
도 5a, 도 5b, 도 6a, 도 6b 및 도 7은 본 발명과 연관된 다양한 소프트웨어 알고리즘을 구현하기 위한 상세한 코드.
도 8은 본 발명에 따른 "밀봉된 호출(sealed calls)"을 식별하는 시스템의 기능적인 블록도.
[도면의 주요 부분에 대한 부호의 설명]
10, 20, 30: 밀봉된 패키지의 상속 그래프
40: 컴퓨터 시스템
41: 검증 유닛
42: CHG 유닛
43: 접근 허가 유닛
45: 직접 오버라이딩 유닛
46: 간접 오버라이딩 유닛
50: 가능한 타겟 유닛
51: 저장 유닛
52: 프로그램 분석 유닛
53: 최적화 유닛
54: 저장 매체
이하에서는, 본 발명을 이해하고 실제로 어떻게 동작하는지를 이해하기 위하여 첨부된 도면을 참조하여 본 발명을 제한하지 않는 방법으로 실시예를 설명한다.
본론으로 들어가기에 앞서, JDK 버젼 1.2에서는 JAR 파일 내부의 자바 패키지가 "밀봉"되는 것을 가능하게 하는 새로운 기능이 도입되었다는 점을 주목하기 바란다. 패키지가 밀봉되면, 그 패키지 내에 정의된 모든 클래스 및 인터페이스는 동일한 JAR 파일로부터 시작되어야 하며, 그렇지 않으면 예외가 발생하게 된다("java.lang.SecurityException"). 밀봉된 자바 패키지는 본 명세서 전반에 걸쳐 "밀봉된 패키지(sealed package)"로 부르기로 한다. 또한, JAR 파일을 밀봉하는 것도 가능한데, 이는 JAR 파일 내부의 패키지들이 밀봉되지 않은 것이라고 명확하게 선언된 경우를 제외하고는 모두 밀봉된다는 것을 의미한다. 어떤 패키지가 JAR 파일 내부에서 밀봉되면, 임의의 애플리케이션은 이 JAR 파일로부터 모든 관련 클래스 및 인터페이스를 로드할 것이다(또는 아무 것도 로드하지 않음). 패키지를 밀봉하게된 원래 동기는 보안 유지를 지원하기 위한 것이었다. 그러나, 후술하는 바와 같이, 본 발명은 클래스의 로드의 자유를 제한하기 위해서 자바의 이러한 기능을 이용한다.
클래스 파일의 세트를 함께 그룹핑(grouping)하는 것은 클래스간 분석에 있어 중요하다. 이러한 분석의 존속을 보장하기 위해서는, 패키지 그 자체 및 밀봉의 양자에서 추가 클래스의 도입 및 존재하는 클래스의 변형 및 삭제와 같은 변경을 검출할 수 있어야만 한다. 이는 JAR 파일의 서명의 형태로 제공된다(JDK 1.2에서도 지원됨). 자바 프로그램의 클래스가 주어지면, 어떤 호출의 모든 현재 가능한 타겟이 밀봉된 패키지 내부에 존재하는지를 검증할 수 있다. 그렇지 않으면, 일부 타겟은 실행 시간에 의해 변할 수 있다. 그러나, 모든 현재 타겟들이 하나의 밀봉된 패키지에 속한다고 하여도, 추가적인 타겟이 실행 시간 또는 그 이전에 다른 패키지로부터 발생할 수 있다. 따라서, 어떠한 호출이 다른 패키지로부터의 메소드를 겨냥할 수 없다는 것, 즉 그 호출이 밀봉된 호출이어서 현재 타겟 내의 어떠한 변경 및 어떠한 추가적인 타겟도 실행 시간에서 발생하지 않을 것이라는 것이 보장되어야만 한다. 클래스, 인터페이스 및 메소드의 디폴트[packaged] 변경자(modifier)에 의해 부과된 접근 제한은 타겟의 세트가 패키지 외부의 클래스에 의해 증대되지 않을 것이라는 것을 보장하는데 사용될 수 있다.
디폴트[packaged] 변경자를 가진 클래스, 인터페이스 또는 메소드는 동일한 패키지 내의 클래스, 인터페이스 및 메소드만을 접근할 수 있다. 디폴트[packaged] 변경자를 가진 클래스, 인터페이스 또는 메소드는 각각 "패키징된(packaged)" 클래스, "패키징된" 인터페이스 또는 "패키징된" 메소드로 지칭될 것이다. 패키징된 메소드는 상이한 패키지로부터의 메소드에 의해 직접 오버라이딩될 수 없으며, 단지 public 또는 protected 메소드만이 접근 가능하고 패키지 외부로부터 직접 오버라이딩될 수 있다. 그러나, 패키징된 메소드가 동일한 패키지 내의 public 또는 protected 메소드에 의해 직접 또는 간접으로 오버라이딩될 수 있으면, 그 패키징된 메소드는 임의의 기타 패키지로부터의 메소드에 의해 간접적으로 오버라이딩될 수 있다. 따라서, 어떠한 외부 타겟도 존재할 수 없다고 결론짓기 위해서는, 패키징된 메소드가 그 패키지 내부의 public 또는 protected 메소드에 의해 오버라이딩되지 않는다는 것을 확인해야만 한다.
또한, 패키징된, 즉 public이 아닌 클래스 또는 인터페이스에 속하는 메소드는 다른 패키지로부터의 메소드에 의해 직접적으로 오버라이딩될 수 없으며, 단지 public 클래스 및 인터페이스만이 패키지 외부로부터 접근 가능하고 그 메소드가 오버라이딩될 수 있다. 여기서 패키지 내로부터 패키징된 클래스를 연장하는 public 클래스를 사용하는 패키징된 클래스의 메소드를 "스머글링(smuggling)"하는 것이 가능하다. 이러한 public (서브)클래스는 패키지 외부로부터의 또 다른 클래스에 의해 연장될 수 있으며, 그 또 다른 클래스는 원래 메소드를 오버라이딩할 수 있을 것이다. 또한, 패키징된 인터페이스의 메소드는 그 인터페이스를 구현하지만 메소드의 구현은 패키지의 외부에 있는 슈퍼클래스로부터 상속하는 클래스를 사용하여 패키지의 외부로 "스머글링"될 수 있다. 또 다른 변경자인 final은 자바 메소드를 오버라이딩하는 기능을 제한하고, 메소드의 오버라이딩 또는 클래스의 확장을 엄격히 금지시킨다.
도 1a 및 도 1b는 본 발명에 따른 주요 동작 단계를 요약한 흐름도를 도시하고 있다. 먼저, 분석될 각 패키지가 밀봉 및 서명되었는지를 확인하기 위하여 검증된다. 만약 그 패키지가 밀봉 및 서명되었다면, 도 1b에 도시된 바와 같이 그 패키지의 클래스 계층 그래프(CHG)가 형성되고 패키지 구성 요소들의 각 접근 허가가 결정된다. 이는 그 패키지가 밀봉 및 서명되었다는 사실과 함께 사용되어, 패키지 내의 호출의 타겟들이 모두 그 패키지에 속한다고 보증되는지를 판단한다. 따라서, 호출이 "밀봉"되었다고 판단되면, 이는 직접, 예컨대 컴파일러 최적화에 사용될 수 있거나, 이와 달리 나중에 독립적으로 사용하기 위해서 패키지 외부에 별도로 저장될 수 있다.
만일 패키지가 밀봉 및 서명되지 않았다고 판단되면, 호출이 "밀봉"되었는지의 여부 및 밀봉된 호출의 가능한 타겟에 대한 결과가 그 패키지 내에 포함되는지를 판단하기 위한 검사가 수행된다. 그 판단 결과가 아니오이면, 그 패키지는 밀봉 및 서명되어, 도 1b의 방법이 전술한 바와 같이 수행된다. 한편, 그 결과가 그 패키지 내에 포함된다면, 도 1b의 방법이 전술한 바와 같이 수행되고 호출이 "밀봉"되었는지의 여부 및 밀봉된 호출의 가능한 타겟에 대한 결과가 패키지 내부에 저장된다. 그 후, 패키지는 밀봉 및 서명된다.
CHG는 접근 허가를 분석하는 동일한 알고리즘에 의해 상속 단계로서 유도될 수 있거나, 또는 이와 달리 외부에서 형성되어 그 알고리즘 내에 제공될 수 있다는 것을 주목하기 바란다. 또한, 원한다면 접근 허가도 외부에서 유도될 수 있다. 알고리즘은 이러한 데이터를 요구하지만, 그 데이터가 외부로부터 유도되거나 그 알고리즘의 일부이거나 상관없다.
도 2는 루트(root) 인터페이스인 I1, I2및 I4와 루트 클래스인 C0가 있는 도면 부호 10으로 일반적으로 도시된 밀봉된 패키지의 상속 그래프를 도식적으로 도시하고 있다. 밀봉된 패키지 내의 호출은 클래스 C2에 포함된 메소드 m2를 참조하게 된다. 메소드 m2는 모두 밀봉된 패키지(10) 내의 클래스 C2의 직접적인 상속자인 클래스 C6및 C8에 의해 오버라이딩된다. 클래스 C2는 패키징된 것이고 메소드 m2를 패키징된된 것으로 선언한다고 가정한다. 그러면, 그 패키지(10) 외부의 어떠한 클래스도 클래스 C2를 연장하거나 클래스 C2의 메소드 m2를 직접적으로 오버라이딩할 수 없다. 클래스 C6가 메소드 m2를 final이 아닌 public이라고 선언하는 반면 클래스 C8가 메소드 m2를 패키징된 것이라고 선언한다고 가정하고, 두 클래스 모두가 final이 아닌 public이라고 가정한다. 그러면, 클래스 C8은 m2를 패키징된 것이라고 선언했기 때문에 밀봉된 패키지(10) 외부의 클래스 C9로 메소드 m2를 전달하지 못하게 된다. 그러나, 클래스 C7과 같은 클래스 C6의 상속자는 밀봉된 패키지(10)의 외부에 있더라도, 클래스 C6이 public이고 m2를 final이 아닌 public로 선언했기 때문에 클래스 C2의 메소드 m2를 오버라이딩할 수 있다. 이는 클래스 C2의 메소드 m2에 대한 호출의 타겟이 밀봉된 패키지 외부의 클래스 C7과도 연관될 수 있어서 밀봉된 패키지(10)에 속한다고 보증될 수 없다는 것을 의미한다.
따라서, 만일 패키지(10)가 밀봉 및 서명되었다면, CHG와 패키지 내의 클래스 및 인터페이스에 대한 접근 허가에 대한 분석은 어떠한 호출에 대한 모든 타겟이 밀봉된 패키지에 속한다고 보증될 수 있는지에 대한 판단을 제공한다. 판단 결과가 그렇다면, 그 호출은 "밀봉"되어 패키지는 안전하게 최적화될 수 있다. 판단 결과가 아니라면, 패키지 외부의 메소드가 실행 시간 동안에 그 패키지 내부에 포함된 메소드를 대체할 수 있다.
도 3은 메소드 m2를 선언하는 루트 인터페이스 I2를 가진 도면 부호 20으로 일반적으로 도시된 밀봉된 패키지의 상속 트리를 도식적으로 도시하고 있다. 여기서, 메소드 m2는 클래스 C2내에 구현되어 있는데, 이 클래스는 I2의 상속자가 아니다. 그러나, I2::m2는 클래스 C3에 의해 구현되며, 이 클래스 C3는 I2의 상속 트리 외부의 클래스 C2로부터 m2를 상속한다. 따라서, 외부 메소드는 C3를 통해 C2로부터 패키지 내로 "스머글링"될 수 있다. 이러한 방법에 의해, 슈퍼클래스를 통한 스머글링이 발생할 수 있으며, 이로 인해 C2::m2가 패키지 외부에 있으면, 메소드 I2::m2에 대한 호출의 가능한 타겟을 제어할 수 없게 된다.
마찬가지로, I2::m2에 대한 호출이 실행 시간에서 클래스 C3 ,C4, C5또는 C6에 대해 결정될 수 있으면, 각각의 클래스 C3 ,C4, C5또는 C6가 추상적(abstract)인지, 아니면 그 자신의 메소드 m2를 가지고 있는지를 판단해야만 하며, 이 경우 I2::m2에 대한 호출은 "밀봉된" 것으로 선언될 수 있다. 만일 추상적이면, 상기 각 클래스는 그 자신이 실행 시간에서 실제 타겟이 될 수 없다. 만일 그 자신의 메소드 m2를 가지고 있으면, 패키지 외부로부터의 C2::m2대신에 그 자신의 메소드가 호출될 것이다.
도 4는 메소드 m2를 final이 아닌 public이라고 선언하는 루트 클래스 C1및 또 다른 루트 클래스 C4가 있는 도면 부호 30으로 일반적으로 도시된 밀봉된 패키지의 두 개의 상속 트리를 도식적으로 도시하고 있다. 클래스 C3는 클래스 C1의 final이 아닌 public인 상속자이다. 동일한 패키지에 있어서, 클래스 C4및 클래스 C6는 패키지(30) 내에서 클래스 C3와 직접적인 상속 관계가 없지만, 동일한 패키지(30)에 속하지 않는 중간 클래스 C7를 통해 C3의 메소드 m2를 오버라이딩할 수 있기 때문에 클래스 C4및 클래스 C6를 무시할 수는 없다. 따라서, 클래스 d에 선언된 메소드 m이 동일한 밀봉된 패키지 내의 클래스 d와 명백한 상속 관계가 없는 또 다른 클래스 e에 의해 오버라이딩될 가능성이 존재하게 되며, 이러한 경우 e::m이 패키지 외부로부터 오버라이딩될 수 있으면, d::m에 대한 호출은 "밀봉된" 것으로 선언될 수 없다.
도 5a 내지 도 7은 밀봉된 호출을 식별하기 위하여, 클래스 및 구성 요소의 접근 허가와 final 변경자의 양자를 고려한 기본적인 알고리즘을 상세히 나타내고 있다. 또한, 이 알고리즘의 일부 특징들은 전술한 도 2, 도 3 및 도 4에 도식적으로 나타나 있다.
기본적인 알고리즘
클래스 또는 인터페이스 c의 메소드 m(c::m으로 표시함)에 대한 호출이 주어졌을 때, 이 호출이 밀봉된 호출인지의 여부에 대한 판단을 원한다고 가정한다. c를 포함하는 패키지가 주어지면, 그 클래스 및 인터페이스를 분석할 수 있고 계층적 상속 관계를 클래스 상속 그래프(CHG) 또는 상속 그래프의 형태로 기록할 수 있다. 이 CHG를 바탕으로, 메소드 c::m의 모든 오버라이딩에 대한 표준 검색은 c::m에 대한 주어진 호출이 밀봉된 호출인지를 판단하기 위해서 강화될 수 있다.
메소드 m을 잠재적으로 오버라이딩할 수 있거나 슈퍼클래스로부터 이러한 오버라이딩의 구현을 상속할 수 있는 c의 모든 서브클래스는 이 검색을 따라 검토된다. 이러한 서브클래스들은 모두 직접 또는 간접적으로 클래스 c를 연장하거나 인터페이스 c를 구현하는 클래스 d이며, 클래스가 메소드 m을 final로 선언한 경우에는 모든 그 서브클래스들이 면제되는 예외가 있다. 만일 이러한 클래스 d가 final이 아니고 public인 클래스이고 메소드 m을 final이 아닌 public인 것으로 재선언하거나, 슈퍼클래스로부터 이러한 선언을 상속한다면, c::m에 대한 원래 호출이 밀봉된 호출이 아닌 것으로 검색을 종료할 수 있다. 이는 클래스 d가 또 다른 패키지로부터의 일부 서브클래스 e에 의해 연장될 수 있고, e가 c::m을 오버라이딩할 수 있기 때문이다. 그렇지 않으면, c::m에 대한 호출은 밀봉된 호출이다.
도 5a 내지 도 7은 c::m에 대한 호출이 밀봉된 것인지의 여부를 판단하는 이러한 알고리즘을 구현한 것이다. 도 6a 및 도 6b는 c가 클래스인 경우에 관한 것이고, 도 7은 c가 인터페이스인 경우에 관한 것이다. 이하에서는, PublicNonFinalSubclassFound 상수에 관한 코드를 설명한다.
패키지의 클래스와 인터페이스간의 직접 상속을 판단하기 위해서는 이러한 클래스 및 인터페이스를 살펴보는 것으로도 충분하다. 그러나, 간접 상속을 검출하기 위해서는 다른 클래스의 검사도 필요하다. 예컨대, 하나의 패키지의 어떤 클래스는 또 다른 패키지의 클래스를 연장할 수 있으며, 이는 다시 첫번째 패키지의 또 다른 클래스를 연장할 수 있다. 따라서, 전자의 클래스는 후자의 클래스를 간접적으로 연장하고 양자는 동일한 패키지에 속하지만, 그 패키지만을 살펴보는 것만으로는 어떠한 상속 관계도 확인할 수 없다. 이러한 상황은 도 4의 패키지(30)에 의해 도시되어 있다. 상속 관계를 완전히 판단하기 위해서는 상이한 패키지에 속하는 중간 클래스(도 4의 클래스 C7에 해당함)도 검사되어야만 한다. 그럼에도 불구하고, 우리는 여전히 우리의 알고리즘이 기타 정보와 달리 변경되지 않도록 밀봉 및 서명된 하나의 패키지의 콘텐츠(contents)에 기반을 두기를 원한다.
또한, 이러한 교차 패키지(cross-package) 간접 상속은 어떤 메소드가 그 패키지 외부로 "스머글링"하는 것을 도울 수 있다. public 클래스의 패키징된 메소드는 동일한 패키지 내의 간접 서브클래스에 의해 오버라이딩될 수 있으며(교차 패키지 상속에 의함), 이 서브클래스는 그 메소드를 public으로 정의함으로써 외부 서브클래스가 이를 다시 오버라이딩할 수 있게 한다. 그러나, 이는 관련된 유일한 경우로서, 그 클래스는 또 다른 패키지로부터의 클래스에 의해 연장 가능하기 위해서는 public이어야만 하고, 그 메소드는 직접적으로 스머글링되지 않으려면 패키징되어야만 한다. 인터페이스의 메소드는 모두 public이기 때문에 이러한 방법으로 "스머글링"될 수 없다.
그 패키지의 CHG(그 패키지의 콘텐츠에만 기반을 둠)는 교차 패키지 상속으로 인한 아크(arc)를 포함하지 않는다. 이러한 결핍을 해소하기 위한 간단한 방법은 패키지의 상속 트리에 접속되지 않은 임의의 두 클래스가 간접적으로 서로 연장할 수 있다고 가정하는 것이다.
도 5a, 도 5b, 도 6a, 도 6b 및 도 7에 나타난 기본적인 알고리즘은 교차 패키지 상속에 대처하기 위한 매우 적은 변형을 포함한다. public 서브클래스가 메소드의 패키징되고 final이 아니라는 선언과 함께 교차 패키지 확장을 가능하게 하는 것과 만나게 되면, 패키지의 모든 기타 루트 클래스들은 패키징된 메소드를 오버라이딩할 수 있는지를 보기 위해 검사된다. 도 5, 도 6a 및 도 6b의 PublicNonFinalSubClassFound 상수에 관한 코드에 대한 참조가 만들어진다.
도 5a, 도5B, 도6A, 도6B 및 도 7에 도시된 알고리즘의 복잡도에 관해서는, 패키지의 자바 소스 파일 또는 자바 클래스 파일[바이트코드(bytecode)]이 주어지면, 패키지의 상속 그래프를 효과적으로 구성할 수 있다는 점을 우선 주목해야 한다. 실제로 각 클래스는 그 슈퍼 클래스, 슈퍼인터페이스 및 선언된 메소드를 검사하기 위해서 한번만 조사될 수 있다. 패키지의 상속 그래프가 주어지면, 알고리즘은 각 클래스 및 때때로 슈퍼클래스를 최대 한번 조사할 필요가 있다. 그러나, 클래스(인터페이스)는 몇몇 인터페이스를 구현(연장)할 수 있기 때문에, 상속 그래프는 트리 구조가 아니라 일반적인 DAG(directed acyclic graph)이다. 따라서, 클래스 또는 인터페이스를 한번 이상 조사하는 것을 피하기 위해서, 클래스 및 인터페이스는 처음 조사될 때에 마킹(marking)될 수 있다. 마찬가지로, 이러한 검색의 반복을 피하기 위해서, 상속된 선언에 대해 "위쪽(upwards)"으로 검색된 (슈퍼)클래스 및 교차 패키지 상속에 대해 검색된 "루트"에 대한 마킹이 있을 수 있다. 또한, 이러한 변형은 메소드의 모든 오버라이딩을 찾는 표준 알고리즘과 관련된다.
가능한 교차 패키지 상속에 대한 검색을 가속화하기 위해서는, 각 루트 클래스가 상속 트리 내부에 public으로 선언된 메소드의 목록을 포함하도록 상속 그래프를 선처리할 수 있다(이와 반대로 각 메소드가 그 메소드가 선언된 클래스 및 클래스 트리와 연관될 수 있음). 두 개의 상이한 트리에 나타나는 메소드만이 관심의 대상이 되며, 오브젝트(Object)가 어떠한 다른 클래스도 확장하지 않기 때문에 java.lang.Object를 직접 연장하는 루트를 가진 트리는 생략될 수 있다.
밀봉된 호출을 식별하는 알고리즘은 밀봉된 호출에 대한 타겟의 완전한 세트를 결정하기 위하여 검색에 따라 발견된 오버라이딩 구현을 모으는 데 매우 쉽게 적응될 수 있다.
본 발명에 따른 알고리즘의 벤치마크(benchmark)에서는, 밀봉된 것으로 밝혀지고 정확히 하나의 가능한 타겟을 가져서 직접적인 인라이닝에 적합한 호출의 비율이 매우 높은 것으로 나타났다.
따라서, 본 발명은 자바 패키지를 밀봉 및 서명하는 능력과 함께 패키징된 클래스, 인터페이스 및 메소드의 디폴트 접근 허가를 사용하여 특정 호출에 대한 완전한 타겟의 세트를 결정한다.
추가적인 호출을 밀봉된 것으로 분류할 수 있고 이러한 분석을 가화하기 위한 한가지 방법은 객체 지향 프로그래밍 시스템, 언어 및 애플리케이션(OOPSLA)에 관한 1996년 ACM 회의의 선언에서 디. 배콘(D. Bacon) 및 피. 스위니(P. Sweeney)의 "C++ 가상 함수 호출의 빠른 정적 분석(Fast Static Analysis of C++ Virtual Function Calls)"[제325 페이지 내지 제341 페이지, 1996년 10월 미국 캘리포니아주 산 호세(San Jose)]에 기재된 활성화 정보(liveness information)를 사용하는 것이다. 예컨대, 패키징된 클래스 또는 public(또는 protected)이 없는 클래스의 생성자(constructor)는 그 패키지 내에서 있을 때에만 활성인 것으로 간주된다. 그러나, 만약 public 또는 protected인 생성자를 가지는 경우, 호출이 밀봉되지 않게 하는 public 클래스가 활성으로 간주되어야만 하기 때문에, 이러한 방법으로 추가적인 호출의 "밀봉"을 기대하기는 힘들다. 한편, 활성화 정보는 밀봉된 호출이 가진 것으로 알려진 타겟의 수를 잠재적으로 줄일 수 있다.
추가적인 호출이 밀봉될 수 있는 또 다른 방법은 호출된 클래스의 가능한 형태를 더 잘 결정하기 위해 데이터 플로우(data-flow) 분석을 사용하는 것이다. 이러한 방법은 추가적인 밀봉된 호출을 식별할 수 있으나, 본 발명에 따른 상속 그래프 형태 보다는 훨씬 더 복잡하다.
본 발명에 따른 알고리즘은 어떠한 호출을 호출된 메소드에만 연관된 정보를 바탕으로 밀봉된 호출로 분류한다는 것을 알 수 있을 것이다. 실제로, 이 알고리즘은 밀봉된 메소드, 즉 동일한 패키지 내로부터만 호출될 수 있는 메소드를 식별하고, 이러한 각 호출은 밀봉된 호출로 보증된다.
소프트웨어 개발자는 적절한 클래스, 인터페이스 및 메소드에 대한 디폴트(패키징된) 접근 허가를 사용하고 관련 패키지를 밀봉 및 서명함으로써 애플리케이션의 성능을 증가시킬 수 있다. 애플리케이션의 작업이 패키지간의 호출이 아닌 패키지 내부에 집중된다면, 그 작업은 안전하게 가속화될 수 있다.
도 8은 호출에 대한 타겟이 그 내부에 속한다고 보증된 자바 밀봉 패키지 내의 호출을 식별하는 컴퓨터 시스템(40)을 기능적으로 도시한 블록도이다. 이 시스템(40)은 패키지가 밀봉 및 서명되었다는 것을 검증하는 검증 유닛(41) 및 패키지의 클래스 계층 그래프를 정하는 CHG 유닛(42)을 포함한다. 접근 허가 유닛(43)은 패키지 내의 각 구성 요소의 접근 허가를 결정하기 위해 제공된다. 타겟 처리기(44)는 검증 유닛(41), CHG 유닛(42) 및 접근 허가 유닛(43)과 접속되어 있으며, 패키지가 밀봉 및 서명되었다는 사실과 함께 클래스 계층 그래프 및 접근 허가에 반응하여 호출의 모든 타겟이 그 패키지 내에 속하는지 여부를 판단한다. 이 타겟 처리기(44)는 직접 오버라이딩 유닛(45)을 포함하는데, 이 직접 오버라이딩 유닛(45)은 호출된 메소드가 패키지 외부로부터의 메소드에 의해 직접 오버라이딩되거나 구현될 수 있는지의 여부를 판단하여, 판단 결과가 그렇다면 그 호출을 호출의 타겟이 모두 동일한 밀봉된 패키지 내에 속한다고는 보증되지 않는 것으로 식별한다.
타겟 처리기(44)는 간접 오버라이딩 유닛(46)을 더 포함하는데, 이 간접 오버라이딩 유닛(46)은 호출된 메소드가 패키지 내의 메소드에 의해 직접 또는 간접으로 오버라이딩 또는 구현되어 그 패키지 외부로부터의 메소드에 의해 간접적으로 오버라이딩 또는 구현될 수 있는지를 판단한다. 판단 결과가 그렇다면, 시스템(40)은 그 호출을 호출의 타겟이 모두 동일한 밀봉된 패키지에 속한다고 보증되지는 않는 것으로 식별한다.
간접 오버라이딩 유닛(46)은 서브클래스 검사 유닛(47)을 포함하는데, 이 서브클래스 검사 유닛(47)은 상속 그래프를 현재 처리되고 있는 클래스 또는 인터페이스로부터 시작하여 그 상속 그래프 내의 각 클래스 또는 인터페이스 및 연관된 서브클래스 및 서브인터페이스를 따라 검사한다. 이 서브클래스 검사 유닛(47)은 메소드를 final이 아닌 public 또는 protected로 선언하거나 클래스 또는 인터페이스의 피상속자로부터 이러한 선언을 상속하는 final이 아닌 public 서브클래스의 존재 여부를 판단한다. 그 판단 결과가 그렇다면, 시스템(40)은 그 호출을 호출의 타겟이 동일한 밀봉된 패키지에 모두 속한다고 보증되지는 않는 것으로 식별한다.
간접 오버라이딩 유닛(46)은 다중 트리 분석 유닛(48)을 더 포함하는데, 이 다중 트리 분석 유닛(48)은 그 클래스가 패키지 외부로부터의 하나 이상의 클래스를 통해 클래스 또는 또 다른 상속 트리의 클래스로 메소드를 전달할 수 있고, 그 클래스 또는 또 다른 상속 트리에 의해 서브클래스화될 수 있는지 여부를 판단한다. 그 판단 결과가 그렇다면, 서브클래스 검사 유닛(47)은 이러한 각 상속 트리에 대해 사용된다.
간접 오버라이딩 유닛(46)은 슈퍼클래스 검사 유닛(49)을 더 포함하는데, 이 슈퍼클래스 검사 유닛(49)은 인터페이스가 그 인터페이스를 구현하고 외부 클래스로부터의 메소드의 구현을 상속하는 패키지 내의 "내부" 클래스를 통해 패키지 외부로부터의 "외부" 클래스의 메소드에 의해 구현될 수 있어서, 그 내부 클래스가 예증될 수 있는지의 여부를 검사한다. 검사 결과가 그렇다면, 시스템(40)은 그 호출을 호출의 타겟이 동일한 밀봉된 패키지에 모두 속한다고 보증되지는 않는 것으로 식별한다.
타겟 처리기는 가능한 타겟 유닛(50)을 더 포함하는데, 이 가능한 타겟 유닛(50)은 호출의 타겟이 모두 동일한 밀봉된 패키지에 속한다고 보증되는 호출에 대한 가능한 타겟의 세트를 결정한다.
저장 유닛(51)은 타겟 처리기(44)의 출력에 연결되어, 패캐지 내의 호출이 그 호출의 타겟이 모두 동일한 밀봉된 패키지에 속한다고 보증된 호출로 식별되는지의 여부에 대한 결과를 저장한다. 도 1a를 참조하여 전술한 바와 같이, 이 정보는 나중에 독립적으로 사용되기 위해 패키지의 내부 또는 외부에 별도로 저장될 수 있다.
또한, 타겟 처리기(44)의 출력에는 프로그램 분석 유닛(52)이 연결되어, 호출의 타겟이 동일한 패키지에 속한다고 보증된 호출에 관한 정보를 사용하여 자바 패키지의 프로시져간 프로그램 분석을 수행한다. 또한, 타겟 처리기(44)의 출력에는 최적화 유닛(53)이 접속되어, 호출의 타겟이 동일한 패키지에 속한다고 보증된 호출에 관한 정보를 사용하여 자바 패키지의 프로시져간 코드 및/또는 컴파일러 최적화를 수행한다. 이 최적화 유닛(53)에는 저장 매체(54)가 연결되어 그 최적화 유닛(53)으로부터 도출된 최적화되고 컴파일된 프로그램이 저장될 수 있다.
또한, 본 발명은 본 발명에 따라 생성된 컴파일된 프로그램 데이터를 저장하는 저장 매체뿐만 아니라, 본 발명에 따라 수행되는 컴퓨터 프로그램을 저장하는 저장 매체도 고려한다는 것을 알 수 있을 것이다.
후술하는 청구범위의 방법 청구항에 있어서, 청구항의 단계를 표시하는데 사용된 문자는 편의상 사용되었을 뿐이지, 그 단계를 수행하는 특별한 순서를 의미하는 것은 아니다. 마찬가지로, 호출이 "밀봉된" 것으로 제거된 순서는 중요하지 않으며, 따라서 방법 청구항이 표현된 순서는 결합되는 것이 아니다.
본 발명에 따르면, 자바 패키지의 가상 호출의 모든 잠재적인 타겟이 그 패키지 내에 속한다고 보증되는 호출, 즉 밀봉된 호출을 식별할 수 있게되어 보다 나은 프로시져간 최적화가 가능하게 된다.

Claims (28)

  1. 호출의 타겟(target)이 그 내부에 속한다고 보증된 자바 밀봉 패키지(Java sealed package) 내의 호출을 식별하는 방법에 있어서,
    (1) 상기 패키지가 밀봉 및 서명된 것인지를 검증하는 단계와,
    (2) 상기 패키지의 클래스(class) 및 인터페이스에 대한 클래스 계층 그래프(class hierarchy graph)를 얻는 단계와,
    (3) 상기 패키지 내의 각 구성 요소에 대한 접근 허가를 얻는 단계와,
    (4) 상기 패키지가 밀봉 및 서명되었다는 사실과 함께 상기 클래스 계층 그래프 및 접근 허가를 사용하여 상기 호출의 모든 타겟이 상기 패키지 내에 속한다고 보증되는지의 여부를 판단하는 단계
    를 포함하는 자바 밀봉 패키지 내의 호출 식별 방법.
  2. 제1항에 있어서, 상기 단계 (4)는
    i) 호출된 메소드(method)가 상기 패키지 외부로부터의 메소드에 의해 직접적으로 오버라이딩(overriding) 또는 구현(implementing)될 수 있는지의 여부를 판단하는 단계와,
    ii) 상기 단계 i)의 판단 결과가 그렇다면, 상기 호출을 그 호출의 타겟들이 모두 동일한 패키지에 속한다고 보증되지는 않는 것으로 식별하는 단계
    로 구성된 단계 (A)를 포함하는 방법.
  3. 제2항에 있어서, 상기 단계 (4)는
    i) 호출된 메소드가 패키지 내에서 직접 또는 간접적으로 오버라이딩 또는 구현될 수 있어서 상기 패키지 외부의 메소드에 의해 간접적으로 오버라이딩 또는 구현될 수 있는지의 여부를 판단하는 단계와,
    ii) 상기 단계 i)의 판단 결과가 그렇다면, 상기 호출을 그 호출의 타겟들이 동일한 패키지에 속한다고 모두 보증되지는 않는 것으로 식별하는 단계
    로 구성된 단계 (B)를 더 포함하는 방법.
  4. 제3항에 있어서, 상기 단계 (B)는
    i) 상기 호출된 메소드의 클래스 또는 인터페이스로부터 시작하여 상기 클래스 계층 그래프를 조사하는 단계와,
    ii) 상기 메소드를 final이 아닌 public 또는 protected로 선언하거나 상기 클래스 또는 인터페이스의 피상속자로부터 이러한 선언을 상속하는 final이 아닌 public 서브클래스를 검색하는 단계와,
    iii) 이러한 서브클래스가 검색되면 상기 호출을 그 호출의 타겟들이 모두 동일한 패키지에 속한다고 보증되지는 않는 것으로 식별하는 단계
    로 구성된 단계 a)를 더 포함하는 방법.
  5. 제4항에 있어서, 상기 단계 (B)는
    i) 상기 클래스가 상기 패키지 외부로부터의 하나 이상의 클래스를 통해 또 다른 상속 트리의 클래스로 상기 메소드를 전달할 수 있고, 그리고 상기 또 다른 상속 트리의 클래스에 의해 서브클래스화될 수 있는지의 여부를 판단하는 단계와,
    ii) 상기 단계 i)의 판단 결과가 그렇다면, 상기 클래스의 메소드를 고려할 때 상기 또 다른 상속 트리의 클래스에 상기 청구항 제4항에 따른 방법을 적용하는 단계
    로 구성된 단계 b)를 더 포함하는 방법.
  6. 제5항에 있어서, 상기 단계 (B)는
    i) 인터페이스의 메소드가 인터페이스를 구현하고 외부 클래스로부터 메소드의 구현을 상속하는 패키지 내의 "내부" 클래스를 통해 패키지 외부로부터 "외부" 클래스의 메소드에 의해 구현될 수 있는지의 여부를 검사하는 단계와,
    ii) 이러한 내부 클래스가 예증될 수 있는지의 여부를 검사하는 단계와,
    iii) 이러한 클래스 또는 서브클래스가 발견되면 상기 호출을 그 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되지는 않는 것으로 식별하는 단계
    로 구성된 단계 c)를 더 포함하는 방법.
  7. 제6항에 있어서,
    (5) 상기 호출이 그 호출의 타겟들이 모두 동일한 패키지에 속한다고 보증되지는 않는 것으로 식별되지 않을 경우, 상기 호출을 그 호출의 타겟들이 상기 패키지에 속한다고 모두 보증되는 것으로 식별하는 단계
    를 더 포함하는 방법.
  8. 제7항에 있어서,
    (6) 호출의 타겟들이 상기 패키지에 속한다고 모두 보증되는 호출에 대한 가능한 타겟의 세트를 결정하는 단계
    를 더 포함하는 방법.
  9. 제8항에 있어서,
    (7) 호출의 타겟들이 상기 패키지에 속한다고 모두 보증되는 호출에 관한 정보를 사용하여 자바 밀봉 패키지의 최적화 및/또는 프로시져간(inter-procedural) 프로그램 분석을 수행하는 단계
    를 더 포함하는 방법.
  10. 제1항에 있어서, 상기 방법은 상기 패키지가 밀봉 및 서명되는 것과 거의 동시에 수행되는 방법.
  11. 제7항에 있어서, 상기 패키지 내부에 상기 타겟뿐만 아니라 호출의 타겟이 상기 패키지에 속한다고 모두 보증되는 호출의 표시를 저장하는 단계를 포함하는 방법.
  12. 제1항에 있어서, 상기 방법은 상기 패키지가 밀봉 및 서명된 후에 수행되는 방법.
  13. 제12항에 있어서, 상기 방법은 프로그램 분석 및/또는 최적화 이전에 수행되는 방법.
  14. 제12항에 있어서, 상기 방법은 프로그램 분석 및/또는 최적화와 거의 함께 수행되는 방법.
  15. 호출의 타겟이 그 내부에 속한다고 보증된 자바 밀봉 패키지 내의 호출을 식별하는 컴퓨터 시스템에 있어서,
    패키지가 이미 밀봉 및 서명되었는지, 또는 밀봉 및 서명될 것인지의 여부를 검증하는 검증 유닛과,
    상기 검증 유닛에 접속되어, 상기 패키지가 밀봉 및 서명되었다는 사실과 함께 미리 구해진 상속 그래프 및 미리 구해진 접근 허가에 응답하여 호출의 모든 타겟이 상기 패키지에 속한다고 보증되는지의 여부를 판단하는 타겟 처리기
    를 포함하는 자바 밀봉 패키지 내의 호출을 식별하는 컴퓨터 시스템.
  16. 제15항에 있어서, 상기 패키지의 클래스 및 인터페이스의 상속 그래프를 형성하는 CHG 유닛과,
    상기 패키지 내의 각 구성 요소의 연관된 변경자(modifier) 및 접근 허가를 판단하는 접근 허가 유닛
    을 더 포함하고, 상기 타겟 처리기는 상기 CHG 유닛 및 접근 허가 유닛에 접속되어, 그로부터 미리 구해진 상속 그래프 및 미리 구해진 접근 허가를 수용하는 시스템.
  17. 제15항에 있어서, 상기 타겟 처리기는 호출된 메소드가 패키지 외부로부터의 메소드에 의해 직접적으로 오버라이딩 또는 구현될 수 있는지의 여부를 판단하고, 판단 결과가 그렇다면 상기 호출을 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되지는 않는 것으로 식별하는 직접 오버라이딩 유닛을 포함하는 시스템.
  18. 제15항에 있어서, 상기 타겟 처리기는 호출된 메소드가 패키지 내의 메소드에 의해 직접 또는 간접적으로 오버라이딩 또는 구현되어, 상기 패키지 외부의 메소드에 의해 간접적으로 오버라이딩 또는 구현될 수 있는지의 여부를 판단하고, 판단 결과가 그렇다면 상기 호출을 호출의 타겟들이 상기 패키지에 속한다고 모두 보증되지는 않는 것으로 식별하는 간접 오버라이딩 유닛을 포함하는 시스템.
  19. 제18항에 있어서, 상기 간접 오버라이딩 유닛은 상기 상속 그래프를 상기 클래스 또는 인터페이스로부터 시작하여 검사하여, 상기 메소드를 final이 아닌 public 또는 protected으로 선언하거나 상기 클래스 또는 인터페이스의 피상속자로부터 이러한 선언을 상속하는 final이 아닌 public 서브클래스가 존재하는지의 여부를 판단하여, 판단 결과가 그렇다면 상기 호출을 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되지는 않는 것으로 식별하는 서브클래스 검사 유닛을 포함하는 시스템.
  20. 제18항에 있어서, 상기 간접 오버라이딩 유닛은 상기 클래스가 상기 패키지 외부로부터의 하나 이상의 클래스를 통해 또 다른 상속 트리의 클래스로 메소드를 전달할 수 있고, 상기 또 다른 상속 트리의 클래스에 의해 서브클래스화될 수 있는지의 여부를 판단하고, 판단 결과가 그렇다면 이러한 각 상속 트리에 대해 서브클래스 검사 유닛을 사용하는 다중 트리 분석 유닛을 포함하는 시스템.
  21. 제18항에 있어서, 상기 간접 오버라이딩 유닛은 상기 인터페이스가 그 인터페이스를 구현하고 외부 클래스로부터의 메소드의 구현을 상속하는 패키지 내의 "내부" 클래스를 통해 상기 패키지 외부로부터의 "외부" 클래스의 메소드에 의해 구현될 수 있어서, 상기 내부 클래스가 예증될 수 있는지의 여부를 검사하고, 검사 결과가 그렇다면 상기 호출을 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되지는 않는 것으로 식별하는 슈퍼클래스 검사 유닛을 포함하는 시스템.
  22. 제15항에 있어서, 상기 타겟 처리기에 접속되어, 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되는 호출에 관한 정보를 사용하여 자바 패키지의 프로시져간 프로그램 분석을 수행하는 프로그램 분석 유닛을 더 포함하는 시스템.
  23. 제18항에 있어서, 상기 타겟 처리기는 호출의 타겟이 모두 상기 패키지에 속한다고 보증되는 호출에 대한 가능한 타겟의 세트를 결정하는 가능한 타겟 유닛을 더 포함하는 시스템.
  24. 제15항에 있어서, 상기 타겟 처리기에 접속되어, 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되는 호출에 관한 정보를 사용하여 자바 패키지의 프로시져간 최적화를 수행하는 최적화 유닛을 더 포함하는 시스템.
  25. 제15항에 있어서, 상기 타겟 처리기에 접속되어, 호출의 타겟들이 모두 상기 패키지에 속한다고 보증되는 호출에 관한 정보를 상기 패키지의 내부 또는 외부에 저장하기 위한 저장 유닛을 더 포함하는 시스템.
  26. 제24항에 있어서, 상기 최적화 유닛에 접속되어, 상기 최적화 유닛에 의해 생성된 최적화된 프로그램 데이터를 저장하는 저장 매체를 더 포함하는 시스템.
  27. 상기 청구항 제1항의 방법을 수행하는 컴퓨터 프로그램을 저장하는 저장 매체.
  28. 상기 청구항 제9항의 방법에 따라 생성된 컴파일된 프로그램 데이터를 저장하는 저장 매체.
KR1020000011446A 1999-03-16 2000-03-08 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법 KR20010006750A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/270,661 1999-03-16
US09/270,661 US6526571B1 (en) 1999-03-16 1999-03-16 Method for identifying calls in java packages whose targets are guaranteed to belong to the same package

Publications (1)

Publication Number Publication Date
KR20010006750A true KR20010006750A (ko) 2001-01-26

Family

ID=23032260

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000011446A KR20010006750A (ko) 1999-03-16 2000-03-08 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법

Country Status (8)

Country Link
US (1) US6526571B1 (ko)
EP (1) EP1037141B1 (ko)
JP (1) JP2000293379A (ko)
KR (1) KR20010006750A (ko)
AT (1) ATE359546T1 (ko)
DE (1) DE60034263T2 (ko)
IL (1) IL134133A (ko)
TW (1) TW509871B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100917370B1 (ko) * 2005-11-30 2009-09-16 후지제롯쿠스 가부시끼가이샤 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6687759B1 (en) * 1999-08-13 2004-02-03 Sun Microsystems, Inc. Method and apparatus for performing method lookup in the presence of modularity constructs to support transitive method override
US6687760B1 (en) * 1999-08-13 2004-02-03 Sun Microsystems, Inc. Method and apparatus for preforming method lookup in the presence of modularity constructs to support transitive method override
US7158993B1 (en) * 1999-11-12 2007-01-02 Sun Microsystems, Inc. API representation enabling submerged hierarchy
US7089242B1 (en) * 2000-02-29 2006-08-08 International Business Machines Corporation Method, system, program, and data structure for controlling access to sensitive functions
JP3555858B2 (ja) * 2000-03-23 2004-08-18 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの編集方法、シングルパッケージ化システム、プログラム開発システム、プログラムの身元情報付加システム及び記憶媒体
US6883163B1 (en) 2000-04-28 2005-04-19 Sun Microsystems, Inc. Populating resource-constrained devices with content verified using API definitions
US6651186B1 (en) * 2000-04-28 2003-11-18 Sun Microsystems, Inc. Remote incremental program verification using API definitions
US6986132B1 (en) 2000-04-28 2006-01-10 Sun Microsytems, Inc. Remote incremental program binary compatibility verification using API definitions
US6981245B1 (en) 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
KR20020032889A (ko) * 2000-10-27 2002-05-04 오길록 자바 클래스 파일 분석을 이용한 클래스 호출관계 표시 방법
US7793277B2 (en) * 2001-09-07 2010-09-07 International Business Machines Corporation Compiler apparatus and method for devirtualizing virtual method calls
US6912633B2 (en) * 2002-03-18 2005-06-28 Sun Microsystems, Inc. Enhanced memory management for portable devices
US6996802B2 (en) * 2002-03-18 2006-02-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using initialization order and calling order constraints
US7010783B2 (en) * 2002-03-18 2006-03-07 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using reduced dynamic memory allocation
US7181737B2 (en) * 2002-03-18 2007-02-20 Sun Microsystems, Inc. Method and apparatus for deployment of high integrity software using static procedure return addresses
US7149752B2 (en) * 2002-12-03 2006-12-12 Jp Morgan Chase Bank Method for simplifying databinding in application programs
US7085759B2 (en) 2002-12-06 2006-08-01 Jpmorgan Chase Bank System and method for communicating data to a process
US8032439B2 (en) * 2003-01-07 2011-10-04 Jpmorgan Chase Bank, N.A. System and method for process scheduling
US8121955B2 (en) * 2003-01-16 2012-02-21 Oracle America, Inc. Signing program data payload sequence in program loading
US20040143739A1 (en) * 2003-01-16 2004-07-22 Sun Mircosystems, Inc., A Delaware Corporation Run time code integrity checks
US7484095B2 (en) * 2003-01-16 2009-01-27 Sun Microsystems, Inc. System for communicating program data between a first device and a second device
US7165246B2 (en) * 2003-01-16 2007-01-16 Sun Microsystems, Inc. Optimized representation of data type information in program verification
US7222331B2 (en) * 2003-01-16 2007-05-22 Sun Microsystems, Inc. Linking of virtual methods
US7272830B2 (en) * 2003-01-16 2007-09-18 Sun Microsystems, Inc. Ordering program data for loading on a device
US7281244B2 (en) * 2003-01-16 2007-10-09 Sun Microsystems, Inc. Using a digital fingerprint to commit loaded data in a device
US7401156B2 (en) * 2003-02-03 2008-07-15 Jp Morgan Chase Bank Method using control interface to suspend software network environment running on network devices for loading and executing another software network environment
US7379998B2 (en) * 2003-03-31 2008-05-27 Jp Morgan Chase Bank System and method for multi-platform queue queries
US7814073B2 (en) * 2003-05-02 2010-10-12 Jp Morgan Chase Bank Utility for identifying differences between two Java objects
US20040230602A1 (en) * 2003-05-14 2004-11-18 Andrew Doddington System and method for decoupling data presentation layer and data gathering and storage layer in a distributed data processing system
US7366722B2 (en) * 2003-05-15 2008-04-29 Jp Morgan Chase Bank System and method for specifying application services and distributing them across multiple processors using XML
US8095659B2 (en) 2003-05-16 2012-01-10 Jp Morgan Chase Bank Service interface
US7594219B2 (en) * 2003-07-24 2009-09-22 International Business Machines Corporation Method and apparatus for monitoring compatibility of software combinations
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US20050144174A1 (en) * 2003-12-31 2005-06-30 Leonid Pesenson Framework for providing remote processing of a graphical user interface
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US20050222990A1 (en) * 2004-04-06 2005-10-06 Milne Kenneth T Methods and systems for using script files to obtain, format and disseminate database information
WO2005111795A1 (fr) * 2004-04-14 2005-11-24 France Telecom Procede d’evaluation de compatibilite d’une application et d’une plateforme de type java
GB2429371B (en) * 2004-04-26 2008-03-26 J P Morgan Chase Bank System and method for routing messages
US7493601B2 (en) * 2004-11-19 2009-02-17 International Business Machines Corporation System and method for providing access to programmer created JAVA classes
US8151243B1 (en) * 2006-06-06 2012-04-03 Oracle America, Inc. System and method for determining whether an array is a read-only array
US9477495B2 (en) * 2006-08-17 2016-10-25 International Business Machines Corporation Conservative class preloading for real time Java execution
JP4979414B2 (ja) 2007-02-28 2012-07-18 インターナショナル・ビジネス・マシーンズ・コーポレーション 複数ロケール混在環境におけるプロビジョニング用の管理サーバ、コンピュータプロブラム、及び方法
US9594662B2 (en) * 2014-08-27 2017-03-14 Ca, Inc. Automated instrumentation of applications
US10241763B2 (en) * 2014-12-10 2019-03-26 Microsoft Technology Licensing, Llc. Inter-procedural type propagation for devirtualization

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09101897A (ja) * 1995-07-07 1997-04-15 Sun Microsyst Inc オブジェクト指向c++言語のソースコードから実行可能コードを生成する方法および装置
US5630066A (en) * 1994-12-20 1997-05-13 Sun Microsystems, Inc. System and method for locating object view and platform independent object
US5761673A (en) * 1996-01-31 1998-06-02 Oracle Corporation Method and apparatus for generating dynamic web pages by invoking a predefined procedural package stored in a database
WO1998037486A1 (en) * 1997-02-18 1998-08-27 International Business Machines Corporation Method for lookup of packages and classes in java, and devices making use of this method
JPH10320204A (ja) * 1997-05-15 1998-12-04 Matsushita Electric Ind Co Ltd プログラム変換装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5603031A (en) * 1993-07-08 1997-02-11 General Magic, Inc. System and method for distributed computation based upon the movement, execution, and interaction of processes in a network
US5999737A (en) * 1994-03-01 1999-12-07 Digital Equipment Corporation Link time optimization via dead code elimination, code motion, code partitioning, code grouping, loop analysis with code motion, loop invariant analysis and active variable to register analysis
US6038395A (en) * 1994-12-16 2000-03-14 International Business Machines Corporation System and method for implementing proxy objects in a visual application builder framework
US6526565B1 (en) * 1995-12-21 2003-02-25 International Business Machines Corporation Packaging algorithm for providing object oriented applications having reduced footprints
JP2002502524A (ja) * 1997-05-29 2002-01-22 サン・マイクロシステムズ・インコーポレーテッド オブジェクトに署名し、封印する方法とその装置
US6230314B1 (en) * 1997-10-02 2001-05-08 International Business Machines Corporation Method and device for program transformation using class hierarchy transformation based upon type constraint analysis

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5630066A (en) * 1994-12-20 1997-05-13 Sun Microsystems, Inc. System and method for locating object view and platform independent object
JPH09101897A (ja) * 1995-07-07 1997-04-15 Sun Microsyst Inc オブジェクト指向c++言語のソースコードから実行可能コードを生成する方法および装置
US5761673A (en) * 1996-01-31 1998-06-02 Oracle Corporation Method and apparatus for generating dynamic web pages by invoking a predefined procedural package stored in a database
WO1998037486A1 (en) * 1997-02-18 1998-08-27 International Business Machines Corporation Method for lookup of packages and classes in java, and devices making use of this method
JPH10320204A (ja) * 1997-05-15 1998-12-04 Matsushita Electric Ind Co Ltd プログラム変換装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100917370B1 (ko) * 2005-11-30 2009-09-16 후지제롯쿠스 가부시끼가이샤 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법

Also Published As

Publication number Publication date
US6526571B1 (en) 2003-02-25
EP1037141A3 (en) 2004-04-14
IL134133A (en) 2003-10-31
EP1037141A2 (en) 2000-09-20
IL134133A0 (en) 2001-04-30
ATE359546T1 (de) 2007-05-15
DE60034263T2 (de) 2007-12-20
DE60034263D1 (de) 2007-05-24
EP1037141B1 (en) 2007-04-11
JP2000293379A (ja) 2000-10-20
TW509871B (en) 2002-11-11

Similar Documents

Publication Publication Date Title
KR20010006750A (ko) 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법
US6925638B1 (en) Mutability analysis in Java
US6851112B1 (en) Virtual machine support for multiple applications
CN107041158B (zh) 用于模块化反射的限制性访问控制
Leroy Java bytecode verification: an overview
US10564943B2 (en) Special calling sequence for caller-sensitive methods
US7707631B2 (en) Device and method for processing a program code
US11893106B2 (en) Apparatus and method for generating system call whitelist of application container and method for controlling system call of application container
US10216497B2 (en) Selective compiling method, device, and corresponding computer program product
Viroli et al. Parametric polymorphism in Java: An approach to translation based on reflective features
US8056061B2 (en) Data processing device and method using predesignated register
US11687388B2 (en) Implementing optional specialization when executing code
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
Luckow et al. HVMTP: a time predictable and portable java virtual machine for hard real-time embedded systems
Avvenuti et al. JCSI: A tool for checking secure information flow in java card applications
Arzt et al. Towards cross-platform cross-language analysis with soot
Zaks et al. Sealed calls in Java packages
US20020038454A1 (en) Method of compiling code in an object oriented programming language
Namolaru Devirtualization in GCC
Courbot et al. Romization: Early deployment and customization of Java systems for constrained devices
Thomas et al. Building a flexible Java runtime upon a flexible compiler
Krause et al. Safe class sharing among Java processes
Fong Link-Time Enforcement of Confined Types for JVM Bytecode.
Bartoletti et al. Security-aware program transformations
Tse Typed Intermediate Languages

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application