# Windows용 IBM 32-bit SDK and Runtime Environment, Java 2 Technology Edition, 버전 5.0

# 사용자 안내서

# 저작권 정보

참고: 이 정보 및 이 정보가 지원하는 제품을 사용하기 전에, 반드시 주의사항에 나와 있는 일반 정보를 읽으십시오.

이 사용자 안내서 개정판은 새 개정판에서 별도로 명시하지 않는 한, Windows용 IBM 32-bit SDK and Runtime Environment, Java 2 Technology Edition, 버전 5.0 및 모든 후속 릴리스, 수정사항 및 서비스 개정에 적용됩니다.

(c) Copyright Sun Microsystems, Inc. 1997, 2004, 901 San Antonio Rd., Palo Alto, CA 94303 USA. All rights reserved.

(c) Copyright International Business Machines Corporation, 1999, 2005. All rights reserved.

# 머리말

사용자 안내서는 Windows(R)용 IBM(R) 32-bit SDK and Runtime Environment, Java(TM) 2 Technology Edition, 버전 5.0에 대한 일반 정보와 Sun 구현과 IBM 구현을 비교하여 이에 대한 차이점에 대해 구체적인 정보를 제공합니다. http://java.sun.com의 Sun 웹 사이트를 방문하여 다양한 문서와 함께 이 사용자 안내서를 읽으십시오.

SDK 및 Runtime Environment는 다음 제품에서 지원됩니다.

- Windows 2000
- Windows XP
- Windows Server 2003

IPv6는 Windows XP 및 Windows Server 2003에서만 지원됩니다.

진단 안내서에는 Java용 IBM Virtual Machine에 대한 자세한 정보가 들어 있습니다.

"1.4.2"에서 "5.0"으로 갱신하는 것과 같은 명확한 변경이나 사소한 변경 이외의 사용자 안내서 버전 5.0에 대한 기술적 변경사항은 HTML 또는 컬러본에서 빨간색으로 표시되고 변경사항 왼쪽에 수직 막대가 표시됩니다.

"Runtime Environment" 및 "Java Virtual Machine"이라는 용어는 이 안내서에서 상호 교환적으로 사용됩니다.

# 목차

저작권 정보
머리말
개요
버전 호환성
SDK 업그레이드
다른 IBM JVM으로부터 이주
SDK 및 Runtime Environment의 컨텐츠
Runtime Environment 도구
SDK 도구
SDK 및 Runtime Environment 설치 및 구성
설치하기 전에
수동(대화식) 설치
패키지 설치
Runtime environment를 시스템 Java Virtual Machine으로 설치
자동 설치
IBM Accessibility Bridge 사용 가능하게 하기
Java Accessibility 지원 사용 불가능하게 하기
유럽 언어 사용자에 대한 정보
PATH 설정
CLASSPATH 설정
설치 제거
Runtime Environment 사용
옵션
Java 옵션 및 시스템 등록 정보 지정
표준 옵션
비표준 옵션
IBM 빌드 및 버전 번호 찾기
Java 명령의 글로벌화
Java 파일 자동 실행
고유한 보조 기술로 Java 응용프로그램 실행
JIT(Just-In-Time) 컴파일러
JIT 사용 불가능하게 하기
JIT 사용 가능하게 하기
JIT 사용 여부 판별
가비지 콜렉션 정책 지정
가비지 콜렉션 옵션
일시정지 시간
일시정지 시간 감소
힙이 가득 찬 상태의 환경
JVM의 신호 처리 방법
JVM에서 사용되는 신호
원시 코드 드라이버를 신호 체인 라이브러리로 링크
XML 문서 변환
Xerces 또는 Xalan의 이전 버전 사용
SDK를 사용하여 Java 응용프로그램 개발
Java 응용프로그램 디버깅
JDB(Java Debugger)
32비트 또는 64비트 JVM에서 응용프로그램 실행 여부 결정
JNI 응용프로그램 쓰기
애플릿에 대한 작업
애플릿 뷰어로 애플릿 실행
애플릿 뷰어로 애플릿 디버깅
| |
대형 페이지 메모리 할당 구성
CORBA 지원
GIOP 1.2 지원
휴대용 인터셉터 지원
상호 운용 가능한 이름 지정 서비스 지원
ORB 추적을 위한 시스템 등록 정보
ORB 조정을 위한 시스템 등록 정보
ORB에 대한 Java 2 보안 권한
ORB 구현 클래스
RMI over IIOP
RMI용 연결 핸들러 풀 구현
개선된 양방향 지원
개선된 BigDecimal
Euro 기호 지원
Java Communications API(JavaComm) 사용
Java Communications API 설치
Java Communications API 구성
Java Communications API의 인쇄 제한사항
Java Communications API 설치 제거
Java Communications API 문서
Java 응용프로그램 전개
Java Plug-in 사용
지원되는 브라우저
일반 DOM(Document Object Model) 지원
DBCS 매개변수 사용
Web Start 사용
Web Start 실행
Java 응용프로그램 제공
| |
JVM 간 클래스 데이터 공유
| |
클래스 공유의 개요
| |
캐시 내용
| |
캐시의 동적 갱신
| |
클래스 공유 사용
| |
캐시 보안
| |
캐시 수명
| |
캐시 유틸리티
| |
클래스 공유를 위한 명령행 옵션 사용
| |
캐시 작성, 채우기, 모니터링 및 삭제
| |
성능 및 메모리 소모
| |
클래스 공유 사용의 제한사항 및 고려사항
| |
캐시 크기 제한
| |
런타임 바이트 코드 수정
| |
운영 체제 제한사항
| |
SharedClassPermission 사용
| |
사용자 정의 Classloader를 공유 클래스에 적용
독립 소프트웨어 벤더를 위한 서비스 및 지원
액세스 가능성
iKeyman 액세스 가능성
Swing의 JComboBox 구성요소의 키보드 종단
Web Start 액세스 가능성
보안에 대한 일반적인 주의사항
알려진 제한사항
이 사용자 안내서에 대한 의견
주의사항
상표

# 개요

IBM SDK는 IBM Java 5.0 Core API(Application Program Interface)에 부합하는 애플릿 및 응용프로그램을 작성하고 실행하기 위한 개발 환경입니다.

SDK에는 Java 응용프로그램을 실행할 수 있는 Windows용 Runtime Environment가 포함되어 있습니다. SDK를 설치한 경우 Runtime Environment가 포함됩니다.

Runtime Environment에는 Java Virtual Machine 및 클래스 파일을 포함한 지원 파일이 들어 있습니다. Runtime Environment에는 SDK에 있는 클래스의 서브세트만 포함되며, 런타임에서 Java 프로그램을 지원할 수 있으나 Java 프로그램을 컴파일할 수는 없습니다. Windows용 Runtime Environment에는 appletviewer.exe나 Java 컴파일러(javac.exe), 또는 개발 시스템만을 위한 클래스 등의 개발 도구는 포함되어 있지 않습니다.

또한 Windows용 Runtime Environment와 함께 사용하도록 Java Communications API(Application Programming Interface) 패키지가 제공됩니다. 자세한 정보는 Java Communications API(JavaComm) 사용을 참조하십시오.

## 버전 호환성

일반적으로 SDK의 이전 버전에서 실행된 애플릿 또는 응용프로그램은 Windows용 IBM 32-bit SDK, V5.0에서 실행됩니다. 하지만 이 릴리스에서 컴파일된 클래스가 이전 릴리스에서도 작동한다고는 보장할 수 없습니다.

|Windows용 IBM 32-bit SDK , V5.0은 |Microsoft Visual Studio .NET 2003으로 빌드되었습니다.

호환성에 대한 Sun의 문서를 읽어 보려면 Sun 웹 사이트(http://java.sun.com)를 방문하십시오.

## SDK 업그레이드

이전 릴리스의 SDK를 업그레이드하려는 경우 업그레이드를 진행하기 전에 모든 구성 파일 및 보안 정책 파일을 백업하십시오.

업그레이드하고 난 후에 업그레이드 프로세스 중 겹쳐쓰인 파일을 복원하거나 재구성해야 할 수도 있습니다. 파일의 포맷이나 옵션이 변경되었을 수 있으므로 원래 파일을 복원하기 전에 먼저 새 파일의 구문을 확인하십시오.

## 다른 IBM JVM으로부터 이주

AMD64/EM64T용 버전 5.0의 경우, Windows용 IBM Runtime Environment에는 IBM Java Virtual Machine 및 JIT(Just-In-Time) 컴파일러의 새 버전이 들어 있습니다. 이전 IBM Runtime Environment으로부터 이주 중인 경우에는 다음에 주의하십시오.

- JVM 동적 링크 라이브러리인 jvm.dll은 jre\bin\j9vm 디렉토리에 설치됩니다. 이는 예를 들어, jre\bin\classic 디렉토리에 설치되는 Windows용 Runtime Environment 버전 1.4.2와는 다릅니다. JNI 호출 인터페이스를 사용하는 원시 응용프로그램은 JVM 동적 링크 라이브러리를 두기 위해 새 디렉토리 경로를 환경 변수에 추가해야 할 수 있습니다.
- |JVM 모니터링 인터페이스(JVMMI)는 더 이상 사용할 수 없습니다. |이 API를 사용하는 응용프로그램은 다시 작성해야 합니다. 대신 JVM 도구 인터페이스(JVMTI)를 |사용하는 것이 좋습니다. JVMTI는 기능상으로 |JVMMI와 같지 않습니다. JVMTI에 대한 정보는 http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/ 및 진단 안내서를 참조하십시오.
- |JNI의 새 구현은 JNI 스펙을 준수하나, |이전 구현과는 다릅니다. 새 구현은 오브젝트를 계속 보유하는 대신에 |오브젝트의 사본을 리턴합니다. 이러한 차이점이 JNI 응용프로그램 코드의 오류를 |일으킬 수 있습니다. JNI 코드 디버깅에 대한 정보는 비표준 옵션의 -Xcheck:jni를 참조하십시오.
- |-verbose:gc를 사용하여 얻은 |가비지 콜렉터 verbose 로그에 대해 포맷과 내용이 변경되었습니다. 이제 데이터가 |XML로 포맷됩니다. 데이터 내용은 JVM의 가비지 콜렉션 구현에 대한 |변경사항을 반영하게 되므로 출력된 대부분의 통계가 변경되었습니다. |새로운 포맷 및 데이터로 작업할 수 있도록 verbose GC 출력을 처리하는 |모든 프로그램을 변경해야 합니다. 새 verbose GC 데이터의 예제는 진단 안내서를 참조하십시오.
- jre/lib 디렉토리의 rt.jar 파일과 함께 제공된 IBM JRE는 초기 버전입니다. Java v1.4 이후부터 이 파일은 jre/lib 디렉토리에 상주하는 여러 JAR 파일로 대체되었습니다.
- |기타 호환성 및 사용되지 않는 API 정보를 보려면 Sun Java 5 호환성 문서 및 Sun Java 5 사용되지 않는 API 목록을 참조하십시오.

# SDK 및 Runtime Environment의 컨텐츠

SDK에는 JRE(Java Runtime Environment)와 몇 가지 개발 도구가 들어 있습니다. 이 절에서는 SDK 도구 및 Runtime Environment의 컨텐츠에 대해 설명합니다.

Java로만 쓰여진 응용프로그램에는 IBM SDK의 디렉토리 구조(또는 이러한 디렉토리의 파일)에 대한 종속성이 없어야 합니다. SDK의 디렉토리 구조(또는 이러한 디렉토리의 파일)에 대한 종속성으로 인해 응용프로그램 이식성 문제를 일으킬 수 있습니다. 그러나 JNI(Java Native Interface) 응용프로그램에는 일부 소수의 종속성이 있습니다.

## Runtime Environment 도구

- 코어 클래스 -- 플랫폼용으로 컴파일된 클래스 파일로, 컴파일러 및 해석기가 이 파일을 액세스하려면 압축된 상태여야 합니다. 이러한 클래스를 수정하지 마십시오. 대신 서브클래스를 작성하고 필요한 곳에서 대체하십시오.
- JRE 도구 -- 다음 도구는 Runtime Environment의 일부로 달리 지정된 경로가 없는 한 jre\bin 디렉토리에 있습니다.
  - java.exe(Java 해석기)
    - Java 클래스를 실행합니다. Java 해석기는 Java 프로그래밍 언어로 쓰여진 프로그램을 실행합니다.
  - javaw.exe(Java 해석기)
    - java 명령과 동일한 방법으로 Java 클래스를 실행합니다. 단, 콘솔창은 사용하지 않습니다.
  - keytool.exe(키 및 인증 관리 도구)
    - 해당되는 공용 키를 인증하는 개인용 키 및 연관된 X.509 인증 체인의 키스토어(데이터베이스)를 관리합니다.
  - policytool.exe(정책 파일 작성 및 관리 도구)
    - 설치의 Java 보안 정책을 정의하는 외부 정책 구성 파일을 작성하고 수정합니다.
  - rmid.exe(RMI 활성화 시스템 디먼)
    - 활성화 시스템 디먼을 시작하여 오브젝트가 JVM(Java Virtual Machine)에 등록되어 활성화되도록 합니다.
  - tnameserv.exe(CORBA(Common Object Request Broker Architecture) 이름 지정 서비스)
    - CORBA 임시 이름 지정 서비스를 시작합니다.
  - rmiregistry.exe(Java 원격 오브젝트 레지스트리)
    - 현재 호스트의 지정된 포트에서 원격 오브젝트 레지스트리를 작성하고 시작합니다.
  - ikeyman.exe(iKeyman GUI 유틸리티)
    - 키, 인증서 및 인증 요청을 관리할 수 있습니다. 자세한 정보는 함께 제공된 보안 안내서 및 http://www.ibm.com/developerworks/java/jdk/security를 참조하십시오. SDK도 이 유틸리티의 명령행 버전을 제공합니다. 자세한 정보는 iKeyman 액세스 가능성의 내용을 참조하십시오.
  - jextract.exe(덤프 추출기)
    - 시스템이 생성한 덤프를 jdmpview에서 사용할 수 있는 일반 포맷으로 변환합니다. 자세한 정보는 진단 안내서를 참조하십시오.
  - javaws.exe(Java Web Start)
    - Java 응용프로그램의 전개 및 자동 유지보수를 사용 가능하게 합니다.

## SDK 도구

- 다음 도구는 SDK의 일부이며 C:\Program Files\IBM\Java50\bin 디렉토리에 있습니다.
  - javac.exe(Java 컴파일러)
    - Java 프로그래밍 언어로 쓰여진 프로그램을 바이트코드(컴파일된 Java 코드)로 컴파일합니다.
  - appletviewer.exe(Java 애플릿 뷰어)
    - 웹 브라우저 밖에서 애플릿을 테스트하고 실행합니다.
  - jdb.exe(Java 디버거)
    - Java 프로그램을 디버그하도록 지원합니다.
  - javap.exe(클래스 파일 디스어셈블러)
    - 컴파일된 파일을 디스어셈블하고 바이트코드의 표시를 인쇄할 수 있습니다.
  - javadoc.exe(Java 문서 생성기)
    - Java 소스 파일에서 API 문서의 HTML 페이지를 생성합니다.
  - javah.exe(C 헤더 및 스텁 파일 생성기)
    - 원시 메소드를 Java 프로그래밍 언어로 쓰여진 코드와 연관시킵니다.
  - jar.exe(Java 아카이브 도구)
    - 여러 파일을 단일한 Java 아카이브(JAR) 파일로 결합니다.
  - jarsigner.exe(JAR 서명 및 확인 도구)
    - JAR 파일에 대한 서명을 생성하고 날인된 JAR 파일의 서명을 확인합니다.
  - jconsole.exe(JConsole 모니터링 및 관리 도구 - 실험용)
    - 실험용(지원되지 않음) JMX 호환 그래픽 도구로 로컬 및 원격 JVM을 모니터링합니다.
  - native2ascii.exe(Native-To-ASCII 변환기)
    - 원본 인코딩 파일을 Latin-1이나 Unicode 또는 둘 다로 인코드된 문자가 포함된 ASCII 파일로 변환합니다.
  - rmic.exe(Java Remote Method Invocation(RMI) 스텁 변환기)
    - 원격 오브젝트의 스텁, 스켈레톤 및 타이를 생성합니다. RMI-IIOP(RMI over Internet Inter-ORB Protocol) 지원이 포함됩니다.
  - idlj.exe(IDL to Java 컴파일러)
    - 제공된 IDL 파일에서 Java 바인딩을 생성합니다.
  - serialver.exe(직렬화 버전 명령)
    - 전개되는 클래스로 복사하기에 적합한 포맷으로 하나 이상의 클래스에 대한 serialVersionUID를 리턴합니다.
  - extcheck.exe(Extcheck 유틸리티)
    - 대상 jar 파일과 현재 설치된 확장 jar 파일 간의 버전 충돌을 발견해 냅니다.
  - jdmpview.exe(교차 플랫폼 덤프 포맷터)
    - 덤프를 분석하는 덤프 분석 도구입니다. 자세한 정보는 진단 안내서를 참조하십시오.
  - htmlconverter.exe(Java Plug-in HTML 변환기)
    - 애플릿이 포함된 HTML 페이지를 Java Plug-in을 사용할 수 있는 포맷으로 변환합니다.
- INCLUDE FILES
  - JNI 프로그램용 C 헤더입니다.
- DEMOS
  - 데모 디렉토리에는 사용 가능한 샘플 소스 코드, 데모, 응용프로그램 및 애플릿을 포함하는 여러 서브디렉토리가 들어 있습니다.
- COPYRIGHT
  - Windows용 SDK 소프트웨어에 대한 저작권 표시입니다.
- LICENSE
  - C:\Program Files\IBM\Java50\license에 있는 LICENSE 파일은 Windows용 SDK 소프트웨어 에 대한 라이센스 계약을 포함합니다. 라이센스 계약을 보거나 인쇄하려면 웹 브라우저에서 이 파일을 여십시오.

주: 사용자 안내서, Javadoc 및 함께 제공된 라이센스, 저작권 파일 및 데모 디렉토리는 이 Windows용 SDK에 포함된 유일한 문서입니다. Sun 웹 사이트를 방문하여 Sun 소프트웨어 문서를 확인하거나 Sun 웹 사이트( http://java.sun.com)로부터 소프트웨어 문서 패키지를 다운로드할 수 있습니다.

# SDK 및 Runtime Environment 설치 및 구성

## 설치하기 전에

SDK 또는 Runtime Environment 패키지를 설치하려면 관련 설치 패키지를 다운로드하십시오. 모든 패키지는 동일한 디렉토리에 다운로드해야 합니다. 패키지와 패키지의 파일 이름은 수동(대화식) 설치에 나열됩니다. 패키지의 파일 이름을 변경하지 마십시오.

설치를 시작하기 전에, 설치 중에 사용할 C:\WINDOWS\TEMP 디렉토리에 충분한 공간이 있는지 확인하십시오. 설치 중에 필요한 TEMP 디렉토리의 임시 공간 용량은 다음과 같습니다.

- SDK 설치 가능 패키지: 130MB
- Runtime Environment 설치 가능 패키지: 85MB

임시 공간이 충분하지 않으면 설치 프로그램이 오류를 생성하고 설치를 종료합니다. 임시 공간이 충분한데도 이러한 메시지를 받은 경우, 설치할 패키지가 완전히 다운로드되었는지 확인하십시오. 패키지의 파일 크기와 패키지를 다운로드한 웹 페이지에 표시된 파일 크기를 비교하면 이를 확인할 수 있습니다.

## 수동(대화식) 설치

설치할 수 있는 패키지는 다음과 같습니다.

- SDK 설치 가능 패키지: ibm-java2-sdk-50-win-i386.exe
- Runtime Environment 설치 가능 패키지: ibm-java2-jre-50-win-i386.exe
- Runtime Environment 설치 가능 패키지(IBM 하드웨어 전용): ibm-java2-jre-50-ibmpc-win-i386.exe

기타 패키지는 다음과 같이 zip 파일로 제공됩니다.

- Runtime Environment 패키지: ibm-java2-jre-50-win-i386.zip
- SDK 패키지: ibm-java2-sdk-50-win-i386.zip
- Windows용 Java Communications API(Application Program Interface) 패키지: ibm-java2-javacomm-50-win-i386.zip. 설치 지시사항은 Java Communications API 설치 절을 참조하십시오.
- 문서 패키지: ibm-java2-docs-50-win-i386.zip
- 데모 패키지: ibm-java2-demos-50-win-i386.zip

### 패키지 설치

1. ibm-java2-sdk-50-win-i386.exe (for the SDK) 또는 ibm-java2-jre-50-win-i386.exe(Runtime Environment 전용)를 실행하십시오.
2. 설치 마법사의 지시사항에 따르십시오.

Runtime Environment는 기본적으로 C:\Program Files\IBM\Java50\jre 디렉토리에 설치됩니다.

SDK 설치 가능 패키지를 다운로드한 경우 다음 중에서 선택하여 설치할 수 있습니다.

- SDK 개발 도구(예: Java 컴파일러)
- Runtime Environment
- 응용프로그램을 디버그하는 일부 도구에 사용된 Sun 클래스 라이브러리의 소스 코드

구성요소를 개별적으로 설치하거나 조합하여 설치할 수 있습니다.

설치 마법사에서 다음 옵션을 제공합니다.

- 표준 설치 - 이 옵션은 세 가지 구성요소를 모두 설치합니다.
- 최소 설치 - 이 옵션은 Runtime Environment만 설치합니다.
- 사용자 정의 - 이 옵션은 설치할 구성요소를 선택하도록 합니다.

### Runtime environment를 시스템 Java Virtual Machine으로 설치

SDK 설치 가능 패키지의 일부로서 또는 Runtime Environment 설치 가능 패키지로부터 Runtime Environment 설치할 때 Runtime Environment를 시스템 JVM(Java Virtual Machine)으로 설치할지 여부를 선택해야 합니다. Runtime Environment를 JVM으로 설치하면 설치 프로그램이 java.exe 및 javaw.exe 파일을 Windows 시스템 디렉토리에 복사합니다. java.exe 또는 javaw.exe의 버전이 Windows 시스템 디렉토리에 현재 존재하면 기존 버전을 현재 버전으로 겹쳐 쓸 것인지 확인하기 위해 프롬프트됩니다. 이 파일을 Windows 시스템 디렉토리에 설치하면 Runtime Environment가 시스템의 기본 JVM이 됩니다. 그리고 "현재 버전" 레지스트리 키는 이 설치와 일치하도록 설정됩니다.

주:
Runtime Environment를 시스템 JVM으로 설치하면 java.exe 및 javaw.exe가 Windows 시스템 디렉토리에 복사됩니다. 그러나 다른 실행 파일(예: javac.exe 또는 appletviewer.exe)은 복사되지 않습니다.

## 자동 설치

자동 설치를 작성하려면 먼저 수동 설치를 완료하고 설치 동안에 지정한 선택사항을 기록한 응답 파일(setup.iss)을 작성해야 합니다. 작성한 응답 파일은 사용할 컴퓨터에 대해 올바른 것이어야 합니다. 필요한 경우, 다양한 구성의 컴퓨터에 패키지를 설치하는 데 사용할 수 있도록 여러 개의 응답 파일을 작성하십시오.

설치를 실행하면서 응답 파일을 작성하려면 명령 프롬프트에서 다음을 입력하십시오.

    ibm-java2-sdk-50-win-i386 /r

또는

    ibm-java2-jre-50-win-i386 /r

Windows 제품에 따라 응답 파일(setup.iss)은 C:\Windows 또는 C:\Winnt 디렉토리에 작성됩니다. 여기서, C:는 시동 드라이브입니다.

대화식 설치 중에 다음 메시지가 표시될 수 있습니다.

    다른 Java Runtime Environment가 현재
    시스템 JVM으로 설치되어 있습니다. 이 버전을 겹쳐쓰려면
    예를 선택하고 이 설치를 종료하려면
    아니오를 선택하십시오.

이 메시지가 표시되면 아니오를 선택하고 설치를 종료하십시오. Windows 시스템 디렉토리로 이동하여 다음 두 파일을 삭제하십시오.

- java.exe
- javaw.exe

파일을 삭제한 후, 이 절의 첫 부분에 표시된 명령을 사용하여 대화식 설치를 다시 시작하십시오.

자동 설치를 실행할 시스템에서 setup.iss 응답 파일을 C:\Windows 디렉토리로 복사하십시오. 파일을 복사한 다음, 명령 프롬프트에서 다음을 입력하십시오.

    ibm-java2-sdk-50-win-i386 /s /f1c:\Windows\setup.iss /f2c:\setup.log
    ibm-java2-jre-50-win-i386 /s /f1c:\Windows\setup.iss /f2c:\setup.log

주:

1. `/f1` 또는 `/f2` 뒤에는 공백이 없어야 합니다.
2. `/f1` 플래그는 응답 파일의 이름과 위치를 지정합니다. `/f2` 플래그는 로그 파일의 이름과 위치를 지정합니다.

설치에 성공하면 로그 파일에는 문자열 `ResultCode=0`이 기록됩니다.

## IBM Accessibility Bridge 사용 가능하게 하기

IBM Accessibility Bridge가 설치되었으나 기본적으로 사용 불가능합니다. IBM Accessibility Bridge를 사용하려면 jre/lib 디렉토리의 Accessibility.properties 파일에 있는 다음 행의 첫 부분에서 숫자 부호를 삭제하십시오.

    #assistive_technologies=JawBridge

다음 웹 사이트는 액세스 유틸리티에 대한 자세한 사항을 제공합니다.

http://java.sun.com/products/jfc/accessibility.html

## Java Accessibility 지원 사용 불가능하게 하기

특히 네트워크 링크에 대해 Java 보조 기술 지원을 제공하지 않는 Java 응용프로그램의 JVM 로딩 성능을 개선하기 위해 Java Accessibility 지원을 사용 불가능하게 할 수 있습니다.

Java Accessibility 지원을 사용 불가능하게 하려면 JAVA_ASSISTIVE 환경 변수를 OFF로 설정하십시오. 이 환경 변수를 OFF로 설정하면 Accessibility.properties 파일에서는 사용 가능하게 되어있더라도 JawBridge 등의 보조 기술을 사용할 수 없습니다.

## 유럽 언어 사용자에 대한 정보

Windows에서 프로세스는 두 개의 코드 페이지, ANSI(또는 Windows) 코드 페이지 및 OEM(또는 DOS) 코드 페이지를 가집니다.

명령 창은 보통 OEM 코드 페이지를 사용합니다. Java 콘솔 출력은 Java가 시작되는 명령 창의 코드 페이지를 사용합니다. 단, javaw 명령은 항상 ANSI 코드 페이지를 사용합니다. 콘솔 출력이 사용할 코드 페이지를 java 명령에서 -Dconsole.encoding 옵션으로 지정하십시오. 예를 들어, -Dconsole.encoding=Cp1252를 지정하면 모든 콘솔 출력은 Windows ANSI Latin1 코드 페이지(1252)를 사용하게 됩니다.

## PATH 설정

아래와 같이 PATH 환경 변수를 변경하면 경로에 있는 기존의 모든 Java 실행 파일을 겹쳐쓰게 됩니다.

SDK를 설치한 후, 쉘 프롬프트에서 파일 이름이 인수인 이름을 입력하여 도구를 실행할 수 있습니다.

매번 도구 이름 앞에 경로를 입력하여 경로를 도구에 지정할 수 있습니다. 예를 들어, Windows용 SDK가 C:\Program Files\IBM\Java50\bin에 설치된 경우, 명령 프롬프트에 다음을 입력하여 myfile.java 파일을 컴파일할 수 있습니다.

      "C:\Program Files\IBM\Java50\bin\javac" myfile.java

전체 경로를 매번 입력하지 않으려면 다음을 수행하십시오.

1. 다음 디렉토리를 PATH 환경 변수에 추가하십시오.
   - C:\Program Files\IBM\Java50\bin(SDK에만 해당)
   - C:\Program Files\IBM\Java50\jre\bin(SDK 및 Runtime Environment)

   SDK 또는 Runtime Environment를 서로 다른 디렉토리에 설치한 경우, C:\Program Files\IBM\Java50\를 SDK 또는 Runtime Environment를 설치한 디렉토리로 바꾸십시오.

2. 파일을 javac 도구와 컴파일하십시오. 예를 들어, myfile.java 파일을 명령 프롬프트에서 컴파일하려면 다음을 입력하십시오.

         javac myfile.java

   PATH 환경 변수를 사용하면 Windows가 현재 디렉토리에서 javac, java 및 javadoc과 같은 실행 가능 파일을 찾을 수 있습니다. PATH의 현재 값을 표시하려면 명령 프롬프트에서 다음을 입력하십시오.

         echo %PATH%

## CLASSPATH 설정

CLASSPATH는 Java 클래스 라이브러리가 있는 java, javac 및 javadoc 등의 SDK 도구를 식별합니다.

다음 중 하나에 해당되는 경우에만 CLASSPATH를 명시적으로 설정해야 합니다.

- 직접 개발하거나 현재 디렉토리에 없는 새로운 라이브러리 또는 클래스 파일이 필요한 경우
- bin 및 lib 디렉토리의 위치를 변경하여 공통의 상위 디렉토리가 더 이상 동일하지 않은 경우
- 동일한 시스템에서 서로 다른 런타임 환경을 사용하는 응용프로그램을 개발하거나 실행할 예정인 경우

CLASSPATH의 현재 값을 표시하려면 명령 프롬프트에서 다음을 입력하십시오.

      echo %CLASSPATH%

서로 다른 런타임 환경(별도로 설치한 다른 버전 포함)을 사용하는 응용프로그램을 개발하여 실행하려는 경우, 각 응용프로그램에 대해 CLASSPATH(및 PATH)를 명시적으로 설정해야 합니다. 동시에 여러 응용프로그램을 실행하고 서로 다른 런타임 환경을 사용하려는 경우, 각 응용프로그램은 자체 명령 창에서 실행해야 합니다.

한 번에 단 하나의 Java 버전을 실행하려면 일괄처리(batch) 스크립트를 사용하여 서로 다른 런타임 환경 간에 전환할 수 있습니다.

## 설치 제거

설치 시의 수동 설치 또는 자동 설치 사용 여부에 관계없이 SDK를 설치 제거하려면 다음을 수행하십시오.

1. Windows 데스크탑에서 내 컴퓨터를 두 번 누르십시오.
2. 제어판을 두 번 누르십시오.
3. 프로그램 추가/제거를 두 번 누르십시오.
4. 목록에서 IBM 32-bit SDK for Java 2 V5.0을 누른 다음, 변경/제거를 누르십시오.
5. 확인을 누르십시오.

이 프로시저는 설치 프로그램과 함께 설치된 모든 패키지를 제거합니다. Java Communications API 패키지(Java Communications API 참조) 또는 zip 패키지에서 추출된 추가 파일은 제거하지 않습니다.

주:
모든 파일 또는 레지스트리 항목, 또는 둘 다 제거되지 않았음을 알리는 경고 메시지가 표시될 수 있습니다. 이러한 경고는 Windows에서 일부 파일이 아직 사용 중으로 확인된 경우에 발행됩니다. 이러한 파일 또는 레지스트리 항목(또는 둘 다)는 다음 재부팅 시 제거됩니다.

여러 설치를 Windows용 IBM 32-bit SDK, V5.0 및 V1.3.1 이전 버전 간에 유지하는 경우, 시스템에 V5.0 버전을 계속 설치한 상태로 이전 버전을 설치 제거하면 V1.3.1 설치 제거 프로그램이 V5.0 버전에 필요한 다음 레지스트리 키 및 모든 서브 키를 제거하여 V5.0 설치가 손상될 수 있습니다.

- HKEY_LOCAL_MACHINE/Software/IBM/Java2 Runtime Environment
- HKEY_LOCAL_MACHINE/Software/IBM/Java Development Kit

그러므로 V1.3.1 버전을 설치 제거한 후에 V5.0을 설치 제거하십시오. 이러한 설치 제거 프로그램 제한사항은 V1.4.0 및 모든 후속 릴리스에서 수정되었습니다.

# Runtime Environment 사용

java 도구는 Java Runtime Environment를 시작하고 지정한 클래스를 로드하여 Java 응용프로그램을 실행합니다.

JVM은 부트스트랩 클래스 경로, 설치된 확장자 및 사용자 클래스 경로 등 세 가지 위치 세트에서 시작 클래스(및 사용되는 기타 클래스)를 검색합니다. 클래스 이름 또는 JAR 파일 이름 다음에 지정한 인수가 기본 함수에 전달됩니다.

javaw 명령은 java와 동일합니다. 단, javaw에는 연관된 콘솔 창이 없습니다. 명령 프롬프트 창이 표시되지 않게 하려면 javaw를 사용하십시오. javaw 실행 프로그램은 실행에 실패할 경우 오류 정보가 있는 대화 상자를 표시합니다.

java 및 javaw 명령은 다음과 같은 구문을 갖습니다.

    java [ options ] class [ arguments ... ]
    java [ options ] -jar file.jar [ arguments ... ]
    javaw [ options ] class [ arguments ... ]
    javaw [ options ] -jar file.jar [ arguments ... ]

대괄호 내에 표시된 항목은 선택적입니다.

options
  명령행 옵션.
class
  호출할 클래스의 이름.
file.jar
  호출할 jar 파일의 이름. 이는 반드시 -jar와 함께 사용해야 합니다.
arguments
  main 함수에 전달되는 인수.

-jar 옵션이 지정된 경우 명명된 JAR 파일에는 응용프로그램에 대한 자원 파일과 클래스가 포함되고 시작 클래스는 Main-Class 머리글로 표시됩니다.

## 옵션

실행 프로그램에는 현재의 Runtime Environment에서 지원되며 차후 릴리스에서도 지원될 표준 옵션 세트가 있습니다. 또한 비표준 옵션 세트도 있습니다. 기본 옵션은 가장 적합한 일반 용도에 맞게 선택되었습니다. 변경을 수행하기로 결정할 때 이를 고려해야 합니다.

### Java 옵션 및 시스템 등록 정보 지정

Java 옵션과 시스템 등록 정보는 3가지 방법으로 지정할 수 있습니다. 우선 순위에 따라 다음 방법을 사용합니다.

1. 명령행에서 옵션 또는 등록 정보를 지정하는 방법. 예: `java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass`
2. 옵션이 있는 파일을 작성하고 -Xoptionsfile=<filename>을 사용하여 명령행에 지정하는 방법.
3. 옵션을 포함하는 IBM_JAVA_OPTIONS 환경 변수를 작성하는 방법. 예: `set IBM_JAVA_OPTIONS="-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump"`

명령행의 맨 오른쪽 옵션은 맨 왼쪽 옵션보다 우선하여 사용됩니다. 예를 들어 `-Xint-Xjit myClass`를 지정하면 -Xjit가 우선하여 사용됩니다.

### 표준 옵션

- -D<property_name>=<value>
  - 시스템 특성을 설정합니다.
- -assert
  - assert 관련 옵션에서 도움말을 인쇄합니다.
- -cp 또는 -classpath <디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 응용프로그램 클래스 및 자원의 탐색 경로를 설정합니다. -classpath 및 -cp 가 사용되지 않고 CLASSPATH가 설정되지 않은 경우 기본적으로 사용자 클래스 경로는 현재 디렉토리(.)입니다.
- -help 또는 -?
  - 사용법 메시지를 인쇄합니다.
- -showversion
  - 제품 버전을 인쇄하고 계속 진행합니다.
- -verbose:[class,gcterse,gc,dynload,stackwalk,sizes,stack,debug,jni]
  - 상세 출력을 사용 가능하게 합니다.
- -version
  - 제품 버전을 인쇄합니다.
- -version:<value>
  - 지정한 버전을 실행합니다.
- -jre-restrict-search
  - 버전 검색에 사용자 개인용 JRE를 포함합니다.
- -no-jre-restrict-search
  - 버전 검색에 사용자 개인용 JRE를 제외합니다.
- -agentlib:<libname>[=<options>]
  - 원시 에이전트 라이브러리인 <libname>을 로드합니다. 예를 들면 -agentlib:hprof입니다. 자세한 정보를 보려면 명령행에 -agentlib:jdwp=help 및 -agentlib:hprof=help를 지정하십시오.
- -agentpath:libname[=<options>]
  - 전체 경로 이름별로 원시 에이전트 라이브러리를 로드합니다.
- -javaagent:<jarpath>[=<options>]
  - Java 프로그래밍 언어 에이전트를 로드합니다. 자세한 정보를 보려면 java.lang.instrument API 문서를 참조하십시오.
- -X
  - 비표준 옵션에 대한 도움말을 인쇄합니다.

### 비표준 옵션

아래의 -X 옵션은 비표준 옵션이며 별도의 통지없이 변경될 수 있습니다.

<size> 매개변수를 사용하는 옵션의 경우 맨 끝에 숫자를 쓰고 킬로바이트 표시로 "k" 또는 "K", 메가바이트 표시로 "m" 또는 "M", 기가바이트 표시로 "g" 또는 "G"를 함께 사용하도록 합니다.

- -Xargencoding
  - Unicode 이스케이프 문자열을 인수 목록에 둘 수 있습니다. 이 옵션의 기본값은 off 설정입니다.
- -Xbootclasspath:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 부트스트랩 클래스 및 자원의 탐색 경로를 설정합니다. 기본값은 내부 VM 디렉토리 및 .jar 파일에서 부트스트랩 클래스 및 자원을 검색하는 것입니다.
- -Xbootclasspath/a:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 지정한 디렉토리, zip 또는 jar 파일을 부트스트랩 클래스 경로 끝에 추가합니다. 기본값은 내부 VM 디렉토리 및 .jar 파일에서 부트스트랩 클래스 및 자원을 검색하는 것입니다.
- -Xbootclasspath/p:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 지정한 디렉토리, zip 또는 jar 파일을 부트스트랩 클래스 경로 앞에 추가합니다. -Xbootclasspath: 또는 -Xbootclasspath/p: 옵션을 사용하여 표준 API의 클래스를 대체하는 응용프로그램은 전개하지 마십시오. 이러한 전개는 Java 2 Runtime Environment 2진 코드 라이센스를 위반하는 것입니다. 기본값은 내부 VM 디렉토리 및 .jar 파일에서 부트스트랩 클래스 및 자원을 검색하는 것입니다.
- -Xcheck:jni
  - JNI 기능의 추가 점검을 수행합니다. -Xrunjnichk를 사용할 수도 있습니다. 기본값은 점검을 수행하지 않는 것입니다.
- -Xcheck:nabounds
  - JNI 배열 조작의 추가 점검을 수행합니다. -Xrunjnichk를 사용할 수도 있습니다. 기본값은 점검을 수행하지 않는 것입니다.
- |-Xclassgc | |
  |
  - 모든 가비지 콜렉션에서 클래스 오브젝트를 콜렉션합니다. |기본적으로 이 옵션은 사용 가능합니다.
- -Xcompactexplicitgc
  - `System.gc()`에 대한 모든 호출을 압축합니다. -Xnocompactexplicitgc도 참조하십시오. 기본적으로 내부적으로 트리거된 경우에만 압축이 수행됩니다.
- -Xcompactgc
  - 모든 가비지 콜렉터 사이클을 압축합니다. -Xnocompactgc도 참조하십시오. 기본적으로 내부적으로 트리거된 경우에만 압축이 수행됩니다.
- |-Xconcurrentbackground <number> | |
  |
  - 동시 표시로 뮤테이터 스레드를 지원하기 위해 첨부된 |낮은 우선순위 배경 스레드의 수를 지정합니다. 기본값은 1입니다.
- |-Xconcurrentlevel <number> | |
  |
  - 할당 "부담" 비율을 지정합니다. 할당된 힙 용량과 |표시된 힙 용량 간의 비율을 표시합니다. 기본값은 |8입니다.
- |-Xconmeter:<soa | loa | dynamic> | |
  |
  - 동시 표시 동안에 LOA 또는 SOA 중 측정된 영역의 사용과 |이에 따라 부담된 할당을 판별합니다. -Xconmeter:soa는 소규모 오브젝트 영역(SOA)의 할당에 대한 |할당 부담에 사용되고 -Xconmeter:loa는 대형 |오브젝트 영역(LOA)의 할당에 대한 할당 부담에 사용됩니다. -Xconmeter:dynamic을 지정하면, 콜렉터는 어느 영역이 먼저 소진되었는지, |이 영역이 SOA인지 LOA인지 여부를 기초로 측정할 영역을 |동적으로 판별합니다. 기본적으로 이 옵션은 -Xconmeter:soa로 설정되어 있습니다.
- -Xdbg:<options>
  - 응용프로그램의 원격 디버깅을 지원하기 위해 디버깅 라이브러리를 로드합니다. -Xrunjdwp와 동일합니다. 기본적으로 디버깅 라이브러리는 로드되지 않으며, VM 인스턴스는 디버그를 위해 사용할 수 없습니다.
- -Xdbginfo:<path to symbol file>
  - 옵션을 디버그 정보 서버로 로드하고 전달합니다. 기본적으로 디버그 정보 서버는 사용할 수 없습니다.
- -Xdebug
  - 디버거를 사용 가능하게 하여 JVM을 시작합니다. 기본적으로 디버거는 사용할 수 없습니다.
- |-Xdisableexcessivegc |
  |
  - 과도한 시간을 GC에 소요한 경우, OutOfMemory 예외를 발생하지 |않습니다. 기본적으로 이 옵션은 off입니다.
- -Xdisableexplicitgc
  - `System.gc()`에 대한 호출이 효과가 없음을 VM에 신호합니다. 기본적으로 `System.gc()`에 대한 호출은 가비지 콜렉션을 트리거합니다.
- |-Xdisablestringconstantgc |
  |
  - 문자열 인턴 테이블에서 문자열이 수집되지 않도록 합니다. |기본적으로 이 옵션은 사용 불가능합니다.
- -Xdisablejavadump
  - 오류 및 신호에 대한 java 덤프 생성을 사용하지 않습니다. 기본적으로 java 덤프 생성은 사용 가능합니다.
- |-Xenableexcessivegc |
  |
  - 과도한 시간을 GC에 소요한 경우, 이 옵션은 할당 요청에 대해 널(NULL)을 |리턴하여 OutOfMemory 예외가 발생되도록 합니다. 이 조치는 |힙이 완전히 확장되고 소요 시간이 최소 95%에 달할 때만 |수행됩니다. 기본값은 이 조치를 수행하는 것입니다.
- |-Xenablestringconstantgc |
  |
  - 문자열 인턴 테이블에 문자열을 수집합니다. |기본적으로 이 옵션은 사용 가능합니다.
- -Xfuture
  - 엄격한 클래스 파일 포맷 점검을 사용합니다. 후속 릴리스에서는 더 엄격한 점검이 기본값이 되므로 새 코드를 개발 중인 경우 이 플래그를 사용하십시오. 기본적으로 엄격한 포캣 점검은 사용 불가능합니다.
- -Xgcpolicy:[optthruput]|[optavgpause]|[gencon]
  - 가비지 콜렉터의 작동을 제어합니다. optthruput 옵션이 기본값이며, 처리량은 매우 많으나 종종 일시정지됩니다. optavgpause 옵션은 가비지 콜렉션의 일시정지 시간을 줄이고 가비지 콜렉션 일시정지 길이에 대한 힙 크기 증가에 따른 영향을 제한합니다. 구성에 매우 큰 힙이 있는 경우에는 optavgpause를 사용하십시오. gencon 옵션은 동시 및 세대 GC를 조합하여 사용하도록 요청하여 가비지 콜렉션 일시정지 시간을 최소화합니다. 자세한 정보는 가비지 콜렉션 정책 지정의 내용을 참조하십시오.
- -Xgcthreads<number of threads>
  - 가비지 콜렉션 중의 병렬 조작에 사용되는 헬퍼 스레드의 수를 설정합니다. 기본적으로 스레드 수는 현재의 실제 CPU 수에서 1을 뺀 수로 설정합니다(최소값은 1).
- |-Xgcworkpackets <number> |
  |
  - 글로벌 콜렉터에서 사용 가능한 총 작업 패킷 수를 |지정합니다. 이 옵션을 지정하지 않으면 콜렉터는 최대 힙 크기에 따라 |패킷 수를 할당합니다.
- -Xint
  - JVM에서 해석기만 사용하고 JIT(Just-In-Time) 컴파일러는 사용하지 않게 됩니다. 기본적으로 JIT 컴파일러는 사용 가능합니다.
- -Xiss<size>
  - 초기 Java 스레드 스택 크기를 설정합니다. 기본값은 2KB입니다.
- -Xjit[:<suboption>,<suboption>,...]
  - JIT를 사용 가능하게 합니다. 하위 옵션에 대한 자세한 정보는 진단 안내서를 참조하십시오. -Xnojit도 참조하십시오. 기본적으로 JIT는 사용 가능합니다.
- -Xlinenumbers
  - 디버깅을 위해 스택 추적에 행 번호를 표시합니다. -Xnolinenumbers도 참조하십시오. 기본적으로 행 번호를 표시합니다.
- |-Xloa |
  |
  - LOA(대형 오브젝트 영역)를 할당합니다. 오브젝트는 SOA가 아닌 이 LOA에서 할당됩니다. 기본적으로 LOA는 LOA를 사용할 수 없는 하위 풀을 제외한 모든 GC 정책에 사용할 수 있습니다. -Xnoloa도 참조하십시오.
- |-Xloainitial <number> |
  |
  - <number>는 0 - 0.95의 수입니다. 이는 LOA(대형 오브젝트 영역)에 할당된 현재 보유 공간의 초기 백분율을 지정합니다. 기본값은 0.05 또는 5%입니다.
- |-Xloamaximum <number> |
  |
  - <number>는 0 - 0.95의 수입니다. 이는 LOA(대형 오브젝트 영역)에 할당된 현재 보유 공간의 최대 백분율을 지정합니다. 기본값은 0.5 또는 50%입니다.
- |-Xlp(Windows 2003) | |
  |
  - Java 힙을 대형 페이지로 할당하도록 JVM에 요청합니다. 대형 페이지를 |사용할 수 없는 경우, JVM이 시작되지 않으며 오류 메시지(`GC: 시스템 구성이 옵션을 지원하지 않음 --> '-Xlp'`)를 |표시합니다. 대형 페이지는 Windows 2003을 실행하는 시스템에서 지원됩니다. 이 운영 체제는 대형 페이지를 사용하도록 설정되어 있습니다. 기본적으로 |대형 페이지를 사용하지 않습니다. 대형 페이지 메모리 할당 구성을 참조하십시오.
- -Xmaxe<size>
  - 가비지 콜렉터가 힙을 확장하는 최대 용량을 설정합니다. 일반적으로 가비지 콜렉터는 여유 공간의 용량이 30%(또는 -Xminf를 사용하여 지정한 용량) 아래로 떨어졌을 때, 여유 공간을 30%로 복원하는 데 필요한 용량만큼 힙을 확장합니다. -Xmaxe 옵션은 확장을 지정값으로 제한합니다. 예를 들어, `-Xmaxe10M`는 확장을 10MB로 한정합니다. 기본적으로 최대 확장 크기는 없습니다.
- -Xmaxf<size>
  - 가비지 콜렉션 후에 여유 공간으로 남아야 하는 힙의 최대 백분율을 지정합니다. 여유 공간이 이 용량을 초과하면 JVM은 힙을 줄입니다. 크기는 0 - 1 범위의 10진수로 지정하십시오. 예를 들어, `-Xmaxf0.5`는 최대 여유 공간을 50%로 설정합니다. 기본값은 0.6(60%)입니다.
- -Xmca<size>
  - 로드된 클래스의 RAM 부분을 저장하는 데 할당된 메모리의 확장 단계를 설정합니다. RAM에 있는 클래스를 저장하는 데 더 많은 메모리가 필요할 때마다, 할당된 메모리는 이 용량까지 늘어납니다. 기본적으로 확장 단계는 32K입니다.
- -Xmco<size>
  - 로드된 클래스의 ROM 부분을 저장하는 데 할당된 메모리의 확장 단계를 설정합니다. ROM에 있는 클래스를 저장하는 데 더 많은 메모리가 필요할 때마다, 할당된 메모리는 이 용량까지 늘어납니다. 기본적으로 확장 단계는 128K입니다.
- -Xmine<size>
  - 가비지 콜렉터가 힙을 확장하는 최소 용량을 설정합니다. 일반적으로 가비지 콜렉터는 여유 공간을 30%(또는 -Xminf를 사용하여 지정한 용량)로 복원하는 데 필요한 용량만큼 힙을 확장합니다. -Xmine 옵션은 확장을 최소한, 지정된 값으로 설정합니다. 예를 들어, `-Xmine50M`는 확장 크기를 최소 50MB로 설정합니다. 기본적으로 최소 확장 크기는 1MB입니다.
- -Xminf<size>
  - 가비지 콜렉션 후에 여유 공간으로 남아야 하는 힙의 최소 백분율을 지정합니다. 여유 공간이 이 용량 미만으로 떨어지면 JVM은 힙을 늘립니다. 크기는 0 - 1 범위의 10진수로 지정하십시오. 예를 들어, `-Xminf0.3`은 최소 여유 공간을 힙의 30%로 정합니다. 기본적으로 최소값은 0.3입니다.
- -Xmn<size>
  - -Xgcpolicy:gencon을 사용할 때 새 (nursery) 힙의 초기 크기 및 최대 크기를 지정한 값으로 설정합니다. -Xmns 및 -Xmnx 설정과 동일합니다. |-Xmns 또는 |-Xmnx 둘 중 하나를 설정했으면 -Xmn을 설정할 수 없습니다. |-Xmns 또는 -Xmnx와 함께 -Xmn를 설정하면 |VM이 시작되지 않으며 오류를 리턴합니다. 기본적으로 시스템 성능에 따라 -Xmn이 내부적으로 선택됩니다. -verbose:sizes 옵션을 사용하면 VM에서 현재 사용 중인 값을 확인할 수 있습니다.
- -Xmns<size>
  - -Xgcpolicy:gencon을 사용할 때 새 (nursery) 힙의 초기 크기를 지정한 값으로 설정합니다. 기본적으로 이 옵션은 시스템 성능에 따라 내부적으로 선택됩니다. |이 옵션을 -Xmn과 |함께 사용하면 오류가 리턴됩니다.
- -Xmnx<size>
  - -Xgcpolicy:gencon을 사용할 때 새 (nursery) 힙의 최대 크기를 지정한 값으로 설정합니다. 기본적으로 이 옵션은 시스템 성능에 따라 내부적으로 선택됩니다. |이 옵션을 -Xmn과 |함께 사용하면 오류가 리턴됩니다.
- -Xmo<size>
  - -Xgcpolicy:gencon을 사용할 때 이전 (tenure) 힙의 초기 크기 및 최대 크기를 지정한 값으로 설정합니다. -Xmos 및 -Xmox 설정과 동일합니다. |-Xmos 또는 -Xmox 둘 중 |하나를 설정했으면 -Xmo를 설정할 수 없습니다. |-Xmos 또는 -Xmox와 함께 |-Xmo를 설정하면 VM이 시작되지 않으며 오류를 |리턴합니다. 기본적으로 -Xmo는 시스템 성능에 따라 내부적으로 선택됩니다. -verbose:sizes 옵션을 사용하면 VM에서 현재 사용 중인 값을 확인할 수 있습니다.
- -Xmos<size>
  - -Xgcpolicy:gencon을 사용할 때 이전 (tenure) 힙의 초기 크기를 지정한 값으로 설정합니다. 기본적으로 이 옵션은 시스템 성능에 따라 내부적으로 선택됩니다. |이 옵션을 -Xmo와 |함께 사용하면 오류가 리턴됩니다.
- -Xmox<size>
  - -Xgcpolicy:gencon을 사용할 때 이전 (tenure) 힙의 최대 크기를 지정한 값으로 설정합니다. 기본적으로 이 옵션은 시스템 성능에 따라 내부적으로 선택됩니다. |이 옵션을 -Xmo와 |함께 사용하면 오류가 리턴됩니다.
- -Xmoi<size>
  - -Xgcpolicy:gencon을 사용하여 Java 힙의 증분량을 설정합니다. 0으로 설정하면 확장이 허용되지 않습니다. 기본적으로 증분 크기는 확장 크기, -Xmine 및 -Xminf에 따라 계산합니다.
- -Xmr<size>
  - -Xgcpolicy:gencon을 사용하여 가비지 콜렉션 "기억된 세트"의 크기를 설정합니다. 이것은 새 (nursery) 힙에 있는 오브젝트에 대한 참조를 갖는 이전 (tenured) 힙의 오브젝트 목록입니다. 기본값은 16KB입니다.
- -Xms<size>
  - 초기 Java 힙 크기를 설정합니다. -Xmo도 사용할 수 있습니다. 기본값은 시스템 성능에 따라 내부적으로 설정됩니다.
- -Xmso<size>
  - 포크된 Java 스레드의 C 스택 크기를 설정합니다. 기본값은 32비트 플랫폼에서 32KB이며 64비트 플랫폼에서 256KB입니다.
- -Xmx<size>
  - 최대 Java 힙 크기를 설정합니다. 기본적으로 이 옵션은 시스템 성능에 따라 내부적으로 설정됩니다.
- -Xnoclassgc
  - 클래스 가비지 콜렉션을 사용 불가능하게 합니다. JVM에서 더 이상 사용하지 않는 Java 클래스와 연관된 스토리지의 가비지 콜렉션을 사용하지 않습니다. 기본 작동은 -Xclassgc입니다.
- -Xnocompactgc
  - 가비지 콜렉션 압축을 사용 불가능하게 합니다. -Xcompactgc도 참조하십시오. 기본적으로 압축은 사용 가능합니다.
- -Xnocompactexplicitgc
  - `System.gc()`에 대한 호출의 압축을 사용 불가능하게 합니다. -Xcompactexplicitgc도 참조하십시오. 기본적으로 `System.gc()`에 대한 압축은 사용 가능합니다.
- -Xnojit
  - JIT 컴파일러를 사용 불가능하게 합니다. -Xjit도 참조하십시오. 기본적으로 JIT 컴파일러는 사용 가능합니다.
- -Xnolinenumbers
  - 디버깅을 위한 행 번호를 사용 불가능하게 합니다. -Xlinenumbers도 참조하십시오. 기본적으로 행 번호를 표시합니다.
- |-Xnoloa | |
  |
  - LOA(대형 오브젝트 영역)이 할당되지 못하게 합니다. 모든 오브젝트는 SOA에 할당됩니다. 기본적으로 LOA는 LOA를 사용할 수 없는 하위 풀을 제외한 모든 GC 정책에 사용할 수 있습니다. -Xloa도 참조하십시오.
- -Xnopartialcompactgc
  - 증분 압축을 사용 불가능하게 합니다. -Xpartialcompactgc도 참조하십시오. 기본적으로 이 옵션은 설정하지 않으므로 모든 압축은 전체 압축을 의미합니다.
- -Xnosigcatch
  - JVM 신호 처리 코드를 사용 불가능하게 합니다. -Xsigcatch도 참조하십시오. 기본적으로 신호 처리는 사용 가능합니다.
- -Xnosigchain
  - 신호 핸들러 체인을 사용 불가능하게 합니다. -Xsigchain도 참조하십시오. 기본적으로 신호 핸들러 체인은 사용 가능합니다.
- -Xoptionsfile=<file>
  - JVM 옵션이 포함된 파일을 지정하고 정의합니다. 기본적으로 옵션 파일을 사용하지 않습니다.
- -Xoss<size>
  - 임의의 스레드에 대한 Java 스택 크기와 C 스택 크기를 설정합니다. 이 옵션은 호환성을 위해 제공된 것으로 -Xss 및 -Xmso를 지정된 값으로 설정하는 것과 같습니다.
- -Xpartialcompactgc
  - 부분 압축을 사용 가능하게 합니다. -Xnopartialcompactgc도 참조하십시오.
- -Xquickstart
  - JIT 컴파일 및 최적화를 지연하여 시작 시간을 개선합니다. 기본적으로 빠른 시작은 사용 불가능하며 JIT 컴파일 지연은 없습니다.
- -Xrdbginfo:<host>:<port>
  - 옵션을 원격 디버그 정보 서버로 로드하고 전달합니다. 기본적으로 원격 디버그 정보 서버는 사용 불가능합니다.
- -Xrs
  - 운영 체제 신호의 사용을 줄입니다. 기본적으로 VM은 운영 체제 신호를 전부 사용합니다. JVM에서 사용되는 신호의 내용을 참조하십시오.
- -Xrun<library name>[:options]
  - 도움말 라이브러리를 로드합니다. 여러 개의 라이브러리를 로드하려면 명령행에서 두 번 이상 지정하십시오. 이러한 라이브러리의 예로 다음이 있습니다.
    - -Xrunhprof[:help] | [:<option>=<value>, ...]
      - 힙, CPU 또는 모니터 프로파일을 수행합니다. 자세한 정보는 진단 안내서를 참조하십시오.
    - -Xrunjdwp[:help] | [:<option>=<value>, ...]
      - 응용프로그램의 원격 디버깅을 지원하기 위해 디버깅 라이브러리를 로드합니다. -Xdbg와 동일합니다. 자세한 정보는 Java 응용프로그램 디버깅의 내용을 참조하십시오.
    - -Xrunjnichk[:help] | [:<option>=<value>, ...]
      - JNI를 사용하여 JVM에 액세스하는 원시 프로그램의 오류를 추적하기 위해 JNI에 대한 추가 점검을 수행합니다. 자세한 정보는 진단 안내서를 참조하십시오.
- |-Xscmx<size>[k|m|g] | |
  |
  - -Xscmx에 대한 자세한 정보는 클래스 공유를 위한 명령행 옵션 사용의 내용을 참조하십시오.
- |-Xshareclasses:<suboptions> | |
  |
  - -Xshareclasses 하위 옵션에 대한 자세한 정보는 클래스 공유를 위한 명령행 옵션 사용의 내용을 참조하십시오.
- -Xsigcatch
  - VM 신호 처리 코드를 사용 가능하게 합니다. -Xnosigcatch도 참조하십시오. 기본적으로 신호 처리는 사용 가능합니다.
- -Xsigchain
  - 신호 핸들러 체인을 사용 가능하게 합니다. -Xnosigchain도 참조하십시오. 기본적으로 신호 핸들러 체인은 사용 가능합니다.
- |-Xsoftrefthreshold<number> | |
  |
  - 참조가 표시되지 않은 경우 지정된 GC의 수부터 |유연한 참조가 지워지게 되는 GC의 수를 설정합니다. 기본값은 3입니다. 이는 참조가 표시되지 않은 |세 번째 GC부터 유연한 참조가 지워진다는 것을 의미입니다.
- -Xss<size>
  - 임의의 스레드에 대한 최대 Java 스택 크기를 설정합니다. 기본적으로 이 옵션은 256KB로 설정됩니다.
- -Xthr:<options>
  - 스레딩 옵션을 설정합니다.
- -Xverbosegclog:<path to file><filename>[X, Y]
  - verboseGC 결과물이 지정된 파일에 작성됩니다. 파일이 이미 있을 경우 해당 파일을 겹쳐씁니다. 기존 파일을 열 수 없거나 새 파일을 작성할 수 없는 경우, 결과물을 stderr로 방향 재지정합니다. 인수 X 및 Y(둘 다 정수)를 지정하면 verboseGC 결과물은 파일의 X수로 방향이 재지정됩니다. 여기서, 각각은 verboseGC 결과물의 gc 사이클에 대해 Y수가 포함됩니다. 이들 파일은 filename1, filename2 등의 형식이 있습니다. 기본적으로 verbose 가비지 콜렉션 로깅은 발생하지 않습니다.
- -Xverify
  - 로드된 모든 클랙스에 대해 엄격한 점검을 수행하도록 합니다. 기본적으로 엄격한 클래스 점검을 수행하지 않습니다.
- -Xverify:none
  - 엄격한 클래스 점검을 사용 불가능하게 합니다. 기본적으로 엄격한 클래스 점검을 수행하지 않습니다.

## IBM 빌드 및 버전 번호 찾기

IBM 빌드 및 버전 번호를 알려면 명령 프롬프트에서 다음을 입력하십시오.

        java -version

## Java 명령의 글로벌화

java 명령 및 기타 java 실행 프로그램 명령(예: javaw)을 사용하면 클래스 이름을 현재 로케일의 문자 세트에 있는 문자로 지정할 수 있습니다.

Java 이스케이프 문자열을 사용하여 클래스 이름과 인수에 임의의 Unicode 문자를 지정할 수 있습니다. 이를 수행하려면 -Xargencoding을 지정해야 합니다. Unicode 문자를 지정하려면, `\u####` 형식의 이스케이프 시퀀스를 사용하십시오. 여기서, #는 16진 숫자(0-9, A-F)입니다.

또는 클래스 이름과 명령 인수가 UTF8 인코딩을 사용하도록 지정하려면 -Xargencoding:utf8을 사용하거나 ISO8859_1 인코딩에서 -Xargencoding:latin을 사용하십시오.

예를 들어, 모두 대문자에 대한 Unicode 인코딩을 사용하여 "HelloWorld"라는 클래스를 지정하려면 다음 명령을 사용하십시오.

    java -Xargencoding '\u0048ello\u0057orld'

java 및 javaw 명령은 번역된 출력 메시지를 제공합니다. 이러한 메시지는 Java가 실행 중인 로케일에 따라 다릅니다. java에 의해 리턴된 자세한 오류 설명 및 기타 디버그 정보는 영어로 되어 있습니다.

## Java 파일 자동 실행

파일에서 자동으로 실행되도록 Java 클래스 또는 jar 파일을 설정하려면 Windows 탐색기에서 도구->폴더 옵션->파일 형식 옵션을 사용하십시오. 또는 명령 프롬프트에서 다음을 입력하십시오.

    assoc .class=javaclass
    ftype javaclass=C:\Program Files\IBM\Java50\jre\bin\java.exe %l %*

주:

1. `%l`는 문자 l이며 숫자 1이 아닙니다.
2. Java가 C:\Program Files\IBM\Java50\ 이외의 디렉토리에 설치된 경우 사용자의 디렉토리를 대체하십시오.

## 고유한 보조 기술로 Java 응용프로그램 실행

Sun에서 제공하는 Java Access Bridge를 사용하여, Java 응용프로그램의 Java Accessibility 지원에서는 고유한 Windows 보조 기술(예: 화면 판독기)에 액세스 할 수 있습니다. 이들 고유한 Windows 보조 기술은 Java Access Bridge에 대한 호출을 지원해야 합니다.

Sun에서 사용 가능한 Java Access Bridge는 올바른 디렉토리에 5개의 파일(access-bridge.jar, jaccess.jar, accessibility.properties, JavaAccessBridge.dll 및 WindowsAccessBridge.dll)을 위치시키는 설치 프로그램을 포함합니다. IBM은 JawBridge와 함께 사용할 수 있도록 jaccess.jar의 사본을 적절한 디렉토리에 제공합니다.

Windows 2000 Magnifier를 Swing 응용프로그램과 함께 사용할 수 있는 IBM Accessibility Bridge(JawBridge)를 이미 사용 중이고 JawBridge를 Java Access Bridge와 동시에 실행하고자 하는 경우에는 accessibility.properties 파일에 있는 행을 다음과 같이 편집하십시오.

    assistive_technologies=com.sun.java.accessibility.AccessBridge,
    JawBridge

두 브릿지를 모두 비활성화하려면 `#`로 시작하는 행을 삽입하여 주석 처리하십시오. 다음 웹 사이트에서는 Java Access Bridge를 다운로드하는 방법을 알려줍니다.

http://java.sun.com/products/jfc/accessibility.html

## JIT(Just-In-Time) 컴파일러

IBM JIT(Just-In-Time) 컴파일러는 실행 시 Java 응용프로그램 및 애플릿에서 자주 사용되는 바이트 코드 순서에 대해 시스템 코드를 동적으로 생성합니다. |JIT V5.0 컴파일러는 컴파일러 연구의 결과로 새로운 최적 성능을 제공하고 이전의 JIT 버전에서 구현한 최적 성능을 개선하며 더 나은 하드웨어 사용 기능을 제공합니다.

IBM SDK 및 Runtime Environment에는 SDK 도구와 함께 사용자 응용프로그램에서 기본적으로 사용할 수 있는 JIT가 포함됩니다. 보통, 명시적으로 JIT를 호출할 필요는 없습니다. 시스템 코드에 대한 Java 바이트 코드의 컴파일이 투명하게 발생하기 때문입니다. 그러나 Java 응용프로그램이나 애플릿을 실행하는 중 Runtime Environment에 문제점이 발생하는 경우 이 문제점을 격리하기 위해 JIT를 사용 불가능 상태로 만들 수 있습니다. JIT는 적합한 성능 구현에 필수적이므로 JIT를 사용 불가능하게 만드는 작업은 임시로 수행해야 합니다.

### JIT 사용 불가능하게 하기

다음 세 가지 방법으로 JIT를 사용 불가능하게 할 수 있습니다.

- JAVA_COMPILER 환경 변수를 "NONE" 또는 빈 문자열로 설정한 다음 Java 응용프로그램을 실행하십시오.

  응용프로그램이 실행되고 있는 명령 프롬프트에서 다음을 입력하십시오.

      set JAVA_COMPILER=NONE

  GUI를 사용하여 영구적으로 JAVA_COMPILER를 설정할 수도 있습니다. 제어판을 열고 시스템을 선택한 다음 고급 탭에서 환경 변수를 선택하십시오.

- JVM 명령행에서 -D 옵션을 사용하여 java.compiler 등록 정보를 "NONE" 또는 빈문자열로 설정하십시오.

      java -Djava.compiler=NONE MyApp

- JVM 명령행에서 -Xint 옵션을 사용하십시오. 예를 들면 다음과 같습니다.

      java -Xint MyApp

두 명령행 옵션 모두 JAVA_COMPILER 환경 변수를 재지정합니다.

### JIT 사용 가능하게 하기

JIT를 사용하려면 JAVA_COMPILER 환경 변수를 "jitc"로 설정하거나 -D 옵션을 사용하여 java.compiler 등록 정보를 "jitc"로 설정하십시오. 또는 JVM 명령행에서 -Xjit 옵션을 사용하고 -Xint 옵션을 삭제하여 JIT를 사용 가능하게 할 수 있습니다.

JAVA_COMPILER 환경 변수나 java.compiler 등록 정보가 ""(빈 문자열)로 설정되면 JIT는 그대로 사용 불가능하게 됩니다. 환경 변수 설정을 해제하려면 명령 프롬프트에서 `set JAVA_COMPILER=`을 입력하십시오.

### JIT 사용 여부 판별

JIT를 사용하고 있는지 확인하려면 명령 프롬프트에서 다음을 입력하십시오.

        java -version

JIT가 사용되고 있지 않으면 다음이 포함된 메시지가 표시됩니다.

    (JIT disabled)

JIT가 사용되고 있으면 다음이 포함된 메시지가 표시됩니다.

    (JIT enabled)

JIT에 대한 자세한 정보는 진단 안내서를 참조하십시오.

## 가비지 콜렉션 정책 지정

가비지 콜렉터는 Java 및 VM에서 실행 중인 응용프로그램에서 사용된 메모리를 관리합니다.

가비지 콜렉터가 저장영역에 대한 요청을 수신하면 힙의 미사용된 메모리가 따로 지정됩니다("할당"). 가비지 콜렉터는 또한 메모리 영역이 더 이상 참조되지 않도록 하고 재사용을 위해 해제합니다("콜렉션").

콜렉션 단계는 메모리 할당 결함으로 트리거될 수 있으며, 이러한 결함은 저장영역 요청에 대해 여분의 공간이 없거나 명시적인 System.gc() 호출로 인해 발생합니다.

가비지 콜렉션은 응용프로그램 성능에 심각한 영향을 미칠 수 있으므로 IBM Virtual Machine은 가비지 콜렉션을 최적으로 수행할 수 있는 다양한 메소드를 제공하여 응용프로그램에 대한 영향을 줄입니다.

가비지 콜렉션에 대한 자세한 정보는 진단 안내서를 참조하십시오.

### 가비지 콜렉션 옵션

-Xgcpolicy 옵션은 가비지 콜렉션 정책을 지정합니다.

-Xgcpolicy는 optthruput(기본값 및 권장값), optavgpause 또는 gencon 값을 사용합니다. 이 옵션은 가비지 콜렉터의 작동을 제어하여 응용프로그램과 전체 시스템의 처리량 및 가비지 콜렉션에 의해 발생되는 일시정지 시간 사이의 균형을 맞춥니다.

옵션 및 해당 값의 형식은 다음과 같습니다.

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

> -Xgcpolicy:gencon

### 일시정지 시간

응용프로그램의 오브젝트 작성 시도가 힙 내의 사용 가능한 공간에서 즉시 충족되지 않는 경우, 가비지 콜렉터는 참조되지 않은 오브젝트(가비지)를 식별하고 삭제하여, 즉각적이며 계속적인 할당 요청을 신속하게 충족시킬 수 있는 상태로 힙을 되돌립니다. 이러한 가비지 콜렉션 사이클로 인해 때때로 응용프로그램 코드의 실행에 있어서 예상치 않았던 일시정지가 발생하기도 합니다. 응용프로그램의 크기와 복잡도가 증가함에 따라 힙도 더 커지게 되므로, 이러한 가비지 콜렉션 일시정지 시간도 크기 및 중요성이 증가하는 경향이 있습니다. 가비지 콜렉션 기본값인 -Xgcpolicy:optthruput은 응용프로그램에 매우 많은 처리량을 부과하나 그로 인해 때때로 일시정지될 수 있으며 일시정지 시간은 힙의 크기와 가비지의 양에 따라 밀리 초에서 수 초까지 다양합니다.

### 일시정지 시간 감소

JVM은 다음 두 가지 기술을 사용하여 일시정지 시간을 줄입니다.

- 동시 가비지 콜렉션(GC)
- 세대별 가비지 콜렉션(GC)

-Xgcpolicy:optavgpause 명령행 옵션은 동시 가비지 콜렉션 사용을 요청하여 가비지 콜렉션 일시정지 시간을 대폭 줄입니다. 동시 GC는 일부 가비지 콜렉션 활동을 정상적인 프로그램 실행과 동시에 수행하여 힙 콜렉션으로 인한 중단을 최소화함으로써 일시정지 시간을 감소시킵니다. 또한 -Xgcpolicy:optavgpause 옵션은 가비지 콜렉션 일시정지 길이에 대한 힙 크기 증가에 따른 영향을 제한합니다. -Xgcpolicy:optavgpause 옵션은 대형 힙이 사용된 구성에서 가장 유용합니다. 그러나 일시정지 시간이 감소되면 응용프로그램의 처리량도 감소할 수 있습니다.

동시 가비지 콜렉션 시 그 당시에는 수집되지 못한 비교적 오래 지속된 오브젝트을 식별하는 데 상당한 시간이 소요됩니다. GC가 재활용 가능한 오브젝트에만 집중한다면 일부 응용프로그램에 대한 일시정지 시간을 더욱 줄일 수 있습니다. 세대별 GC는 힙을 "보육원(nursery)"과 "양로원(tenure)" 영역의 두 "세대(generation)"로 나눔으로써 일시정지 시간을 줄입니다. 오브젝트는 연령에 따라 두 영역 중 하나에 속합니다. nursery 영역은 둘 중 더 작은 규모이고 연소한 오브젝트를 포함합니다. tenure는 더 크고 노쇄한 오브젝트를 포함합니다. 오브젝트는 처음에 nursery에 할당되며 nursery에서 오래 남아 있게 되면 tenure 영역으로 옮겨갑니다.

세대별 GC는 대부분 오래 지속되지 오브젝트에 의존합니다. 세대별 GC는 nursery에 가장 많은 재활용 공간이 있기 때문에 이 저장영역을 반환하는 노력에 집중하여 일시정지 시간을 줄입니다. 전체 힙 수집에는 비교적 긴 일시정지 시간이 필요하므로 nursery는 수집을 더 자주 수행하며, nursery가 작으면 일시정지 시간도 그만큼 짧아집니다. 단, 세대별 GC의 경우 시간이 지날수록 너무 많은 오브젝트가 너무 오래 지속되어 tenure가 가득 찰 수 있다는 결점이 있습니다. 이러한 경우 일시정지 시간을 최소화하려면 동시 GC 및 세대별 GC를 함께 사용하십시오. -Xgcpolicy:gencon 옵션은 동시 및 세대별 GC를 함께 사용하여 가비지 콜렉션의 일시정지 시간을 최소화합니다.

### 힙이 가득 찬 상태의 환경

Java 힙이 가득 차게 되고 재생될 수 있는 가비지가 거의 없는 경우, 바로 사용할 수 있는 공간이 없게되므로 새 오브젝트에 대한 요청이 신속하게 이뤄지지 않을 수 있습니다. 힙이 거의 가득 찬 용량으로 조작될 경우 위의 옵션 중에서 어느 옵션이 사용되는지에 관계없이 응용프로그램 성능이 저하될 수 있습니다. 또한 더 많은 힙 공간 요청이 계속해서 작성되면 응용프로그램에 OutofMemory 예외가 발생하게 되며, 이 예외를 찾아 처리하지 못하면 JVM이 종료될 수 있습니다. 이 때 JVM은 "javadump" 진단 파일을 생성합니다. 이러한 조건에서는 -Xmx 옵션을 사용하여 힙 크기를 늘리거나 사용 중인 응용프로그램 오브젝트의 수를 줄이십시오. 자세한 정보는 진단 안내서를 참조하십시오.

## JVM의 신호 처리 방법

JVM과 관련된 신호가 오면 신호 핸들러가 호출됩니다. 이 신호 핸들러는 Java 또는 Java 이외의 스레드에 대해 호출되었는지를 판별합니다.

신호가 Java 스레드에 대한 것이면, JVM은 신호 처리를 제어할 수 있습니다. 이 신호에 대한 응용프로그램 핸들러가 설치되어 있고 -Xnosigchain 명령행 옵션을 지정하지 않은 경우에는 JVM이 처리를 완료한 후 이 신호에 대한 응용프로그램 핸들러가 호출됩니다.

신호가 Java 이외의 스레드에 대한 것이며 JVM을 설치한 응용프로그램에 신호에 대한 자체 핸들러가 이미 설치되어 있는 경우에는 해당 핸들러가 신호를 제어합니다. 그렇지 않고 신호가 JVM 또는 Java 응용프로그램에 의해 요청되었으면 신호가 무시되거나 기본 조치가 수행됩니다.

이 규칙에 대한 예외는 Windows에 대한 것입니다. 여기서, 외부적으로 생성된 신호에 대해(예: CTRL-BREAK를 누른 경우) 신호 핸들러를 실행하기 위한 새 스레드가 작성됩니다. 이 때, JVM 신호 핸들러가 신호 처리를 수행하고 이 신호에 대한 응용프로그램 핸들러가 설치되어 있으며 -Xnosigchain 명령행 옵션을 지정하지 않은 경우에는 이 신호에 대한 응용프로그램 핸들러가 호출됩니다.

예외 및 오류 신호의 경우, JVM은 다음 중 하나를 수행합니다.

- 조건을 처리하고 복구
- 또는 다음과 같이 제어된 시스템 종료 순서를 수행합니다.
  1. Javadump를 출력하여 실패 시점의 JVM 상태 설명
  2. 해당 신호에 대한 응용프로그램의 신호 핸들러 호출
  3. 모든 응용프로그램 설치 중단 후크 호출
  4. 정리된 시스템 종료를 제공하는 데 필요한 정리 수행

위에서 설명된 후크를 지정하는 실행 프로그램을 작성하는 방법에 대한 정보는 http://www-106.ibm.com/developerworks/java/library/i-signalhandling/을 참조하십시오. 이 항목은 Java V1.3.1에 해당되는 것이나, 후속 버전에도 적용됩니다.

인터럽트 신호의 경우 JVM은 제어된 시스템 종료 순서를 수행합니다. 이 때, 다음과 같은 정상 종료로 처리됩니다.

- 해당 신호에 대한 응용프로그램의 신호 핸들러 호출
- 모든 응용프로그램 시스템 종료 후크 실행
- 모든 응용프로그램 설치 종료 후크 호출
- 필수 JVM 정리 수행

이 시스템 종료는 `System.exit()` Java 메소드 호출에 의해 초기화되는 시스템 종료와 동일합니다.

JVM에서 사용되는 기타 신호는 내부 제어용으로 JVM을 종료시키지 않습니다. 관련된 제어 신호는 SIGBREAK뿐이며 이는 Javadump를 생성합니다.

### JVM에서 사용되는 신호

아래의 표 1에서는 JVM에서 사용되는 신호를 보여줍니다. 신호는 다음과 같이 유형 또는 용도별로 분류됩니다.

- 예외: 운영 체제는 심각한 오류 조건이 발생할 때마다 적절한 예외 신호를 동기적으로 일으킵니다.
- 오류: JVM에서 복구할 수 없는 조건을 발견하면 SIGABRT를 일으킵니다.
- 인터럽트: JVM 프로세스 외부에서 비동기적으로 일어나며 시스템 종료를 요청합니다.
- 제어: 제어를 목적으로 JVM에서 사용되는 기타 신호입니다.

표 1. JVM에서 사용되는 신호
신호 이름 | 신호 유형 | 설명 | -Xrs에 의해 사용 불가능
--- | --- | --- | ---
SIGINT | 인터럽트 | 대화식 주의(CTRL-C). JVM이 정상적으로 종료합니다. | 예
SIGTERM | 인터럽트 | 종료 요청. JVM이 정상 종료합니다. | 예
SIGBREAK | 제어 | 단말기로부터의 중단 신호. JVM은 이 신호를 사용하여 Javadump를 가져옵니다. | 예

|IBM JVM은 구조화된 예외 처리 및 SetConsoleCtrlHandler() API를 사용합니다. 이는 -Xrs와 함께 사용할 수 없습니다. -Xnosigchain는 Windows에서 무시됩니다.

JVM이 대부분의 신호를 처리하지 않도록 하려면 -Xrs(신호 사용 단축) 옵션을 사용하십시오. 자세한 정보는 http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html에 있는 Sun의 Java 응용프로그램 실행 프로그램 페이지를 참조하십시오.

JVM 스레드의 신호 `2(SIGINT)` 및 `15(SIGTERM)` 때문에 JVM이 종료됩니다. 따라서 응용프로그램 신호 핸들러에 JVM이 필요한 경우를 제외하고 이 신호의 복구를 시도하지 말아야 합니다.

### 원시 코드 드라이버를 신호 체인 라이브러리로 링크

Runtime Environment에는 신호 체인 기능이 포함되어 있습니다. 신호 체인 기능으로 JVM은 자체 신호 핸들러를 설치하는 원시 코드와 보다 효율적으로 공동 조작할 수 있습니다.

신호 체인 기능을 사용하면 응용프로그램이 공유 라이브러리 jsig.dll을 msvcrt.dll 앞에서 링크하고 로드할 수 있습니다. jsig.dll 라이브러리는 `signal()`에 대한 호출을 차단하여 이들의 핸들러가 JVM의 신호 핸들러를 대체하지 않도록 합니다. 대신, 이들 호출은 새 신호 핸들러를 저장하거나 이를 JVM이 설치된 핸들러 뒤에 "체인"합니다. 따라서 나중에 이들 신호 중 하나가 발생되고 JVM을 대상으로 하지 않은 경우, 사전 설치된 핸들러가 호출됩니다.

jsig.dll을 사용하려면 JVM을 작성하거나 임베드하는 응용프로그램과 링크시키십시오.

## XML 문서 변환

IBM SDK에는 JAXP 1.3 스펙을 준수하는 XSLT4J 프로세서 및 XML4J 구문 분석기가 포함되어 있습니다. 이들 도구를 사용하면 제공된 XML 처리 구현과 독립적으로 XML 문서를 구문 분석하고 변환할 수 있습니다. "팩토리 파인더(Factory Finder)"를 사용하면 SAXParserFactory, DocumentBuilderFactory 및 TransformerFactory 구현을 찾았을 경우 응용프로그램이 코드를 변경하지 않고도 서로 다른 구현 간에 스왑이 가능합니다.

|IBM SDK에 포함된 XML 기술은 Apache Xerces Java 및 Apache Xalan Java와 유사합니다. 자세한 정보는 |http://xml.apache.org/xerces2-j/ 및 http://xml.apache.org/xalan-j/를 참조하십시오.

XSLT4J 프로세서를 사용하면 기존 XSLT Interpretive 프로세서 또는 새 XSLT Compiling 프로세서 중에서 선택할 수 있습니다. Interpretive 프로세서는 도구 및 디버깅 환경에 사용되며 XSLT Compiling 프로세서가 지원하지 않는 XSLT 확장 기능을 지원합니다. XSLT Compiling 프로세서는 고성능 런타임 환경에 사용되며 XSL 양식 시트에서 translet 또는 변환 엔진을 생성합니다. 이러한 방법은 런타임 응용프로그램의 양식 시트 명령어에 대한 해석을 XML 데이터와 분리합니다.

XSLT Interpretive 프로세서는 기본 프로세서입니다. XSLT Compiling 프로세서를 선택하려면 다음 중 하나를 수행하십시오.

- jaxp.properties 파일(C:\Program Files\IBM\Java50\jre\lib에 있음)의 항목을 변경하십시오.
- javax.xml.transform.TransformerFactory 키에 대한 시스템 등록 정보를 org.apache.xalan.xsltc.trax.TransformerFactoryImpl로 설정하십시오.

jaxp.properties 파일의 등록 정보를 구현하려면 jaxp.properties.sample을 C:\Program Files\IBM\Java50\의 jaxp.properties로 복사하십시오. 이 파일에는 TransformerFactory, SAXParserFactory 및 DocumentBuilderFactory에 사용할 구현을 판별하는 프로시저에 대한 자세한 사항도 포함되어 있습니다.

XSLT Compiling 프로세서로 StreamSource 오브젝트를 변환할 때 성능을 향상시키려면 com.ibm.xslt4j.b2b2dtm.XSLTCB2BDTMManager 클래스를 org.apache.xalan.xsltc.dom.XSLTCDTMManager 서비스의 공급자로 지정하십시오. 서비스 공급자를 판별하려면 org.apache.xalan.xsltc.dom.XSLTCDTMManager를 찾을 때까지 다음 각 단계를 수행하십시오.

1. 시스템 등록 정보 org.apache.xalan.xsltc.dom.XSLTCDTMManager의 설정을 확인하십시오.
2. C:\Program Files\IBM\Java50\lib\xalan.properties 파일에 있는 등록 정보 org.apache.xalan.xsltc.dom.XSLTCDTMManager의 값을 확인하십시오.
3. 클래스 이름에 대한 META-INF\services\org.apache.xalan.xsltc.dom.XSLTCDTMManager 파일의 내용을 확인하십시오.
4. 기본 서비스 공급자 org.apache.xalan.xsltc.dom.XSLTCDTMManager를 사용하십시오.

XSLT Compiling 프로세서는 javax.xml.transform.TransformerFactory 오브젝트 작성 시 org.apache.xalan.xsltc.dom.XSLTCDTMManager 서비스에 대한 서비스 공급자를 찾습니다. TransformerFactory 오브젝트를 사용하여 작성한 모든 javax.xml.transform.Transformer 또는 javax.xml.transform.sax.TransformerHandler 오브젝트는 동일한 서비스 공급자를 사용합니다. 위에 설명한 설정 중 하나를 수정하고 새 TransformerFactory 오브젝트를 작성함으로써만 서비스 공급자를 변경할 수 있습니다.

### Xerces 또는 Xalan의 이전 버전 사용

Tomcat의 이전 버전을 사용 중인 경우에는 이 제한사항이 적용될 수 있습니다.

승인된 교체에 따라 이전 버전의 Xerces(2.0 이전) 또는 Xalan(2.3 이전)을 사용 중인 경우, 응용프로그램 실행 시 널(null) 포인터 예외를 수신할 수 있습니다. 이 예외는 이전 버전이 jaxp.properties 파일을 제대로 처리하지 않아 발생합니다.

이러한 예외를 방지하려면 다음 해결책 중 하나를 수행하십시오.

- 최신 JAXP(Java API for XML Programming) 스펙을 구현하는 응용프로그램의 새 버전으로 업그레이드하십시오(http://java.sun.com/xml/jaxp/index.html).
- C:\Program Files\IBM\Java50\jre\lib에서 jaxp.properties 파일을 제거하십시오.
- C:\Program Files\IBM\Java50\jre\lib에 있는 jaxp.properties 파일의 항목에서 주석을 제거하십시오.
- IBM_JAVA_OPTIONS 환경 변수를 사용하여 SAX 구문 분석기, DocumentBuilder 또는 변환기 팩토리를 명시적으로 설정하십시오. 예를 들면 다음과 같습니다.

      set IBM_JAVA_OPTIONS=-Djavax.xml.parsers.SAXParserFactory=
        org.apache.xerces.jaxp.SAXParserFactoryImpl

  또는

      set IBM_JAVA_OPTIONS=-Djavax.xml.parsers.DocumentBuilderFactory=
        org.apache.xerces.jaxp.DocumentBuilderFactoryImpl

  또는

      set IBM_JAVA_OPTIONS=-Djavax.xml.transform.TransformerFactory=
        org.apache.xalan.processor.TransformerFactoryImpl

- 응용프로그램의 코드 내에서 javax.xml.parsers.SAXParserFactory, javax.xml.parsers.DocumentBuilderFactory 또는 javax.xml.transform.TransformerFactory의 시스템 등록 정보를 설정하십시오. 관련 예제는 JAXP 1.3 스펙을 참조하십시오.

# SDK를 사용하여 Java 응용프로그램 개발

다음은 Windows용 SDK를 사용하여 Java 응용프로그램을 개발하는 방법을 설명합니다. 사용 가능한 도구에 대한 자세한 정보는 SDK 도구의 내용을 참조하십시오.

## Java 응용프로그램 디버깅

Java 프로그램을 디버그하려면 JDB(Java Debugger) 응용프로그램을 사용하거나, Windows용 SDK가 제공하는 JPDA(Java Platform Debugger Architecture)를 사용하여 통신하는 다른 디버거를 사용할 수 있습니다.

### JDB(Java Debugger)

JDB(Java Debugger)는 Windows용 SDK에 포함되어 있습니다. 디버거는 jdb 명령으로 호출되며 JPDA를 사용하여 JVM에 "첨부"됩니다. Java 응용프로그램을 디버그하려면 다음을 수행하십시오.

1. 다음 옵션으로 JVM을 시작하십시오.

       java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<port>
            MyApp <MyApp args>

2. JVM이 시작되지만, JVM이 Java 응용프로그램을 시작할 때까지 실행이 일시중단됩니다. 별도의 세션에서 다음과 같이 디버거를 JVM에 첨부할 수 있습니다.

       jdb -attach <port number>

   디버거가 JVM에 첨부되며, 이제 다양한 명령을 실행하여 Java 응용프로그램을 점검하고 제어할 수 있습니다. 예를 들어, `run`을 입력하여 Java 응응프로그램을 실행할 수 있습니다.

JDB 옵션에 대한 자세한 사항을 보려면 다음을 입력하십시오.

    jdb -help

JDB 명령에 대한 자세한 사항을 보려면 다음을 수행하십시오.

1. `jdb`를 입력하십시오.
2. jdb 프롬프트에서 `help`를 입력하십시오.

JDB를 사용하여 원격 시스템에서 실행되는 Java 응용프로그램을 디버그할 수도 있습니다. JPDA는 TCP/IP 소켓을 사용하여 원격 JVM에 연결합니다.

1. 이전과 마찬가지로 JVM을 시작하십시오.
2. 다음과 같이 디버거를 원격 시스템에 첨부하십시오.

       jdb -attach <machine name or ip address>:<port number>

dt_socket 전송을 사용하여 디버그 세션을 실행하는 경우, 지정된 포트 사용이 자유로와야 합니다.

|JVMDI(Java Virtual Machine Debugging Interface)는 이 릴리스에서 지원되지 않습니다. 대신 JVMIT(Java Virtual Machine Tool Interface)가 사용됩니다.

JDB 및 JPDA와 이에 대한 사용법에 대한 자세한 정보는 다음 웹 사이트를 참조하십시오.

- http://java.sun.com/products/jpda/
- http://java.sun.com/j2se/1.5.0/docs/guide/jpda/
- http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdb.html

## 32비트 또는 64비트 JVM에서 응용프로그램 실행 여부 결정

일부 Java 응용프로그램은 실행 중인 JVM이 32비트인지 64비트인지 판별할 수 있어야 합니다. 예를 들어, 응용프로그램에 원시 코드 라이브러리가 있으면 해당 라이브러리는 32비트 및 64비트 작업 모드를 모두 지원하는 플랫폼에 대해 32비트 및 64비트 형식으로 별도로 컴파일되어야 합니다. 이때, 32비트 및 64비트 코드를 혼합할수 없으므로 응용프로그램은 런타임 시 올바른 라이브러리를 로드해야 합니다.

시스템 등록 정보 com.ibm.vm.bitmode를 사용하면 응용프로그램에서 JVM이 실행 중인 모드를 판별할 수 있습니다. 응용프로그램은 다음 값을 리턴합니다.

- 32 - JVM이 32비트 모드로 실행 중
- 64 - JVM이 64비트 모드로 실행 중

다음 호출을 사용하여 응용프로그램 내에서 com.ibm.vm.bitmode를 검사할 수 있습니다.

    System.getProperty("com.ibm.vm.bitmode");

## JNI 응용프로그램 쓰기

원시 프로그램이 JNI_CreateJavaVM() API 호출에 지정할 수 있는 유효한 JNI 버전 번호는 다음과 같습니다.

- JNI_VERSION_1_2(0x00010002)
- JNI_VERSION_1_4(0x00010004)

이 버전 번호는 사용할 JNI 원시 인터페이스의 레벨만 결정합니다. 작성되는 JVM의 실제 레벨은 J2SE 라이브러리(즉, V5.0)에 의해 지정됩니다. JNI 인터페이스 API는 JVM, 클래스 라이브러리 API 또는 JVM 작동의 기타 영역에 의해 구현되는 언어 스펙에 영향을 주지 않습니다. 자세한 정보는 http://java.sun.com/j2se/1.5.0/docs/guide/jni를 참조하십시오.

응용프로그램에 JNI 라이브러리가 두 개 필요한 경우(각각 32비트용 및 64비트용), com.ibm.vm.bitmode 시스템 등록 정보를 사용하여 32비트 또는 64비트 JVM을 사용 중인지 판별하고 적절한 라이브러리를 선택하십시오.

주:
JNI(Java Native Interface) 버전 1.1은 지원되지 않습니다.

## 애플릿에 대한 작업

애플릿 뷰어에서 APPLET 태그 사용하여 웹 페이지(HTML 파일)에서 참조로 호출된 하나 이상의 애플릿을 실행할 수 있습니다. 애플릿 뷰어는 HTML 파일에서 APPLET 태그를 찾아 태그에 지정된 대로 별도의 창에서 애플릿을 실행합니다.

애플릿 뷰어는 애플릿을 보기 위한 것이므로 여러 HTML 태그를 포함한 전체 웹 페이지를 표시할 수는 없습니다. 애플릿 뷰어는 APPLET 태그만 구문 분석하며 웹 페이지의 기타 HTML은 분석하지 않습니다.

### 애플릿 뷰어로 애플릿 실행

애플릿 뷰어로 애플릿을 실행하려면 명령 프롬프트에 다음을 입력하십시오.

       appletviewer name

여기서, name은 다음 중 하나입니다.

- 애플릿을 호출하는 HTML 파일의 이름
- 애플릿을 호출하는 웹 페이지의 URL

예를 들어, HTML 파일에서 애플릿 뷰어를 호출하려면 명령 프롬프트에 다음을 입력하십시오.

    appletviewer <demo>\GraphLayout\example1.html

여기서, <demo>는 데모 패키지의 압축을 해제한 전체 경로로 대체됩니다.

예를 들어, `http://java.sun.com/applets/NervousText/example1.html`은 애플릿을 호출한 웹 페이지의 URL입니다. 이 웹 페이지에서 애플릿 뷰어를 호출하려면 웹 프롬프트에서 다음을 입력하십시오.

    appletviewer http://java.sun.com/applets/NervousText/example1.html

애플릿 뷰어는 <META> 태그의 charset 옵션을 인식하지 않습니다. 애플릿 뷰어가 로드한 파일이 시스템 기본값으로 인코드되어 있지 않으면 I/O 예외가 발생할 수 있습니다. 이러한 예외를 피하려면 애플릿 뷰어 실행 시 -encoding 옵션을 사용하십시오. 예를 들면 다음과 같습니다.

    appletviewer -encoding JISAutoDetect sample.html

### 애플릿 뷰어로 애플릿 디버깅

애플릿 뷰어의 -debug 옵션을 사용하여 애플릿을 디버그할 수 있습니다. 애플릿 디버깅 시, 애플릿을 호출하는 HTML 파일이 포함된 디렉토리에서 애플릿 뷰어를 호출하는 것이 좋습니다. 예를 들면 다음과 같습니다.

    cd <demo>\TicTacToe
    appletviewer -debug example1.html

여기서, <demo>는 데모 패키지의 압축을 해제한 전체 경로로 대체됩니다.

애플릿 뷰어를 사용하여 애플릿을 디버그하는 자세한 방법은 Sun 웹 사이트(http://java.sun.com)를 참조하십시오.

| | |

## 대형 페이지 메모리 할당 구성

|

대형 페이지를 지원하는 시스템의 경우, -Xlp 옵션으로 |Java를 시작하여 대형 페이지 지원을 사용할 수 있습니다.

|

대형 페이지는 주로 메모리를 대량으로 할당하고 메모리에 자주 액세스하는 |응용프로그램의 성능을 향상시키기 위해 사용됩니다. |주로 TLB(Translation Lookaside Buffer)의 실패를 줄임으로써 대형 페이지의 |성능을 향상시킬 수 있습니다. TLB는 더 큰 가상 메모리 범위를 |맵핑하므로 이와 같이 성능이 향상됩니다.

|

JVM에서 대형 페이지를 사용하려면 사용 가능한 적절한 수의 |연속된 대형 페이지가 시스템에 있어야 합니다. 사용 가능한 페이지가 충분한데도 대형 페이지를 할당할 수 없는 경우 대형 페이지는 연속되지 않습니다.

|

대형 페이지 할당은 JVM 사용자에 대한 로컬 관리 정책이 "메모리에 페이지 잠금"을 허용하도록 구성된 경우에만 성공합니다.

## CORBA 지원

Java 2 Platform, Standard Edition(J2SE)은 최소한 J2SE(V1.5)의 CORBA 지원을 위한 공식 스펙에 정의된 스펙을 지원합니다. 일부의 경우, IBM J2SE ORB는 해당 스펙의 더 최근 버전을 지원합니다.

### GIOP 1.2 지원

이 SDK는 OMG 문서 formal/99-10-07의 제13장 및 15장에서 CORBA 2.3.1 스펙에 대해 정의된 모든 GIOP 버전을 지원합니다. 이 문서는 다음에서 찾아볼 수 있습니다.

http://www.omg.org/cgi-bin/doc?formal/99-10-07

양방향 GIOP는 지원되지 않습니다.

### 휴대용 인터셉터 지원

이 SDK는 ptc/01-03-04 문서에서 OMG가 정의한 대로 휴대용 인터셉터를 지원합니다. 이 문서는 다음에서 찾아볼 수 있습니다.

http://www.omg.org/cgi-bin/doc?ptc/01-03-04

휴대용 인터셉터는 ORB 서비스가 ORB의 정상적인 실행 플로우를 인터셉트할 수 있는 ORB로 연결될 수 있습니다.

### 상호 운용 가능한 이름 지정 서비스 지원

이 SDK는 ptc/00-08-07 문서에서 OMG가 정의한 대로 상호 운용 가능한 이름 지정 서비스를 지원합니다. 이 문서는 다음에서 찾아볼 수 있습니다.

http://www.omg.org/cgi-bin/doc?ptc/00-08-07

ORBInitialPort 매개변수가 지정되지 않은 경우 임시 이름 서버(`tnameserv` 명령)에서 사용된 기본 포트는 900에서 2809로 변경되었습니다. 이 숫자는 CORBA 이름 지정 서비스에 대한 IANA(Internet Assigned Number Authority)에 등록된 포트 번호입니다. 이 기본값을 사용하는 프로그램의 경우 이 버전에서 작동하려면 갱신해야 할 수도 있습니다.

임시 이름 서버에서 리턴된 초기 컨텍스트는 이제 `org.omg.CosNaming.NamingContextExt`입니다. 참조 범위를 `org.omg.CosNaming.NamingContext` 컨텍스트로 좁힌 기존 프로그램은 계속해서 작동되므로 다시 컴파일할 필요가 없습니다.

ORB는 상호 운용 가능한 이름 지정 서비스 스펙에 의해 정의된 -ORBInitRef 및 -ORBDefaultInitRef 매개변수를 지원하며, ORB::string_to_object 조작은 상호 운용 가능한 이름 지정 서비스 스펙에 의해 정의된 ObjectURL 문자열 포맷(corbaloc: 및 corbaname:)을 지원합니다.

OMG는 ORB::register_initial_reference 메소드를 지정하여 상호 운용 가능한 이름 지정 서비스에 서비스를 등록합니다. 그러나 이 메소드는 버전 5.0의 Sun Java Core API에서는 사용할 수 없습니다. 현재 버전에서 서비스를 등록해야 하는 프로그램은 이 메소드를 IBM 내부 ORB 구현 클래스에서 호출해야 합니다. 예를 들어, "MyService" 서비스를 등록하려면 다음을 입력하십시오.

    ((com.ibm.CORBA.iiop.ORB)orb).register_initial_reference("MyService",
    serviceRef);

여기서, `orb`는 `org.omg.CORBA.ORB`의 인스턴스이며 `ORB.init()`에서 리턴됩니다. `serviceRef`는 CORBA 오브젝트이며 ORB에 연결됩니다. 이러한 메커니즘은 잠정적인 것이며, 추후 버전과 호환되지 않고 비IBM ORB에 이식할 수 없습니다.

### ORB 추적을 위한 시스템 등록 정보

런타임 디버그 기능은 개선된 서비스 가능성을 제공합니다. 이 기능은 문제점 진단에 유용하며 IBM 서비스 담당자에게도 유용할 수 있습니다. 추적은 세 가지 시스템 등록 정보에 의해 제어됩니다.

- 추적을 사용하려면 `com.ibm.CORBA.Debug=true`를 설정하십시오.
- 송신 및 수신한 추적 GIOP 메시지를 포맷하고 추가하려면 `com.ibm.CORBA.CommTrace=true`를 설정하십시오. 기본적으로 ORB 추적은 이름이 orbtrc.DDMMYYYY.HHmm.SS.txt 형식으로 된 파일로 전송됩니다.
- 다른 파일로 전송하려면 `com.ibm.CORBA.Debug.Output=<filename>`을 설정하십시오.

예를 들어, 이벤트 및 포맷된 GIOP 메시지를 추적하려면 다음을 입력하십시오.

     java -Dcom.ibm.CORBA.Debug=true
    		-Dcom.ibm.CORBA.CommTrace=true myapp

시스템 성능을 저하시킬 수 있으므로 정상 운영 시에는 추적을 사용하지 마십시오. 추적을 사용하지 않더라도 FFDC(First Failure Data Capture)가 작동하므로 심각한 오류는 보고됩니다. 디버그 출력 파일이 생성되면 이를 검토하여 문제점을 확인하십시오. 예를 들어, ORB.shutdown()을 수행하지 않고 서버가 중지했을 수 있습니다.

추적 결과물의 내용과 포맷은 버전에 따라 다를 수 있습니다.

### ORB 조정을 위한 시스템 등록 정보

다음 등록 정보를 사용하여 ORB를 조정할 수 있습니다.

- GIOP 1.2 단편화를 제어하려면 시스템 등록 정보 com.ibm.CORBA.FragmentSize를 설정하십시오.

  예를 들어, 단편 크기를 4096바이트로 설정하려면 다음을 입력하십시오.

      java -Dcom.ibm.CORBA.FragmentSize=4096 myapp

  기본 단편 크기는 1024바이트입니다. 단편 크기를 0으로 설정하면 단편화가 수행되지 않습니다.

- 이기종 네트워크에서 CORBA 요청에 대한 응답이 지연되거나 유실될 수 있습니다. 시스템 등록 정보 com.ibm.CORBA.RequestTimeout을 사용하여 최대 대기 시간을 설정할 수 있습니다. 또한 com.ibm.CORBA.LocateRequestTimeout을 사용하여 LocateRequests의 시간 종료를 제어할 수 있습니다. 예를 들어, 양쪽의 대기 시간을 30초로 제한하려면 다음을 입력하십시오.

      java -Dcom.ibm.CORBA.RequestTimeout=30
           -Dcom.ibm.CORBA.LocateRequestTimeout=30 myapp

  기본적으로 ORB는 응답을 무기한 기다립니다. 시간 종료를 너무 짧게 설정하여 불필요한 연결 종료가 발생하지 않도록 하십시오.

- 프로그램이 네트워크에서 서비스를 제공하고 있는 경우에는 잘 알려진 값(수신되는 요청을 ORB가 읽는 포트 번호)을 설정해야 할 수 있습니다. 시스템 등록 정보 com.ibm.CORBA.ListenerPort를 사용하여 이를 제어할 수 있습니다.

  예를 들어, ORB가 포트 1050을 사용하게 하려면 다음을 입력하십시오.

      java -Dcom.ibm.CORBA.ListenerPort=1050 myapp

  이 등록 정보가 설정되면 ORB는 초기화되자마자 청취하기 시작합니다. 그렇지 않으면 필요한 경우에만 청취를 시작합니다.

### ORB에 대한 Java 2 보안 권한

Java 2 SecurityManager를 함께 실행 중인 경우, CORBA API 클래스에 있는 일부 메소드를 호출하면 권한 확인이 실행되어 SecurityException이 발생할 수 있습니다. 관련 메소드에는 다음이 포함됩니다.

표 2. Java 2 SecurityManager와 함께 실행 시 영향을 받는 메소드
클래스/인터페이스 | 메소드 | 필수 권한
--- | --- | ---
org.omg.CORBA.ORB | init | java.net.SocketPermission 분석
org.omg.CORBA.ORB | connect | java.net.SocketPermission 청취
org.omg.CORBA.ORB | resolve_initial_references | java.net.SocketPermission 연결
org.omg.CORBA. portable.ObjectImpl | _is_a | java.net.SocketPermission 연결
org.omg.CORBA. portable.ObjectImpl | _non_existent | java.net.SocketPermission 연결
org.omg.CORBA. portable.ObjectImpl | OutputStream _request(문자열, 부울) | java.net.SocketPermission 연결
org.omg.CORBA. portable.ObjectImpl | _get_interface_def | java.net.SocketPermission 연결
org.omg.CORBA. Request | invoke | java.net.SocketPermission 연결
org.omg.CORBA. Request | send_deferred | java.net.SocketPermission 연결
org.omg.CORBA. Request | send_oneway | java.net.SocketPermission 연결
javax.rmi. PortableRemoteObject | narrow | java.net.SocketPermission 연결

프로그램이 이러한 메소드를 사용하는 경우, 필요한 권한을 부여받아야 합니다.

### ORB 구현 클래스

이 릴리스의 ORB 구현 클래스는 다음과 같습니다.

- org.omg.CORBA.ORBClass=com.ibm.CORBA.iiop.ORB
- org.omg.CORBA.ORBSingletonClass=com.ibm.rmi.corba.ORBSingleton
- javax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.UtilDelegateImpl
- javax.rmi.CORBA.StubClass=com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl
- javax.rmi.CORBA.PortableRemoteObjectClass= com.ibm.rmi.javax.rmi.PortableRemoteObject

이것이 기본값이며, 이러한 등록 정보를 설정하거나 구현 클래스를 직접 참조하지 않는 것이 좋습니다. 이식성의 경우, 구현이 아닌 CORBA API 클래스에 대한 참조만 작성하십시오. 이 값은 추후 릴리스에서 변경될 수 있습니다.

## RMI over IIOP

Java RMI(Remote Method Invocation)는 분산된 Java 프로그래밍을 수행하는 간단한 메커니즘을 제공합니다. RMI-IIOP(RMI over IIOP)는 기본 Java RMI를 확장하여 통신을 수행하기 위해 CORBA(Common Object Request Broker Architecture) 표준 IIOP 프로토콜(Internet Inter-ORB Protocol)을 사용합니다. 이를 사용하면 CORBA ORB(Object Request Brokers)가 Java로 구현되었거나 다른 프로그래밍 언어로 구현되었거나에 상관없이 기타 다른 CORBA ORB와 직접 상호 작동할 수 있습니다.

다음 문서를 참조하십시오.

- RMI-IIOP Programmer's Guide는 RMI-IIOP 프로그램 작성에 대해 설명합니다. 이 문서를 설치할 때 해당 안내서가 설치됩니다.
- 데모 디렉토리에는 다음이 포함됩니다.
  - JRMP(Java Remote Method Protocol)와 IIOP 프로토콜 간에 전환할 수 있는 "Hello World" 예제(demo\rmi-iiop\hello)
  - 표준 IDL 프로그램과 상호 작동하는 "Hello World" 예제(demo\rmi-iiop\idl)
- Java Language to IDL Mapping 문서는 RMI-IIOP에 대한 자세한 기술 스펙이며 다음에서 찾아볼 수 있습니다.
  http://www.omg.org/cgi-bin/doc?ptc/00-01-06.pdf

## RMI용 연결 핸들러 풀 구현

기본적으로 RMI 연결 핸들러의 스레드 풀링은 사용할 수 없습니다.

RMI TCPTransport 레벨에서 구현된 연결 풀링을 사용 가능하게 하려면 다음 옵션을 설정하십시오.

    -Dsun.rmi.transport.tcp.connectionPool=true(또는 null이 아닌 값)

이 버전의 Runtime Environment에는 연결 풀의 스레드 수를 제한할 수 있는 설정이 없습니다.

자세한 정보를 보려면 Sun Java 웹 사이트(http://java.sun.com)을 참조하십시오.

## 개선된 양방향 지원

IBM SDK는 개선된 양방향 지원을 제공합니다. 자세한 정보를 보려면 http://www-106.ibm.com/developerworks/java/jdk/bidirectional/index.html을 참조하십시오. BiDirectional 패키지의 Javadoc는 docs/apidoc.zip 파일에 SDK와 함께 제공됩니다.

## 개선된 BigDecimal

| |

Sun사는 Java 5.0에서 IBM BigDecimal 클래스를 java.math.BigDecimal로 채택했습니다. |따라서 IBM은 더 이상 com.ibm.math.BigDecimal을 유지하지 않으며 더 이상 지원하지 않음으로 선언했습니다. |기존 Java 코드를 이주하여 java.math.BigDecimal을 사용하도록 하십시오.

|

새 java.math.BigDecimal은 이전의 |java.math.BigDecimal과 com.ibm.math.BigDecimal 모두와 동일한 메소드를 사용합니다. java.math.BigDecimal을 |사용하는 기존 코드는 계속해서 제대로 작동합니다.

|

java.math.BigDecimal 클래스를 사용하도록 기존 Java 코드를 이주하려면 |java 파일 맨 위의 import 명령문을 `import com.ibm.math.*;`에서 |`import java.math,*;`로 변경하십시오.

## Euro 기호 지원

IBM SDK 및 Runtime Environment는 유럽통화동맹(EMU)에 속한 국가의 기본 통화를 2002년 1월 1일 이후로 Euro로 설정합니다.

기존의 통화 단위를 사용하려면 Java 명령행에서 `-Duser.variant=PREEURO`를 지정하십시오.

현재 영어(영국), 덴마크어 또는 스웨덴어 로케일은 실행 중이며 Euro를 사용하고자 하는 경우, Java 명령행에서 `-Duser.variant=EURO`를 지정하십시오.

# Java Communications API(JavaComm) 사용

Java Communications API(Application Programming Interface) 패키지(JavaComm)는 IA32, PPC32/PPC64 및 AMD64/EM64T 플랫폼에서 Windows용 Runtime Environment와 함께 사용하도록 제공된 선택적 패키지입니다. JavaComm은 SDK 또는 Runtime Environment와 독립적으로 설치합니다.

JavaComm API는 음성 메일, 팩스 및 스마트 카드 등의 기술에 대해 플랫폼과 독립적으로 직렬 및 병렬 포트 통신을 수행하는 방법을 Java 응용프로그램에 제공합니다. 응용프로그램의 직렬 또는 병렬 포트 통신을 쓴 다음, 해당 파일을 응용프로그램에 포함시킬 수 있습니다.

Java Communications API는 EIA(Electronic Industries Association)-232 (RS232) 직렬 포트 및 IEEE(Institute of Electrical and Electronics Engineers) 1284 병령 포트를 지원하며 IBM 버전 5.0 Runtime Environment가 설치된 시스템에서 지원됩니다.

Java Communications API를 사용하여 다음을 수행할 수 있습니다.

- 시스템에 포트 나열
- 포트 소유권 개방 및 청구
- Java Communications API를 사용하는 응용프로그램 간의 포트 소유권 경합 해소
- 이벤트 공고를 통해 비동기 및 동기 I/O 포트 모니터링 수행
- 포트 상태 변경을 설명하는 Bean 양식 이벤트 수신

## Java Communications API 설치

Java Communications API를 설치하기 전에 SDK 또는 Runtime Environment의 사본이 설치되어 있어야 합니다.

Java Communications API를 zip 파일에서 설치하려면 다음을 수행하십시오.

1. Java Communications API zip 파일인 ibm-java2-javacomm-50-win-i386.zip을 SDK 또는 Runtime Environment가 설치된 디렉토리에 두십시오. 기본 디렉토리에 설치한 경우, 이 디렉토리는 C:\Program Files\IBM\Java50\입니다.
2. 압축 파일을 해제하십시오. 파일은 다음과 같이 추출됩니다.
   - jre\lib\ext\comm.jar
   - jre\bin\ibmcomm.dll
   - jre\lib\javax.comm.properties
   - docs\javacomm\License.html

   Runtime Environment 설치 시 기본 디렉토리를 선택한 경우, comm.jar 파일은 C:\Program Files\IBM\Java50\jre\lib\ext에 있습니다.

   다른 디렉토리에서 압축 파일을 해제한 경우에도 파일은 동일한 디렉토리 구조에 있으나 C:\Program Files\IBM\Java50\은 압축 파일을 해제한 디렉토리로 바뀝니다.

## Java Communications API 구성

Java Communications API를 설치한 후, 다음을 수행해야 합니다.

- 직렬 및 병렬 포트의 액세스 모드를 변경하십시오.
- Java 설치 시 PATH를 설정하지 않았다면 지금 설정하십시오. PATH 설정을 참조하십시오.

## Java Communications API의 인쇄 제한사항

Java Communications API로 인쇄하는 경우, 프린터에서 "용지 넘김" 또는 "계속" 또는 이와 유사한 기능 단추를 눌러야 할 수 있습니다.

## Java Communications API 설치 제거

Java Communications API를 설치 제거하려면 Runtime Environment를 설치한 디렉토리에서 다음 파일을 삭제하십시오.

- jre\lib\ext\comm.jar
- jre\bin\ibmcomm.dll
- jre\lib\javax.comm.properties
- docs\javacomm\License.html

기본적으로 Runtime Environment는 C:\Program Files\IBM\Java50\ 디렉토리에 설치되어 있습니다.

## Java Communications API 문서

Java Communications API에 대한 API 문서 및 샘플은 Sun 웹 사이트(http://java.sun.com)에서 찾아 볼 수 있습니다.

# Java 응용프로그램 전개

## Java Plug-in 사용

Java Plug-in은 웹 브라우저 플러그인입니다. Java Plug-in을 사용하는 경우, 웹 브라우저의 기본 JVM을 생략하고 대신 Runtime Environment를 사용하여 브라우저에서 애플릿 또는 Bean을 실행할 수 있습니다.

브라우저가 '정지'하지 않도록 하려면 애플릿이 로드를 완료하도록 해야 합니다. 예를 들어, 애플릿이 로드하는 동안 뒤로 단추와 앞으로 단추를 차례로 사용하면 HTML 페이지가 로드할 수 없을 수 있습니다.

Java Plug-in에 대한 Sun의 문서는 http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/에 설명되어 있습니다.

### 지원되는 브라우저

|

|표 3. Java Plug-in 지원 브라우저
|운영 체제 | |Internet Explorer | |Netscape | |Mozilla
--- | --- | --- | ---
|Windows 2000 | |5.5 SP2, 6.0 | |4.78, 6.2.2, 7.2 | |1.4.x, 1.5.x, 1.6.x, 1.7.x, Firefox 1.0.x
|Windows XP | |6.0 | |4.78, 6.2.2, 7.2 | |1.4.x, 1.5.x, 1.6.x, 1.7.x, Firefox 1.0.x
|Windows Server 2003 | |6.0 | |4.78, 6.2.2, 7.2 | |1.4.x, 1.5.x, 1.6.x, 1.7.x, Firefox 1.0.x

|

Windows 2000용 기본 브라우저, Internet Explorer 5.01은 |지원되지 않습니다.

### 일반 DOM(Document Object Model) 지원

특정 브라우저의 제한사항 때문에 org.w3c.dom.html 패키지의 모든 기능을 구현하지 못할 수도 있습니다.

- 이들 일부 기능에 대해서는 sun.plugin.dom.exception.NotSupportedException이 발생합니다.
- 브라우저가 특정 기능을 지원하지 않을 경우 sun.plugin.dom.exception.InvalidStateException이 발생합니다.

### DBCS 매개변수 사용

Java Plug-in은 `<APPLET>`, `<OBJECT>` 및 `<EMBED>`에 대해 2바이트 문자(예: 대만어 BIG-5, 한국어, 일본어)를 매개변수로 지원합니다. Java Plug-in이 매개변수를 구문 분석할 수 있도록 사용 중인 HTML 문서에 대해 정확한 문자 인코딩을 선택해야 합니다. 다음과 같이 `<HEAD>` 섹션에 `<META>` 태그를 사용하여 HTML 문서에 대한 문자 인코딩을 지정하십시오.

    <meta http-equiv="Content-Type" content="text/html; charset=big5">

이 예제에서는 중국어 BIG-5 문자 인코딩을 사용하여 HTML 파일 사용을 구문 분석하도록 브라우저에 지시합니다. 모든 매개변수가 Java Plug-in에 정확하게 전달됩니다. 그러나 일부 이전 버전의 브라우저는 이 태그를 정확하게 이해하지 못할 수도 있습니다. 이 경우, 브라우저가 이 태그를 강제로 무시하도록 한 후 인코딩을 수동으로 변경해야 할 수 있습니다.

다음과 같이 하여 HTML 파일의 구문 분석에 사용할 인코딩을 지정할 수 있습니다.

- Internet Explorer 5/6: 보기 메뉴 -> 인코딩
- Netscape 4: 보기 메뉴 -> 문자 세트
- Netscape 6: 보기 메뉴 -> 문자 코딩

## Web Start 사용

Java Web Start를 사용하여 Java 응용프로그램을 전개할 수 있습니다. 사용자는 Web Start를 사용하여 웹에서 응용프로그램을 직접 실행하고 관리할 수 있습니다. Java Web Start를 사용하면 웹에서 응용프로그램을 쉽게 시작할 수 있고 설치 또는 업그레이드 프로시저없이 최신 버전을 실행하게 됩니다. Java Web Start는 장황한 설치 옵션을 생략하여 소프트웨어의 다운로드 및 설치가 필요없도록 합니다.

|Web Start는 http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html#resources에 설명된 java-vm-args에 추가하여, 가비지 콜렉션 정책을 설정하는 -Xgcpolicy를 |지원합니다.

Web Start를 지원하는 브라우저에 대한 정보는 지원되는 브라우저를 참조하십시오.

Web Start에 대한 자세한 정보는 http://java.sun.com/products/javawebstart 및 http://java.sun.com/j2se/1.5.0/docs/guide/javaws/index.html을 참조하십시오. 응용프로그램 전개에 대한 자세한 정보는 http://java.sun.com/j2se/1.5.0/docs/guide/deployment/index.html을 참조하십시오.

### Web Start 실행

Web Start는 다음 세 가지 방법으로 호출할 수 있습니다.

1. .jnlp 파일을 참조하는 웹 페이지의 링크를 선택하십시오.
2. 명령 프롬프트에서 `javaws <URL>`을 입력하십시오. 여기서, `<URL>`은 .jnlp 파일의 위치입니다.
3. |Java Web Start를 사용하여 응용프로그램을 이미 연 경우에는 javaws를 jre\bin 디렉토리에서 실행하여 Java 응용프로그램 캐시 뷰어를 실행하십시오.

응용프로그램을 다운로드하면 응용프로그램은 Java 응용프로그램 캐시에 저장됩니다. 응용프로그램에 다시 액세스하면 Java Web Start는 응용프로그램의 사용 가능한 최근 버전이 있는 경우 이를 다운로드하고, 없으면 캐시된 버전을 사용합니다.

.jnlp 파일에 오류가 발생하면(예: 잘못된 태그 이름) Web Start는 오류 메시지를 표시하지 않고 중단됩니다.

## Java 응용프로그램 제공

Java 애플릿과 달리, Java 응용프로그램은 설치 및 런타임 서비스를 웹 브라우저에 의존할 수 없습니다. Java 응용프로그램을 제공하는 경우, 소프트웨어 패키지는 다음 파트로 이루어질 수 있습니다.

- 사용자 자신의 클래스, 자원 및 데이터 파일
- 설치 프로시저 또는 프로그램

응용프로그램을 실행하려면 사용자에게 Windows용 Runtime Environment가 필요합니다. Windows용 SDK 소프트웨어에는 Runtime Environment가 포함되어 있습니다. 그러나 사용자에게 Windows용 SDK가 설치되어 있다고 전제할 수 없습니다.

Windows용 SDK 소프트웨어 라이센스에 따라, 귀하는 응용프로그램과 함께 SDK의 파일을 재배포할 수 없습니다. 라이센스를 취득한 Windows용 SDK의 버전이 대상 시스템에 설치되어 있는지 확인하십시오.

| | |

# JVM 간 클래스 데이터 공유

|

IBM Virtual Machine(VM)을 사용하면 부트스트랩 및 응용프로그램 클래스를 |공유 메모리의 캐시에 저장하여 VM 간에 공유할 수 있습니다. 클래스를 공유하면 둘 이상의 VM이 |캐시를 공유하는 경우 전반적인 가상 메모리의 소비가 줄어 듭니다. |클래스를 공유하면 캐시 작성 후 VM의 시작 시간도 |단축됩니다. 공유 클래스 캐시는 활성 VM과는 독립적이며 |캐시를 시작한 VM의 수명이 경과한 후에도 지속됩니다.

| |

## 클래스 공유의 개요

|

IBM SDK를 사용하면 사용자에게 투명하게 표시하면서도 클래스를 가능한 많이 공유할 수 있습니다.

| |

### 캐시 내용

|

공유 클래스 캐시에는 클래스를 설명하는 메타데이터 및 읽기 전용 static 클래스 |데이터가 들어 있습니다. 모든 VM은 캐시를 읽거나 갱신할 수 있습니다. 공유 중인 VM은 |동일한 릴리스에 있어야 합니다. 런타임 바이트 코드 수정이 사용되고 있는지 확인해야 합니다(런타임 바이트 코드 수정 참조).

| |

### 캐시의 동적 갱신

|

공유 클래스 캐시는 VM의 수명보다 오래 지속되므로 |캐시는 파일 시스템의 클래스 또는 JAR에 대한 모든 수정사항을 |반영하도록 동적으로 갱신됩니다. 동적 갱신으로 인해 |캐시는 캐시를 사용하는 응용프로그램에 대해 투명해질 수 있습니다.

| |

### 클래스 공유 사용

|

VM 시작 시 -Xshareclasses 옵션을 사용하여 클래스 공유를 |사용 가능하게 하면 VM은 기존 캐시에 연결되거나 캐시가 없으면 |캐시를 작성합니다. 기본적으로 VM에 의해 로드된 모든 부트스트랩 및 |응용프로그램 클래스가 공유됩니다. 사용자 정의 Classloader는 응용프로그램 |Classloader를 확장하면 자동으로 공유됩니다. 그렇지 않으면, VM과 함께 제공된 |Java Helper API를 사용하여 캐시에 액세스해야 합니다(사용자 정의 Classloader를 공유 클래스에 적용 참조).

| |

### 캐시 보안

|

공유 클래스 캐시에 대한 액세스는 운영 체제 권한과 Java 보안 권한에 따라 제한됩니다. 클래스를 공유하도록 등록한 Classloader만 공유 클래스 캐시에 클래스를 추가할 수 있습니다. Java SecurityManager가 설치되면 SharedClassPermission을 java.policy 파일에 추가하는 방법으로 기본 부트스트랩, 응용프로그램 및 확장 Classloader를 제외한 ClassLoaders에 클래스를 공유하는 권한이 부여됩니다(SharedClassPermission 사용 참조). |RuntimePermission "createClassLoader"가 새 ClassLoaders의 작성을 제한하므로 캐시에 대한 액세스도 제한하게 됩니다.

| |

### 캐시 수명

|

시스템에는 여러 개의 캐시가 존재할 수 있으며 |-Xshareclasses 명령의 하위 옵션 이름별로 지정됩니다. VM은 한 번에 하나의 캐시에만 연결할 수 있습니다. 캐시 크기는 시작 시 -Xscmx<n>[k|m|g]를 사용하여 지정하며 이 크기는 캐시의 수명 동안 |계속 유지됩니다. 캐시는 -Xshareclasses 명령의 하위 옵션을 사용하여 |명시적으로 파기하거나 시스템을 재시동할 때까지 |존재합니다.

| |

### 캐시 유틸리티

|

모든 캐시 유틸리티는 -Xshareclasses 명령의 하위 옵션입니다. 사용 가능한 하위 옵션 목록을 보려면 |-Xshareclasses:help를 사용하십시오.

| |

## 클래스 공유를 위한 명령행 옵션 사용

|

-Xshareclasses 및 -Xscmx 명령행 옵션을 사용하여 클래스 공유를 사용 가능하게 구성할 수 있습니다.

|

|
- -Xscmx<size>[k|m|g] | |
  |
  - 캐시 크기를 지정합니다. 이 옵션은 캐시가 작성 중이고 기존 캐시의 이름이 같지 않은 경우에만 적용됩니다. 기본 캐시 크기는 플랫폼에 따라 다릅니다. |명령행 인수로 -verbose:sizes를 추가함으로써 사용 중인 크기 값을 찾을 수 있습니다. 최소 캐시 크기는 4KB입니다. 최대 캐시 크기도 플랫폼에 따라 다릅니다(캐시 크기 제한 참조).
|
- -Xshareclasses:<suboption1>[,<suboption2>...] | |
  |
  - 클래스 공유를 사용 가능하게 합니다. 여러 하위 옵션을 선택할 수 있으며 일부는 |캐시 유틸리티입니다. 캐시 유틸리티는 VM을 시작하지 않고 지정된 캐시에 대해 |필요한 작업을 수행합니다. 여러 하위 옵션을 쉼표로 분리하여 결합할 수 있으나, |캐시 유틸리티는 상호 배타적입니다.
  |-Xshareclasses 옵션과 함께 다음 하위 옵션을 사용할 수 있습니다. 예를 들어, -Xshareclasses:help와 같습니다. | |
  |
  - help | |
    |
    - 모든 명령행 옵션을 나열합니다.
  |
  - name=<name> | |
    |
    - 제공된 이름으로 캐시에 연결합니다. 캐시가 없으면 캐시를 |작성합니다. 현재 사용 가능한 캐시를 표시하려면 listAllCaches 유틸리티 옵션을 |사용하십시오. 이름을 지정하지 않으면 기본 이름인 "sharedcc_"가 캐시 이름을 작성하기 위해 추가된 현재 사용자 이름과 함께 조합됩니다.
  |
  - verbose | |
    |
    - Verbose는 저장 및 발견된 클래스에 대한 정보와 함께 캐시 I/O 활동에 대한 |자세한 출력을 제공합니다. 각 Classloader에는 고유한 ID(부트스트랩 |로더는 항상 0)가 부여되며 출력은 작업 시 Classloader 계층 구조를 |표시합니다. 여기서, Classloader가 스스로 클래스를 로드하려면 |먼저 해당 클래스를 상위에 요청해야 합니다. 요청이 실패하는 경우는 흔한 일이며 Classloader 계층 구조에서 정상적으로 예상되는 작동입니다. 표준 옵션 -verbose:class는 공유 클래스가 사용 가능한 경우 클래스 공유 verbose 출력도 사용할 수 있습니다.
  |
  - modified=<modified context> | |
    |
    - 이 옵션은 바이트 코드 에이전트가 설치되어 런타임 시 바이트 코드를 |수정할 수 있는 경우에 필요합니다. 이 옵션을 지정하지 않고 |바이트 코드 에이전트가 설치되어 있는 경우, 클래스가 캐시에 저장되지 않거나 캐시에서 찾을 수 없습니다. <modified context>는 사용자가 선택한 설명자입니다. 예를 들면 |"myModification1"입니다. 이것은 캐시를 분할하므로 |컨텍스트 myModification1을 사용하는 JVM만 동일한 클래스를 공유할 수 있습니다. 예를 들어, 수정 컨텍스트로 "HelloWorld"를 |실행한 다음, 다른 수정 컨텍스트로 다시 실행하면 |모든 클래스가 캐시에 두 번 저장됩니다.
  |
  - destroy(유틸리티 옵션) | |
    |
    - name=<name> 하위 옵션에서 지정된 이름을 사용하여 캐시를 파기합니다. 이름을 지정하지 않으면 |기본 캐시가 파기됩니다. 캐시를 사용하는 |모든 VM이 종료되고 사용자가 적절한 권한을 가지고 있는 경우에만 캐시를 파기할 수 있습니다.
  |
  - destroyAll(유틸리티 옵션) | |
    |
    - 사용자가 사용할 수 있는 모든 캐시를 파기합니다. 캐시를 사용하는 |모든 VM이 종료되고 사용자가 적절한 권한을 가지고 있는 경우에만 캐시를 파기할 수 있습니다.
  |
  - expire=<time in minutes>(유틸리티 옵션) | |
    |
    - 지정된 시간 동안 사용하지 않은 모든 캐시를 파기합니다.
  |
  - listAllCaches(유틸리티 옵션) | |
    |
    - 시스템에 있는 모든 캐시를 나열하면서 현재 사용 중인지 여부 및 마지막으로 사용된 시점을 함께 알려줍니다.
  |
  - printStats(유틸리티 옵션) | |
    |
    - name=<name> 하위 옵션에 지정된 캐시에 대한 |요약 통계 정보를 표시합니다. 이름을 지정하지 않으면 기본 캐시에 대한 통계가 표시됩니다. |가장 유용한 정보는 |캐시가 채워진 정도와 포함된 클래스 수에 대한 것입니다. |"stale" 클래스는 파일 시스템에서 갱신된 클래스로 |캐시가 "stale"이라고 표시합니다. stale |클래스는 캐시에서 제거되지 않습니다. 자세한 정보는 진단 안내서를 참조하십시오.
  |
  - printAllStats(유틸리티 옵션) | |
    |
    - name=<name> 하위 옵션에서 지정한 |캐시의 내용에 대한 자세한 정보를 표시합니다. |이름이 지정되지 않으면 기본 캐시에 대한 통계가 표시됩니다. |각 클래스는 로드된 위치에 대한 참조와 함께 연대순으로 |나열됩니다. 자세한 정보는 진단 안내서를 참조하십시오.

| |

## 캐시 작성, 채우기, 모니터링 및 삭제

|

클래스 공유를 사용 가능하게 하려면 응용프로그램 명령행에 -Xshareclasses[:name=<name>]을 추가하십시오. VM은 지정된 이름의 기존 캐시에 |연결하거나 해당 이름으로 된 새 캐시를 작성합니다. 새 캐시가 작성된 경우 해당 캐시가 모두 채워질 때까지 로드 중인 모든 부트스트랩 및 응용프로그램으로 채워집니다. 둘 이상의 VM이 동시에 시작하면 |동시에 캐시를 모두 채웁니다.

|

캐시가 작성되었는지 확인하려면 `java -Xshareclasses:listAllCaches`를 실행하십시오. 공유 중인 클래스 수 및 클래스 데이터량을 확인하려면 `java -Xshareclasses:[name=<name>],printStats`를 실행하십시오(이들 유틸리티는 |응용프로그램 VM이 종료된 후 또는 다른 명령 창에서 실행될 수 있음).

|

캐시에서 로드되거나 캐시에 저장된 클래스를 보려면 응용프로그램 명령행에 `-Xshareclasses:[name=<name>],verbose`를 |추가하십시오.

|

작성된 캐시를 삭제하려면 `java -Xshareclasses:[name=<name>],delete`를 실행하십시오. 캐시에 stale 클래스가 많거나 캐시가 가득 차서 |더 큰 캐시를 작성하려는 경우에만 캐시를 삭제해야 합니다.

|

기본값이 최적의 크기가 아니므로 특정 응용프로그램에 대한 캐시 크기를 조정하는 것이 좋습니다. 최적의 캐시 크기를 결정하는 가장 좋은 방법은 대규모 캐시를 지정(-Xscmx 사용)하고 응용프로그램을 실행한 다음 printStats를 사용하여 얼마나 많은 클래스 데이터가 저장되었는지 확인하는 것입니다. 만일의 경우에 대비하여 printStats에 표시된 값에 소량씩 추가하십시오. 클래스는 VM의 수명 주기 동안 언제든지 로드될 수 있으므로 이러한 분석은 응용프로그램이 종료된 후 수행하는 것이 좋습니다. 그러나 가득 찬 캐시에 연결된 VM의 성능이나 기능에 부정적인 영향은 없으므로 필요한 양보다 적은 캐시 크기를 결정하는 것이 적합합니다.

|

캐시가 가득 차면 캐시를 사용하는 모든 VM의 명령행에 메시지가 출력되고 해당 프로세스 메모리로 클래스를 로드하게 됩니다. 가득 찬 캐시의 클래스는 계속 공유되지만, |가득 찬 캐시는 읽기 전용이므로 새 클래스로 갱신할 수 없습니다.

| |

## 성능 및 메모리 소모

|

클래스 공유는 비슷한 코드를 실행하는 VM을 둘 이상 사용하는 시스템에서 |특히 유용하며 가상 메모리 소모량이 감소되는 장점이 있습니다. |또한 VM을 자주 시작하고 종료하는 시스템에서도 유용하며 |시작 시간 개선에 효과가 있습니다.

|

새 캐시를 작성하고 채우는 오버헤드는 소량입니다. 단일 VM의 시작 시간 비용은 보통 0% - 5%으로, 클래스 공유를 사용하지 않는 시스템에 비해 느립니다. 채워진 캐시에 따른 VM 시작 시간의 개선 정도는 보통 10% - 40%으로, 클래스 공유를 사용하지 않는 시스템에 비해 빠릅니다. |현재 실행 중인 다중 VM을 통해 전반적으로 시작 시간이 현저히 개선됨을 알 수 있습니다.

|

클래스를 공유하여 응용프로그램을 실행하는 경우, 운영 체제 도구를 사용하면 |가상 메모리 소모의 감소량을 살펴볼 수 있습니다.

| |

## 클래스 공유 사용의 제한사항 및 고려사항

| |

### 캐시 크기 제한

|

이론적으로 최대 캐시 크기는 2GB가 됩니다. 캐시는 몇 가지 요인으로 제한됩니다.

|

|

|
- 사용 가능한 디스크 공간. 사용자의 프로파일 아래의 "javasharedresources" 디렉토리에 클래스 데이터를 저장하도록 디스크에 파일이 작성됩니다. 이 사용자 프로파일 디렉토리는 일반적으로 C:\Documents and Settings\<username>\Application Data\로 설정됩니다. |이 파일은 |Windows를 다시 시작할 때마다 삭제됩니다.
|
- 사용 가능한 가상 주소 공간. 프로세스의 가상 주소 공간이 공유 클래스 캐시와 Java 힙 사이에 공유되어 있으므로 Java 힙의 최대 크기를 늘리면 사용자가 작성할 수 있는 공유 클래스 캐시의 크기가 줄어듭니다.

| |

### 런타임 바이트 코드 수정

|

바이트 코드를 수정할 수 있는 JVMTI 에이전트를 사용하는 |VM은 명령행에 modified=<modified_context> 하위 옵션을 사용하지 않을 경우 |클래스를 공유할 수 없습니다(위의 내용 참조). 수정된 컨텍스트는 |수행할 수정 유형을 설명하는, 사용자가 지정된 설명자입니다. 제공된 수정 컨텍스트를 |사용하는 모든 VM은 각 클래스에 대해 예측 가능하고 반복 가능한 방법으로 |바이트 코드를 수정해야 합니다. 그래야만 캐시에 저장된 수정된 클래스가 |다른 VM에 의해 로드될 때 예상된 수정을 가지게 됩니다. 공유 클래스 캐시에서 로드된 클래스는 에이전트가 다시 수정할 수 없기 때문에 수정을 예측할 수 있어야 합니다. 수정된 바이트 코드와 미수정된 |바이트 코드는 동일한 캐시에 저장될 수 있습니다. 이 주제에 대한 자세한 내용은 진단 안내서를 참조하십시오.

| |

### 운영 체제 제한사항

|

32비트 및 64비트 응용프로그램을 모두 실행할 수 있는 |운영 체제의 경우에도, 32비트 및 64비트 VM 간에 클래스는 공유할 수 없습니다. |listAllCaches 하위 옵션은 사용할 VM의 주소 모드에 따라 |32비트 또는 64비트 캐시를 나열합니다.

|

공유 클래스 캐시에는 시스템에 있는 캐시의 ID 정보를 저장할 |디스크 공간이 필요합니다. 이 정보는 |사용자 프로파일 디렉토리에 있습니다. ID 정보 디렉토리가 삭제되면 |VM은 시스템에 대한 공유 클래스를 식별할 수 없으며 |캐시를 다시 작성해야 합니다.

|

공유 클래스 캐시에 액세스하는 권한은 운영 체제에서 집행합니다. 캐시 이름이 지정되지 않으면 |기본적으로 동일한 시스템에 있는 여러 사용자가 각자의 캐시를 작성할 수 있도록 |사용자 이름이 기본 이름에 첨부됩니다.

| |

### SharedClassPermission 사용

|

SecurityManager는 클래스 공유와 결합하여 사용되고 실행 중인 응용프로그램에서 자체 Classloader를 사용하는 경우, |클래스를 공유하기 전에 먼저 SharedClassPermission이 부여되어야 합니다. 부여된 액세스 권한을 확인하려면 "read", "write" |또는 "read,write" 중 하나와 ClassLoader 클래스 이름(와일드카드 허용)을 사용하여 SharedClassPermission을 java.policy 파일에 추가하십시오. |예를 들면 다음과 같습니다. |

|

    permission com.ibm.oti.shared.SharedClassPermission "com.abc.customclassloaders.*", "read,write";

ClassLoader에 정확한 SharedClassPermission이 없는데 클래스 공유를 시도하는 경우 AccessControlException이 발생합니다. 기본 부트스트랩, 응용프로그램 또는 확장 Classloader의 사용 권한을 변경하거나 줄일 수 없습니다.

| |

## 사용자 정의 Classloader를 공유 클래스에 적용

|

대부분의 Java 응용프로그램은 VM의 자체 Classloader를 사용하거나 |java/net/URLClassLoader를 확장하는 사용자 정의 Classloader를 가집니다. 이러한 Classloader를 사용하는 응용프로그램은 자동으로 부트스트랩과 응용프로그램 클래스를 공유할 수 있게 됩니다. java/net/URLClassLoader를 확장하지 않는 사용자 정의 Classloader는 |수정에서 클래스 공유를 사용하도록 해야 합니다. 모든 사용자 정의 Classloader는 SecurityManager가 사용 중인 경우 SharedClassPermission이 부여되어야 합니다. SharedClassPermission 사용을 참조하십시오. IBM은 사용자 정의 Classloader 유형에 대한 |몇 가지 Java 인터페이스를 제공합니다. 이를 통해 Classloader는 공유 클래스 캐시에서 |클래스를 찾고 저장할 수 있습니다. 이 클래스는 com.ibm.oti.shared 패키지에 있습니다. 이 패키지의 Javadoc는 docs/apidoc.zip 파일에 SDK와 함께 제공됩니다. 이들 인터페이스 사용 방법에 대한 |자세한 정보는 진단 |안내서를 참조하십시오.

# 독립 소프트웨어 벤더를 위한 서비스 및 지원

귀하가 IBM 솔루션 개발자 프로그램에 의거하여 프로그램 코드에 대한 서비스를 제공받을 수 있는 권한이 있는 경우에는 일반 문의 방법이나 웹 사이트(http://www-1.ibm.com/partnerworld/)를 통해 IBM 솔루션 개발자 프로그램에 접속하십시오.

귀하가 서비스 계약(즉, IBM의 개인 시스템 지원 라인 또는 그와 동등한 수준의 국가별 서비스)을 취득한 경우에는 해당 서비스 계약의 조건에 준하여 프로그램에 대한 서비스를 제공받을 수 있습니다.

# 액세스 가능성

이 SDK 및 Runtime Environment에 제공된 사용자 안내서는 화면 판독기로 테스트되었습니다. 홈 페이지 판독기 또는 JAWS 화면 판독기와 같은 화면 판독기를 사용자 안내서와 함께 사용할 수 있습니다.

사용자 안내서의 글꼴 크기를 변경하려면 일반적으로 브라우저의 보기 메뉴 옵션 아래에 있는 기능을 사용하십시오.

키보드 탐색이 필요한 사용자의 경우, Swing 응용프로그램에 대한 유용한 키스트로크 설명은 "Swing 키 바인딩"(http://www-128.ibm.com/developerworks/java/jdk/additional/)에서 확인할 수 있습니다.

## iKeyman 액세스 가능성

|GUI와 함께 iKeyman 도구를 통해 명령행 도구 IKEYCMD를 사용할 수 있는데, 이 도구에는 iKeyman GUI와 동일한 기능이 있습니다. IKEYCMD를 사용하여 키, 인증서 및 |인증 요청을 관리할 수 있습니다. IKEYCMD는 원본 쉘 스크립트에서 호출할 수 있으며 응용프로그램에서 인증 및 키 관리 태스크에 |사용자 정의 인터페이스를 추가해야 하는 경우 사용하는 프로그램에서도 호출할 수 |있습니다. IKEYCMD는 iKeyman이 현재 지원하는 모든 유형의 |키 데이터베이스 파일을 작성할 수 있습니다. IKEYCMD는 또한 |인증 요청을 작성할 수 있고 CA 서명 인증서를 가져올 수 있으며 자체 서명된 인증서를 |관리할 수 있습니다.

IKEYCMD 명령을 실행하려면 다음을 입력하십시오.

    java [-Dikeycmd.properties=<properties file>]com.ibm.gsk.ikeyman.ikeycmd
    <object> <action> [options]

여기서, 각 인수는 다음을 의미합니다.

<object>
  다음 중 하나입니다.
  -keydb
    키 데이터베이스(CMS 키 데이터베이스 파일, WebDB 키링 파일 또는 SSLight 클래스 중 하나)에 대한 조치입니다.
  -cert
    키 데이터베이스 내 인증에 수행될 조치입니다.
  -certreq
    키 데이터베이스 내 인증 요청에 수행될 조치입니다.
  -version
    IKEYCMD에 대한 버전 정보를 표시합니다.
  -help
    IKEYCMD 호출에 대한 도움말을 표시합니다.
<action>
  |오브젝트에 대한 특정 조치입니다. 오브젝트에 사용 가능한 조치를 보려면 인수로 오브젝트만 전달하는 IKEYCMD를 호출하십시오. 컨텍스트 도움말이 나타나 해당 오브젝트에 사용 가능한 조치를 표시합니다.
-Dikeycmd.properties
  이 Java 호출에 대해 사용하는 선택적 등록 정보 파일의 이름을 지정합니다. 기본 등록 정보 파일인 ikeycmd.properties는 모든 Java 응용프로그램에서 사용 및 변경할 수 있는 샘플 파일로 제공됩니다.

주:
오브젝트 및 조치 키워드는 지정된 순서대로 나열되어야 합니다. 단, 옵션은 옵션으로 지정이 되어 있고 피연산자쌍인 경우에 한해 위치와 순서에 상관없이 나열될 수 있습니다.

자세한 정보는 iKeyman 사용자 안내서(http://www.ibm.com/developerworks/java/jdk/security/index.html)를 참조하십시오.

## Swing의 JComboBox 구성요소의 키보드 종단

커서 키로 JComboBox 구성요소의 드롭 다운 목록을 종단하는 경우, 콤보 상자의 편집 가능한 필드 또는 단추는 항목이 선택될 때까지 값을 변경하지 않습니다. 이것은 이번 릴리스에서 권장된 작동으로, 키보드 종단 작동을 마우스 종단 작동과 일치시켜 액세스 가능성과 유용성을 높입니다.

## Web Start 액세스 가능성

IBM Java Web Start V5.0에는 화면 판독기에 대한 개선된 지원 및 향상된 키보드 탐색과 함께, 액세스 가능성 및 유용성과 관련된 여러 가지 개선사항이 포함되어 있습니다.

명령행은 Web Start에서 사용 가능한 Java 응용프로그램을 실행하기 위해서만 사용할 수 있습니다. 환경 설정 옵션을 변경하려면, 사용자의 홈 디렉토리에서 구성 파일인, Application Data\IBM\Java\Deployment\deployment.properties를 편집해야 합니다. 이 파일을 편집하기 전에 백업을 수행하십시오. Java 응용프로그램 캐시 뷰어에서 설정할 수 있는 모든 환경 설정을 구성 파일에서 사용할 수 있는 것은 아닙니다.

# 보안에 대한 일반적인 주의사항

사용 제한없는 JCE 정책 파일을 http://www.ibm.com/developerworks/java/jdk/security/index.html에서 가져올 수 있습니다. IBM 보안 패키지 JCE, JCEFIPS, JSSE2, JSSEFIPS, JGSS, JAAS 및 하드웨어 암호화에 대한 문서도 이 사이트에서 찾아볼 수 있습니다.

# 알려진 제한사항

Windows용 IBM 32-bit SDK, V5.0에는 다음 제한사항이 적용됩니다.

- Windows용 IBM 32-bit SDK, V5.0은 다음 로케일을 지원합니다.
  - 벵골어(bn_IN)
  - 말라얄람어(ml_IN)
  - 오리야어(or_IN)
  그러나 이들 로케일의 폰트는 AWT 구성요소에서 작동하지 않을 수도 있습니다.

- Windows용 IBM 32-bit SDK, V5.0은 IPv6을 지원합니다. |단, 현재 Windows에서 지원되는 IPv6은 듀얼 스택이 아니므로 |SDK는 IPv6 시스템에서 듀얼 스택 작동을 에뮬레이트합니다. 에뮬레이션의 성격 상, Java |응용프로그램은 최대 두배의 소켓을 사용할 수 있습니다. |이 에뮬레이션을 사용하지 않으려면, 시스템 등록 정보 |java.net.preferIPv4Stack을 `true`로 설정하여 SDK의 IPv6 지원을 사용 불가능하게 하십시오.

- IME(Input Method Editor)로 작업하는 경우, 다른 조작을 위한 작업 공간을 사용하기 전에 먼저 문자 작성을 완료하고 후보를 선택해야 합니다.

- DSA 키 쌍을 비정상적으로 길게 작성하면 많은 시간이 소요되어 시스템이 느려질 수 있습니다. 그러나 이러한 작업 지연은 충분한 시간만 있으면 완료될 수 있으므로 시스템 정지로 간주되지 말아야 합니다. DSA 키 생성 알고리즘은 보다 빠르게 표준 키 길이(예: 512, 1024)로 생성되도록 최적화되어 있습니다.

- 개인 방화벽은 특정한 운영 장애를 일으키면서 Windows NIO 코드에 문제를 초래할 수 있습니다. 예를 들어, 메소드 호출 Selector.open()은 `java.net.ConnectException: 연결 거부: 연결`의 원인과 함께 `java.io.IOException: 루프백 연결 설정 불가능`을 일으킬 수 있습니다. 해당 예외는 방화벽에 의해 블록되는 포트에 대한 운영 체제 연결로 인해 발생됩니다. JVM는 다른 포트 번호를 선택하도록 운영 체제에 요청하여 연결 작업을 재시도합니다. 몇 번의 재시도 후에도 연결되지 않으면 `ConnectException`이 발생됩니다.

  이 예외가 발생하면 시스템 등록 정보 java.nio.debug=pipe를 설정하여 블록된 포트 번호를 확인할 수 있습니다.

- 사용자가 IME를 사용하면서 AWT TextArea에 텍스트를 입력한 다음, 해당 텍스트를 커미트하기 전에 응용프로그램 창의 크기를 조정하면, 해당 텍스트는 자동으로 커미트됩니다.

- Windows 2000 및 XP의 경우, 동시에 열 수 있는 기본 파일 수가 너무 작으면 I/O 집약형 응용프로그램에 문제가 발생할 수 있습니다. 이를 해결하려면 <windows>\system32\CONFIG.NT 파일을 다음과 같이 값을 편집하십시오.
  - `files=200`
  - `buffers=60`
  여기서, <windows>는 Windows가 설치된 디렉토리입니다.

- 색상 심도가 32비트인 Windows 2000에서 JVM의 DirectDraw 메커니즘은 마우스 포인터 아래 영역을 재채색하지 않습니다. 따라서 마우스가 지나간 후에는 메뉴에 회색 또는 검은색 사각형이 표시됩니다. 이를 해결하려면 direct draw를 해제하거나(`-Dsun.java2d.noddraw`) 화면 색상 해상도를 다른 값(예: 256색)으로 변경하십시오.

- PKCS 11 원시 라이브러리를 v1.4.x JVM에 설치한 경우에는 해당 라이브러리를 다른 JRE 원시 라이브러리와 함께 JRE bin 디렉토리에 두어야 합니다.

- NIO SocketChannel finishConnect() 호출은 `true`(채널이 연결됨) 또는 `false`(연결 프로세스가 완료되지 않음)를 리턴하거나 예외를 발행할 수 있습니다. Windows 2000에서 비블로킹 연결을 사용 중인 경우, 이전 java select() 호출에서 채널이 처리 완료되었다고 암시하더라도 `false`를 리턴할 수 있습니다.

- 런타임 시 Java 기본 스레드(원시 스레드라고도 함)의 스택 범위는 변경할 수 없습니다. 기본 스레드의 크기는 성능 요인을 고려하여 최적값인 256KB로 수정되었습니다. 스택 범위는 -Xss 옵션을 사용하여 기본 스레드를 제외한 다른 스레드에서만 수정할 수 있습니다. 기본 스레드 크기가 수정되었으므로, 무리한 반복적 활동으로 기본 스레드에 부담을 주는 것은 좋지 않습니다. 기본 스레드는 다른 스레드보다 오버플로우로 지체되기 더 쉽습니다.

- JTextArea, JTextField, JFileChooser를 사용하여 Chinese IME(특히, 중국어 인터널 코드 및 Zhengma)에서 Intelligent ABC IME로 전환하여 DBCS 문자를 입력하는 경우 코어 덤프가 발생합니다.

- 체코어 사용자의 경우 installshield의 언어 선택 패널은 미번역된 설치에 번역된 항목을 하나 제공합니다. 이는 installshield의 제한사항입니다. 문자열은 코드 페이지에 따라 운영 체제에서 선택됩니다. 폴란드어(설치가 번역되어 있음) 및 체코어는 코드 페이지가 1250이므로 Installshield는 이들 두 언어에 대해 시스템에서 언어 목록을 검색하며 이로써 이러한 문자열이 언어 목록에 나타납니다.

- 대만어 사용자의 경우에는 Java 응용프로그램에서 출력을 직접 more 명령으로 파이프해서는 안됩니다. 대신 임시 파일에 출력을 전송한 다음, 해당 파일을 별도로 보십시오.

- 카탈로니아어 사용자의 경우 Lucida Console 글꼴을 사용해야 대문자의 액센트 부호가 손상되지 않습니다. 이는 Windows 2000 사용자에게만 적용됩니다.

# 이 사용자 안내서에 대한 의견

사용자 안내서에 대한 고객의 유용한 정보에 대해서 다음과 같은 방법으로 의견을 받고자 합니다. 이러한 채널은 기술적 질문에 대해 응답하기 위한 것은 아닌 문서에 대한 의견을 듣기 위한 것입니다. 여러분의 의견을 보내주십시오.

- 전자우편: ibmkspoe@kr.ibm.com
- 팩스:
  - 한국: 02-3781-5200
  - 기타 국가:<국제 코드>44 1962 842327
- 우편:
  135-270
  서울특별시 강남구 도곡동 467-12, 군인공제회관 빌딩
  한국 아이.비.엠 주식회사
  고객만족센터

이용 조건. IBM에 메시지를 보내는 경우, 귀하는 피드백 데이터를 포함한 질문, 설명, 제안 등 귀하의 메시지에 포함된 모든 정보는 기밀 사항이 아니며, IBM은 이러한 정보에 대하여 어떠한 종류의 책임도 부담하지 않으며, 해당 정보를 제한없이 복제, 사용, 공표, 배포할 수 있음을 확인합니다. 나아가 IBM은 이러한 정보를 이용한 제품의 개발, 제조, 마케팅을 포함한 모든 목적을 위해 이 정보에 포함된 아이디어 ,개념 ,노하우 또는 기술을 자유롭게 이용할 수 있습니다.

# 주의사항

이 정보는 미국에서 제공되는 제품 및 서비스용으로 작성된 것입니다. IBM은 다른 국가에서 이 문서에 기술된 제품, 서비스 또는 기능을 제공하지 않을 수도 있습니다. 현재 사용할 수 있는 제품 및 서비스에 대한 정보는 한국 IBM 담당자에게 문의하십시오. 여기에서 IBM 제품, 프로그램 또는 서비스를 언급하는 것이 해당 IBM 제품, 프로그램 또는 서비스만을 사용할 수 있다는 것을 의미하지는 않습니다. IBM의 지적 재산권을 침해하지 않는 한, 기능상으로 동등한 제품, 프로그램 또는 서비스를 대신 사용할 수도 있습니다. 그러나 비IBM 제품, 프로그램 또는 서비스의 운용에 대한 평가 및 검증은 사용자의 책임입니다.

IBM은 이 정보에서 다루고 있는 특정 내용에 대해 특허를 보유하고 있거나 현재 특허 출원 중일 수 있습니다. 이 정보를 제공한다고 해서 특허에 대한 라이센스까지 부여하는 것은 아닙니다. 라이센스에 대한 의문사항은 다음으로 문의하십시오.

- 135-270
  서울특별시 강남구 도곡동 467-12, 군인공제회관빌딩
  한국 아이.비.엠 주식회사 고객만족센터
  전화번호: 080-023-8080

2바이트(DBCS) 정보에 관한 라이센스 문의는 한국 IBM 고객만족센터에 문의하거나 다음 주소로 서면 문의하시기 바랍니다.

- IBM World Trade Asia Corporation Licensing
  2-31 Roppongi 3-chome, Minato-ku
  Tokyo 106-0032, Japan

다음 단락은 현지법과 상충하는 영국이나 기타 국가에서는 적용되지 않습니다.

IBM은 타인의 권리 비침해, 상품성 및 특정 목적에의 적합성에 대한 묵시적 보증을 포함하여(단, 이에 한하지 않음) 묵시적이든 명시적이든 어떠한 종류의 보증없이 이 책을 "현상태대로" 제공합니다. 일부 국가에서는 특정 거래에서 명시적 또는 묵시적 보증의 면책사항을 허용하지 않으므로, 이 사항이 적용되지 않을 수도 있습니다.

이 정보에는 기술적으로 부정확한 내용이나 인쇄상의 오류가 있을 수 있습니다. 이 정보는 주기적으로 변경되며, 변경사항은 최신판에 통합됩니다. IBM은 이 정보에서 설명한 제품 및/또는 프로그램을 사전 통지없이 언제든지 개선 및/또는 변경할 수 있습니다.

이 정보에서 비IBM의 웹 사이트는 단지 편의상 제공된 것으로, 어떤 방식으로든 이들 웹 사이트를 옹호하고자 하는 것은 아닙니다. 해당 웹 사이트의 자료는 본 IBM 제품 자료의 일부가 아니므로 해당 웹 사이트 사용으로 인한 위험은 사용자 본인이 감수해야 합니다.

IBM은 귀하의 권리를 침해하지 않는 범위 내에서 적절하다고 생각하는 방식으로 귀하가 제공한 정보를 사용하거나 배포할 수 있습니다.

(i) 독립적으로 작성된 프로그램과 기타 프로그램(이 프로그램 포함) 간의 정보 교환 및 (ii) 교환된 정보의 상호 이용을 목적으로 정보를 본 프로그램에 관한 정보를 얻고자 하는 라이센스 사용자는 다음 주소로 문의하십시오.

- 135-270 서울특별시 강남구 도곡동 467-12, 군인공제회관빌딩
  한국 아이.비.엠 주식회사 고객만족센터

이러한 정보는 해당 조항 및 조건(예를 들면, 사용료 지불 등)하에서 사용될 수 있습니다.

이 정보에 기술된 라이센스가 있는 프로그램 및 이 프로그램에 대해 사용 가능한 모든 라이센스가 있는 자료는 IBM이 IBM 기본 계약, IBM 프로그램 라이센스 계약(IPLA) 또는 이와 동등한 계약에 따라 제공한 것입니다.

본 문서에 포함된 모든 성능 데이터는 제한된 환경에서 산출된 것입니다. 따라서 다른 운영 환경에서 얻어진 결과는 상당히 다를 수 있습니다. 일부 성능은 개발 레벨 상태의 시스템에서 측정되었을 수 있으므로 이러한 측정치가 일반적으로 사용되고 있는 시스템에서도 동일하게 나타날 것이라고는 보증할 수 없습니다. 또한, 일부 성능은 추정을 통해 추측되었을 수도 있으므로 실제 결과가 다를 수 있습니다. 이 문서의 사용자는 해당 데이터를 사용자의 특정 환경에서 검증해야 합니다.

비IBM 제품에 관한 정보는 해당 제품의 공급업체, 공개 자료 또는 기타 범용 소스로부터 얻은 것입니다. IBM에서는 이러한 비IBM 제품을 테스트하지 않았으므로, 이들 제품과 관련된 성능의 정확성, 호환성 또는 기타 주장에 대해서는 확신할 수 없습니다. 비IBM 제품의 성능에 대한 의문사항은 해당 제품의 공급업체에 문의하십시오.

## 상표

IBM은 미국 또는 기타 국가에서 사용되는 International Business Machines Corporation의 상표입니다.

Java 및 모든 Java 기반 상표와 로고는 미국 또는 기타 국가에서 Sun Microsystems, Inc.의 상표 또는 등록상표입니다.

Microsoft, Windows 및 Windows 로고는 미국 또는 기타 국가에서 사용되는 Microsoft Corporation의 상표입니다.

기타 회사, 제품 및 서비스 이름은 타사의 상표 또는 서비스표입니다.

또한 이 제품은 FreeType Project 작업의 일부를 기반으로 합니다. Freetype에 대한 자세한 내용은 http://www.freetype.org를 참조하십시오.

이 제품에는 Apache Software Foundation(http://www.apache.org/)에서 개발한 소프트웨어가 포함되어 있습니다.