# IBM Runtime Environment for Linux on AMD64 architecture, Java 2 Technology Edition, 버전 1.4.2

# Runtime Environment 사용자 안내서

# 저작권 정보

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

이 사용자 안내서 개정판은 IBM Runtime Environment for Linux on AMD64 architecture, Java 2 Technology Edition, 버전 1.4.2에 적용됩니다.

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

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

# 머리말

이 사용자 안내서는 IBM(R) Runtime Environmentfor Linux(TM) on AMD64 architecture에 대해 설명합니다.

IBM Runtime Environment에는 Java(TM) Virtual Machine (JVM), 핵심 Sun Microsystems Java 클래스 및 지원 파일이 있습니다. Runtime Environment에는 SDK 패키지에 있는 모든 클래스가 있지는 않습니다.

사용자 안내서에서는 Runtime Environment에 대한 일반 정보와 Runtime Environment를 Sun에서 구현한 것과 IBM에서 구현한 것 간의 차이에 대한 특정 정보를 제공합니다. 사용자 안내서를 Sun 웹 사이트 http://java.sun.com에 있는 다른 다양한 책들과 같이 읽는 것이 좋습니다.

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

SDK for Linux가 테스트된 환경 목록을 보려면 http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html을 참조하십시오.

Runtime Environment for Linux는 SDK에 포함되어 있으며 Java 응용프로그램만 실행할 수 있습니다. SDK를 설치하면 Runtime Environment가 포함됩니다.

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

# 목차

저작권 정보
머리말
개요
Runtime Environment for Linux에 포함된 파일
라이센스 계약
JIT 컴파일러
Java Native Interface 및 Native Method Interface
Runtime Environment 구성
Runtime Environment for Linux 설치 제거
설치 가능한 RPM 패키지 설치 제거
압축된 TAR 패키지 설치 제거
Java 응용프로그램 실행
명령 요약
옵션
표준 옵션
비표준 옵션
java 명령의 글로벌화
Classpath에 대한 작업
가비지 콜렉션 정책 지정
일시정지 시간
일시정지 시간 감소
힙이 가득 찬 상태의 환경
JVM의 신호 처리 방법
JVM에서 사용되는 신호
원시 코드 드라이버를 신호 체인 라이브러리로 링크
RMI용 연결 핸들러 풀 구현
IBM 빌드 및 버전 번호 찾기
floating 스택에 대한 작업
DBCS 언어에서 입력 방법 전환
사용자 시스템에 응용프로그램 설치
알려진 제한사항
사용자 안내서에 대한 의견
주의사항
상표

# 개요

Runtime Environment에는 JVM(Java Virtual Machine), Java 클래스 및 지원 파일이 들어 있습니다. Runtime Environment에는 SDK에 있는 클래스 서브세트만 포함되어 있으며 Java 클래스를 실행할 수 있지만 Java 프로그램을 컴파일할 수는 없습니다.

## Runtime Environment for Linux에 포함된 파일

Runtime Environment for Linux에는 런타임 시 프로그램 지원에 필요한 클래스 파일 및 2진 오브젝트 파일이 있습니다. Runtime Environment for Linux에는 애플릿 뷰어나 Java 컴파일러(javac) 또는 개발 시스템에만 관련된 클래스 등과 같은 개발 도구는 포함되어 있지 않습니다.

또한 Runtime Environment for Linux에 사용하도록 Java Communications API(Application Programming Interface) 패키지가 제공됩니다. Java Communications API를 설치한 경우 JavaComm API 사용자 안내서에서 이에 관한 정보를 찾을 수 있습니다.

## 라이센스 계약

LICENSE_xx.html 파일에는 Runtime Environment for Linux 소프트웨어에 대한 라이센스 계약이 포함되어 있습니다. (xx는 언어의 약어입니다.)

라이센스 계약을 보거나 인쇄하려면 웹 브라우저에서 파일을 여십시오.

## JIT 컴파일러

JIT(just-in-time) 컴파일러(libjitc.so)는 실행 시 Java 응용프로그램 및 애플릿에서 자주 사용되는 바이트 코드 순서에 대해 시스템 코드를 동적으로 생성합니다.

Linux용 Runtime Environment에는 기본적으로 사용 가능한 JIT(libjitc.so)가 있습니다. Java 응용프로그램, 애플릿 또는 컴파일러에 문제가 파급되는 것을 막기 위해 JIT를 사용 불가능 하도록 설정할 수 있습니다.

JIT를 사용 불가능하게 하려면 -Xint 옵션을 사용하십시오. 응용프로그램을 실행하는 shell 프롬프트 창에서 다음을 입력하십시오.

        java -Xint class

JIT의 사용 가능 여부를 확인하려면 쉘 프롬프트에서 다음을 입력하십시오.

        java -version

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

    (JIT enabled)

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

    (JIT disabled)

## Java Native Interface 및 Native Method Interface

JNI(Java Native Interface)는 Runtime Environment에 포함되어 있습니다. JNI 사용에 관한 정보는 Sun 웹 사이트, http://java.sun.com/j2se/1.4.2/docs/guide/jni를 참조하십시오.

IBM은 이 릴리스에서 NMI(Native Method Interface)를 지원하지 않습니다. 응용프로그램에서 이 인터페이스를 사용하지 마십시오.

# Runtime Environment 구성

Runtime Environment를 설치한 후 쉘 로그인 스크립트를 편집하여 PATH 명령문에 다음 디렉토리를 추가하십시오.

/opt/IBMJava2-142/jre/bin

Runtime Environment를 /opt/IBMJava2-142/ 이외의 다른 디렉토리에 설치한 경우 /opt/IBMJava2-142/를 Runtime Environment를 설치한 디렉토리로 바꾸십시오.

# Runtime Environment for Linux 설치 제거

Runtime Environment for Linux를 제거하는 데 사용되는 프로세스는 설치 가능한 RPM(Red Hat Package Manager) 패키지를 설치한 경우 또는 압축된 TAR(Tape Archive) 패키지를 설치한 경우에 따라 다릅니다. 지시사항은 설치 가능한 RPM 패키지 설치 제거 또는 압축된 TAR 패키지 설치 제거를 참조하십시오.

## 설치 가능한 RPM 패키지 설치 제거

설치 가능한 RPM 패키지를 설치한 경우 Linux용 Runtime Environment를 설치 제거하려면 다음을 수행하십시오.

1. 쉘 스크립트에 다음을 입력하십시오.

   -         rpm -e IBMJava2-JRE-1.4.2-0.0

   또는 kpackage나 yast2와 같은 그래픽 툴을 사용할 수 있습니다.
2. PATH 명령문에서 Runtime Environment을 설치한 디렉토리를 제거하십시오

## 압축된 TAR 패키지 설치 제거

압축된 TAR 패키지를 설치한 경우 Linux용 Runtime Environment를 제거하려면 다음을 수행하십시오.

1. Runtime Environment를 설치한 디렉토리에서 Runtime Environment 파일을 제거하십시오.
2. PATH 명령문에서 Runtime Environment을 설치한 디렉토리를 제거하십시오.

# Java 응용프로그램 실행

java 툴은 Java 응용프로그램을 실행합니다. 매개변수로 초기 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와 함께 사용됩니다.
argument
  기본 함수에 전달되는 인수.

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

## 옵션

실행 프로그램에는 현재의 Runtime Environment에서 지원되며 차후 릴리스에서도 지원될 표준 옵션 세트가 있습니다. 또한 비표준 옵션 세트도 있습니다.

### 표준 옵션

- -D<property_name>=<value>
  - 시스템 특성을 설정합니다.
- -assert
  - 단언(assert) 관련 옵션에서 도움말을 인쇄합니다.
- -cp 또는 -classpath <디렉토리 및 :>로 구분되는 zip 또는 jar 파일
  - 응용프로그램 클래스 및 자원에 대한 검색 경로를 설정합니다. -classpath 및 -cp 가 사용되지 않고 CLASSPATH가 설정되지 않은 경우 기본적으로 사용자 classpath는 현재 디렉토리(.)입니다. Classpath에 대한 작업도 참조하십시오.
- -help 또는 -?
  - 사용법 메시지를 인쇄합니다.
- -showversion
  - 제품 버전을 인쇄하고 계속 진행합니다.
- -verbose:[class | gc | dynload | stack | debug | sizes | stackwalk]
  - 상세 출력을 사용 가능하게 합니다.
- -version
  - 제품 버전을 인쇄합니다.
- -X
  - 비표준 옵션에 대한 도움말을 인쇄합니다.

### 비표준 옵션

아래에 나열된 -X 옵션은 비표준 옵션이며 주제가 통지없이 변경될 수 있습니다.

- -Xargencoding
  - 인수 목록에 Unicode 이스케이프 순서를 넣을 수 있습니다.
- -Xbootclasspath:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 부트스트랩 클래스 및 자원에 대한 검색 경로를 설정합니다.
- -Xbootclasspath/a:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 지정된 디렉토리, zip 또는 jar 파일을 부트스트랩 클래스 경로의 끝에 추가합니다.
- -Xbootclasspath/p:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 지정된 디렉토리, zip 또는 jar 파일을 부트스트랩 클래스 경로의 앞에 추가합니다. -Xbootclasspath: 또는 -Xbootclasspath/p: 옵션을 사용하여 core.jar, graphics.jar, server.jar, security.jar, xml.jar, tools.jar 또는 charsets.jar의 클래스를 대체하는 응용프로그램은 전개하지 마십시오. 이러한 전개는 Java 2 Runtime Environment 2진 코드 라이센스를 위반하는 것입니다.
- -Xcheck:jni
  - JNI 기능의 추가 점검을 수행합니다. -Xrunjnichk를 사용할 수도 있습니다.
- -Xcheck:nabounds
  - JNI 배열 조작의 추가 점검을 수행합니다. -Xrunjnichk를 사용할 수도 있습니다.
- -Xcompactexplicitgc
  - `System.gc()`에 대한 모든 호출 시 압축됩니다. -Xnocompactexplicitgc도 참조하십시오.
- -Xcompactgc
  - 모든 가비지 콜렉터 주기를 압축합니다. -Xnocompactgc도 참조하십시오.
- -Xdbg:<options>
  - 응용프로그램의 원격 디버깅을 지원하기 위해 디버깅 라이브러리를 로드합니다. -Xrunjdwp와 동일합니다.
- -Xdbginfo:<path to symbol file>
  - 옵션을 디버그 정보 서버로 로드 및 전달합니다.
- -Xdisablejavadump
  - 오류 발생 시 javadumps 대신 시스템 덤프가 생성되게 합니다.
- -Xdebug
  - 디버거를 사용 가능하게 하여 JVM을 시작합니다.
- -Xdisableexplicitgc
  - `System.gc()`에 대한 호출을 no-ops로 변경합니다.
- -Xfuture
  - 정밀한 클래스 파일 포맷 검사를 활성화합니다. Java 응용프로그램 실행 프로그램의 향후 릴리스에서 더 엄격한 검사가 기본적으로 수행되므로 새 코드를 개발할 때 이 플래그를 사용하십시오.
- -Xgc:<options>
  - verbose, compact, nocompact 등의 옵션을 가비지 콜렉터로 전달합니다.
- -Xgcpolicy:[:optthruput]|[:optavgpause]
  - 가비지 콜렉터의 작동을 제어합니다. optthruput 옵션은 기본값이며 응용프로그램 처리량이 매우 높아지지만 가끔식 일시정지 되기도 합니다. optavgpause 옵션은 이러한 가비지 콜렉션 일시정지에 소요되는 시간을 단축하고 가비지 콜렉션 일시정지의 길이에 미치는 힙 크기 증가의 영향을 제한합니다. 구성에 매우 큰 힙이 있는 경우 optavgpause를 사용하십시오.
- -Xgcthreads<number of threads>
  - 가비지 콜렉션을 수행해야 하는 스레드 수를 설정합니다.
- -Xinitsh<size>
  - 보관 시스템 클래스에 지정된 처음 크기의 기억장치를 설정합니다.
- -Xint
  - JIT 및 AOT를 사용 불가능하게 하여 JVM이 해석기만 사용하도록 합니다.
- -Xiss
  - 처음 Java 스레드 스택 크기를 설정합니다.
- -Xjit[:<number of threads>]
  - JIT를 사용 가능하게 하거나 JIT로 옵션을 전달하거나 둘 모두를 수행합니다. -Xnojit도 참조하십시오.
- -Xlinenumbers
  - 행 번호에 대한 디버깅을 사용 가능하게 합니다. -Xnolinenumbers도 참조하십시오.
- -Xmaxe<size>
  - 가비지 콜렉터가 힙을 확장하는 최대량을 설정합니다. 일반적으로 가비지 콜렉터는 여유 공간량이 30%(또는 -Xminf를 사용하여 지정된 양) 아래로 떨어지면 30%까지 여유 공간을 복원하는 데 필요한 양만큼 힙을 확장합니다. -Xmaxe 옵션은 지정된 값으로 확장을 제한합니다. 예를 들어, `-Xmaxe10M`은 10MB로 확장을 제한합니다.
- -Xmaxf<size>
  - 가비지 콜렉션 이후 사용 가능해야 할 힙의 최대 비율을 지정합니다. 여유 공간이 이 양을 초과하면 JVM은 힙을 축소하려고 시도합니다. 0-1 범위의 10진수 값으로 크기를 지정합니다. 예를 들어, `-Xmaxf0.5`는 최대 여유 공간을 50%로 설정합니다. 기본값은 0.6입니다.
- -Xmca<size>
  - 지정된 크기만큼 증가하도록 RAM 클래스 세그먼트를 설정합니다.
- -Xmco<size>
  - 지정된 크기만큼 증가하도록 ROM 클래스 세그먼트를 설정합니다.
- -Xmine<size>
  - 가비지 콜렉터가 힙을 확장하는 최소량을 설정합니다. 일반적으로 가비지 콜렉터는 30%까지 여유 공간을 복원하는 데 필요한 양만큼 힙을 확장합니다(또는 -Xminf를 사용하여 지정된양). -Xmine 옵션은 최소한 지정된 값으로 확장되도록 설정합니다. 예를 들어, `-Xmine50M`은 확장 크기를 최소 50MB로 설정합니다.
- -Xminf<size>
  - 가비지 콜렉션 이후 사용 가능해야 할 힙의 최소 비율을 지정합니다. 여유 공간이 이 양 아래로 떨어지면 JVM은 힙을 확장하려고 시도합니다. 0-1 범위의 10진수 값으로 크기를 지정합니다. 예를 들어 `-Xminf0.3` 값은 최소 여유 공간이 힙의 30%가 되도록 요구합니다.
- -Xmjit[:<number of threads>]
  - MicroJIT를 사용 가능하게 하거나 MicroJIT로 옵션을 전달하거나 둘 모두를 수행합니다.
- -Xmn<size>
  - 지정된 크기로 새 힙 크기를 설정합니다.
- -Xmo<size>
  - 처음 Java 힙 크기를 설정합니다. -Xms도 사용할 수 있습니다.
- -Xmoi<size>
  - 처음 Java 힙 크기를 늘립니다.
- -Xmr<size>
  - 기억된 설정 크기를 설정합니다.
- -Xms<size>
  - 처음 Java 힙 크기를 설정합니다. -Xmo를 사용할 수도 있습니다.
- -Xmso<size>
  - OS 스레드 스택의 크기를 설정합니다.
- -Xmx<size>
  - 최대 Java 힙 크기를 설정합니다.
- -Xnm
  - 모니터 풀의 크기를 지정합니다.
- -Xnoagent
  - JPDA 디버그 지원을 사용할 수 있도록 이전 sun.tools.debug 인터페이스를 사용 불가능하게 합니다.
- -Xnoaot
  - AOT를 사용 불가능하게 합니다.
- -Xnoclassgc
  - 클래스 가비지 콜렉션을 사용 불가능하게 합니다. 이 옵션은 JVM에서 더 이상 사용하지 않는 Java 클래스와 연관된 기억장치의 가비지 콜렉션 스위치를 끕니다.
- -Xnocompactgc
  - 가비지 콜렉터의 압축을 사용 불가능하게 합니다. -Xcompactgc도 참조하십시오.
- -Xnocompactexplicitgc
  - `System.gc()`에 대한 호출 시 압축을 사용 불가능하게 합니다. -Xcompactexplicitgc도 참조하십시오.
- -Xnojit
  - JIT를 사용 불가능하게 합니다. -xjit도 참조하십시오.
- -Xnolinenumbers
  - 행 번호에 대한 디버깅을 사용 가능하게 합니다. -Xlinenumbers도 참조하십시오.
- -Xnopartialcompactgc
  - `System.gc()`에 대한 호출 시 증분 압축을 사용 불가능하게 합니다. -Xpartialcompactgc도 참조하십시오.
- -Xnosigcatch
  - JVM 복구 코드를 사용 불가능하게 합니다. -Xsigcatch도 참조하십시오.
- -Xnosigchain
  - 단일 핸들러 체인을 사용 불가능하게 합니다. -Xsigchain도 참조하십시오.
- -Xoptionsfile=<file>
  - JVM 옵션이 포함되고 정의하는 파일을 지정합니다.
- -Xoss<size>
  - 임의의 스레드에 대한 최대 Java 스택 크기를 설정합니다.
- -Xpartialcompactgc
  - `System.gc()`에 대한 모든 호출 시 증분 압축을 사용 가능하게 합니다. -Xnopartialcompactgc도 참조하십시오.
- -Xquickstart
  - 컴파일을 지연시켜 시작 시간을 향상시킵니다.
- -Xrdbginfo:<host>:<port>
  - 원격 디버그 정보 서버로 옵션을 로드 및 전달합니다.
- -Xrs
  - 운영 체제 신호의 사용을 줄입니다.
- -Xrunlibrary_name[:options]
  - 도움말 라이브러리를 로드합니다. 여러 개의 라이브러리를 로드하려면 명령행에서 두 번 이상 지정하십시오. 이러한 라이브러리의 예로 다음이 있습니다.
    - -Xrunhprof[:help] | [:<option>=<value>, ...]
      - 힙, CPU 또는 모니터 프로파일링을 수행합니다.
    - -Xrunjdwp[:help] | [:<option>=<value>, ...]
      - 응용프로그램의 원격 디버깅을 지원하기 위해 디버깅 라이브러리를 로드합니다. -Xdbg와 동일합니다.
    - -Xrunjnichk[ :verbose | trace | profile | nonfatal | nowarn | noadvice | pedantic | help]
      - JNI 기능의 추가 점검을 수행합니다.
- -Xsigcatch
  - JVM 복구 코드를 사용 가능하게 합니다. -Xnosigcatch도 참조하십시오.
- -Xsigchain
  - 단일 핸들러 체인을 사용 가능하게 합니다. -Xnosigchain도 참조하십시오.
- -XsigquitToFile<path to file><filename>
  - sigquit 추적에서 지정된 파일로 정보를 덤프합니다.
- -Xss<size>
  - 임의의 스레드에 대한 최대 고유 스택 크기를 설정합니다. 자세한 정보는 floating 스택에 대한 작업을 참조하십시오.
- -Xthr:<options>
  - 스레드 옵션을 설정합니다.
- -Xverbosegclog:<path to file><filename>[X, Y]
  - verbose가비지 콜렉션 결과물이 지정된 파일에 작성됩니다. 이미 파일이 있는 경우 해당 파일에 겹쳐씁니다. 기존 파일을 열 수 없거나 새 파일을 작성할 수 없는 경우, 결과물을 stderr로 방향 재지정합니다. 인수 X 및 Y(둘 모두 정수)를 지정하는 경우 verbose가비지 콜렉션 결과물은 파일의 X수로 방향이 재지정됩니다. 여기서, 각 파일에는 verbose가비지 콜렉션 결과물의 gc 사이클에 대해 Y수가 있습니다. 이들 파일은 filename1, filename2 등의 형식이 있습니다.
- -Xverify
  - 로드된 모든 클래스에 대해 정밀한 클래스 검사를 사용 가능하게 합니다.
- -Xverify:none
  - 정밀한 클래스 검사를 사용 불가능하게 합니다.

## java 명령의 글로벌화

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

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

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

java 및 javaw 명령은 변환된 결과물 메시지를 제공합니다. 이러한 메시지는 Java가 실행되는 로케일에 따라 다릅니다. java에 의해 리턴되는 자세한 오류 설명 및 기타 디버그 정보는 영어입니다.

## Classpath에 대한 작업

전체 경로 및 .class 확장자를 포함하여 전체 파일 이름으로 클래스 이름을 지정할 수 있습니다. 이전 버전에서는 CLASSPATH와 관련된 클래스만 지정할 수 있었으며 .class 확장자는 허용되지 않았습니다. 완전한 파일 이름을 사용할 수 있으므로 데스크탑이나 파일 실행 프로그램에서 Java 응용프로그램을 실행할 수 있습니다. 경로 및 확장자와 함께 .class 파일을 지정하는 경우 지정되는 경로는 CLASSPATH에 추가됩니다. 예를 들어, `java ~/myapp/thisapp.class` 명령은 `java -classpath ~/myapp thisapp`를 지정하는 것과 동일합니다.

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

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

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

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

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

> -Xgcpolicy:gencon

### 일시정지 시간

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

### 일시정지 시간 감소

JVM은 다음과 같이 두 가지 기술을 사용하여 일시정지 시간을 단축합니다.

- 동시 가비지 콜렉션
- 세대 가비지 콜렉션

-Xgcpolicy:optavgpause 명령행 옵션은 가비지 콜렉션 일시정지에 소모되는 시간을 크게 줄일 수 있도록 동시 가비지 콜렉션의 사용을 요구합니다. 동시 가비지 콜렉션은 힙 콜렉션으로 유발되는 중단을 최소화하기 위해 정상 프로그램 실행과 동시에 일부 가비지 콜렉션 활동을 수행하여 일시정지 시간을 단축합니다. -Xgcpolicy:optavgpause 옵션은 또한 가비지 콜렉션 일시정지 길이에 미치는 힙 크기 증가의 영향을 제한합니다. -Xgcpolicy:optavgpause 옵션은 큰 힙이 있는 구성에 유용합니다. 일시정지 시간을 줄이면 응용프로그램 처리량이 어느 정도 감소할 수 있습니다.

동시 가비지 콜렉션 중에 콜렉트할 수 없는, 상대적으로 장기간 지속되는 오브젝트를 식별하는 데 많은 시간이 소요됩니다. 가비지 콜렉션이 재활용 가능성이 높은 오브젝트에만 집중하는 경우 일부 응용프로그램에 대한 일시정지 시간을 추가로 단축할 수 있습니다. 세대 가비지 콜렉션은 힙을 두 "세대", 즉 "nursery" 및 "tenure" 영역으로 나누어 이를 수행합니다. 나이에 따라 이러한 영역 중 하나에 오브젝트가 배치됩니다. nursery는 둘 중 크기가 더 작고, 어린 오브젝트를 포함합니다. tenure는 크기가 더 크고, 오래된 오브젝트를 포함합니다. 오브젝트는 먼저 nursery에 할당됩니다. 장기간 유지되는 경우 결국 tenure 영역으로 승격됩니다.

세대 가비지 콜렉션은 장기간 유지되지 않는 대부분의 오브젝트에 따릅니다. 세대 가비지 콜렉션은 대부분의 재활용 가능한 공간이 있기 때문에 nursery에 저장영역 재생 노력을 집중하여 일시정지 시간을 단축합니다. 전체 힙을 콜렉트할 때 가끔씩이지만 장기간의 일시정지 시간이 발생하는 대신 더욱 빈번하게 nursery가 수집되고 nursery가 작은 경우 일시정지 시간은 비교적 짧습니다. 그러나 세대 가비지 콜렉션의 경우 너무 많은 오브젝트가 오랫동안 지속되는 경우 시간이 지나면서 tenure 영역이 가득 찰 수 있다는 단점이 있습니다. 이러한 상황이 발생할 때 일시정지 시간을 최소화하려면 동시 가비지 콜렉션과 세대 가비지 콜렉션을 조합하여 사용하십시오. -Xgcpolicy:gencon 옵션은 모든 가비지 콜렉션 일시정지에 소요되는 시간을 최소화하기 위해 동시 가비지 콜렉션과 세대 가비지 콜렉션을 조합하여 사용하도록 요구합니다.

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

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

# JVM의 신호 처리 방법

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

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

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

예외 및 오류 신호의 경우, 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을 종료시키지 않습니다. 관련된 제어 신호는 SIGQUIT 뿐이며 이는 Javadump를 생성합니다.

## JVM에서 사용되는 신호

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

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

표 1. JVM에서 사용되는 신호
신호 이름 | 신호 유형 | 설명 | -Xrs에 의해 사용 불가능
--- | --- | --- | ---
SIGBUS | 예외 | 잘못된 메모리 액세스(데이터 정렬 오류) | 아니오
SIGSEGV | 예외 | 잘못된 메모리 액세스(액세스할 수 없는 메모리에 쓰기) | 아니오
SIGILL | 예외 | 잘못된 명령어(알수 없는 시스템 명령을 호출하려는 시도) | 아니오
SIGFPE | 예외 | 부동 소수점 예외(0으로 나누기) | 아니오
SIGABRT | 오류 | 비정상 종료. JVM 결함을 발견할 때마다 JVM이 이 신호를 일으킵니다. | 아니오
SIGINT | 인터럽트 | 대화식 주의(CTRL-C). JVM이 정상적으로 종료합니다. | 예
SIGTERM | 인터럽트 | 종료 요청. JVM이 정상 종료합니다. | 예
SIGHUP | 인터럽트 | 끊기. JVM이 정상적으로 종료합니다. | 예
SIGQUIT | 제어 | 단말기에 대한 종료 신호. JVM은 이 신호를 사용하여 Javadumps를 가져옵니다. | 아니오
SIGPIPE | 제어 | 중단된 파이프. SIG_IGN로 설정 | 아니오

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

JVM 스레드의 신호 `1(SIGHUP)`, `2(SIGINT)`, `4(SIGILL)`, `7(SIGBUS)`, `8(SIGFPE)`, `11(SIGSEGV)` 및 `15(SIGTERM)`는 JVM을 종료시킵니다. 그러므로 응용프로그램 신호 핸들러는 JVM 서비스가 더 이상 필요하지 않은 경우를 제외하고 복구를 시도하지 마십시오.

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

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

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

libjsig.so를 사용하려면 다음과 같이 하십시오.

- libjsig.so를 JVM을 작성하거나 임베드하는 응용프로그램과 링크시키십시오.

      gcc -L$JAVA_HOME/bin -ljsig -L$JAVA_HOME/bin/j9vm -ljvm java_application.c

  또는
- LD_PRELOAD 환경 변수를 사용하십시오.

      export LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (bash and ksh)

      setenv LD_PRELOAD=$JAVA_HOME/bin/libjsig.so; java_application (csh)

  (`JAVA_HOME`이 설정되어 있다고 가정합니다. 그렇지 않으면 /opt/IBMJava2-142/jre를 사용하십시오.)

`sigaction()`을 사용하는 신호 핸들러를 설치할 경우, JVM이 이 신호를 사용할 때 일부 sa_flags가 관찰되지 않습니다. 이들은 다음과 같습니다.

- SA_NOCLDSTOP - 항상 설정 해제
- SA_NOCLDWAIT - 항상 설정 해제
- SA_RESTART - 항상 설정

libjsig.so 라이브러리도 응용프로그램에서 JVM 신호 핸들러를 숨깁니다. 따라서 JVM이 시작된 후에 작성된 `signal()`, `sigset()` 및 `sigaction()`과 같은 호출은 더 이상 JVM 신호 핸들러에 대한 참조를 리턴하지 않지만, 대신 JVM이 시작되기 전에 설치된 모든 핸들러를 리턴합니다.

# RMI용 연결 핸들러 풀 구현

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

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

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

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

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

# IBM 빌드 및 버전 번호 찾기

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

`java -version`

# floating 스택에 대한 작업

floating이 아닌 스택 Linux 시스템에서는 -Xss의 설정에 관계없이 각 스레드에 대해 최소한의 고유 스택 크기인 256KB가 제공됩니다. floating 스택 Linux 시스템에서는 -Xss 값이 주어집니다. 따라서 floating이 아닌 스택 Linux 시스템에서 이주하는 경우, -Xss 값이 충분히 큰지 그리고 256KB의 최소 스택에 의존하고 있지 않은지 확인해야 합니다.

# DBCS 언어에서 입력 방법 전환

2바이트 문자 세트(DBCS) 시스템에서 입력 방법을 전환하려는 경우, IBMJAVA_INPUTMETHOD_SWITCHKEY 및 IBMJAVA_INPUTMETHOD_SWITCHKEY_MODIFIERS 환경 변수 대신 java.util.prefs.Preferences 클래스를 사용해야 합니다. 자세한 내용은 Sun의 Input Method Framework Specification을 참조하십시오.

# 사용자 시스템에 응용프로그램 설치

제품을 개발하고 운송할 준비가 되면, 제품을 사용자 시스템에 설치하고 사용자 소프트웨어를 지원하도록 사용자 시스템과 Runtime Environment를 구성할 필요가 있습니다.

Runtime Environment for Linux를 사용하는 경우, 사용자 설치 프로시저가 기존의 설치를 대체하지 않도록 확인해야 합니다(기존 Runtime Environment for Linux가 이전 버전인 경우는 제외).

Runtime Environment for Linux를 재분배하려면 Runtime Environment for Linux를 사용자의 시스템에 설치한 후, 필요한 파일을 사용자의 설치 세트로 복사하십시오. 이 방법을 선택하면, Runtime Environment for Linux와 함께 제공된 모든 파일을 반드시 포함해야 합니다. Runtime Environment for Linux 소프트웨어는 모든 파일이 포함된 경우에만 재분배될 수 있습니다. 사실상, 응용프로그램을 운송할 때 응용프로그램은 자체의 고유 Runtime Environment for Linux 사본을 가지고 있습니다.

반드시 재분배되어야 하는 파일에 대한 상세한 정보는 이 제품에 함께 들어 있는 라이센스 계약을 참조하십시오.

# 알려진 제한사항

다음 절에서는 Linux용 Runtime Environment의 알려진 제한사항에 대해 설명합니다.

##

- KDE(K Desktop Environment)를 실행할 경우 2바이트 문자 세트의 시스템 클립보드를 사용하여 Linux 응용프로그램과 Java 응용프로그램 사이에 정보를 복사할 수 없을 수도 있습니다.
- SDK는 Java 스레드를 고유 스레드로 구현하고, 이는 각 스레드가 개별 Linux 프로세스가 되도록 합니다. Java 스레드의 수가 허용되는 프로세스의 최대 수를 초과하는 경우, 사용자 프로그램에 오류 메시지, SIGSEGV 오류가 표시되거나 시스템이 정지할 수 있습니다.

  사용 가능한 스레드의 최대 수는 다음의 최소치에 의해 결정됩니다.

  - /etc/security/limits.conf에서의 사용자 프로세스 설정(ulimit -u)
  - /proc/sys/kernel/threads_max에 정의된 제한
  - libpthreads.so에 정의된 제한 PTHREAD_THREADS_MAX (변경사항이 있으면 glibc를 다시 컴파일해야 함)

  그러나 최대 스레드 수에 도달하기 전에 가상 저장영역을 모두 사용할 수 있습니다.

- Ctrl-C를 사용하여 Java 응용프로그램을 종료한 경우, 여러 프로세스가 고립된(orphaned) 상태로 남게 될 수 있습니다.
- Swing으로 작성된 대화 상자를 표시하려고 시도하면 이들 대화 상자가 창에 표시되기 전에 얼마간 지연이 발생할 수 있습니다.
- ALT키를 포함하는 KeyEvent 결과는 Linux에서 다른 창 관리자를 사용하면 달라집니다. 이들은 또한 다른 운영 체제를 사용한 결과와도 다릅니다. Enlightenment 창 관리자에서, Alt+A 및 Shift+Alt+A는 다른 수정자를 생성하며, Ctrl+Alt+A는 키 이벤트를 전혀 생성하지 않습니다. 그러나 WindowMaker 창 관리자를 사용하면 Ctrl+Alt+A는 키 이벤트를 생성합니다.
- Linux X Window 시스템에서 키맵은 64 0xffe9(Alt_L) 0xffe7(Meta_L) 및 113 0xffea(Alt_R) 0xffe8(Meta_R)로 설정됩니다. 쉘 프롬프트에서 다음을 입력하여 이를 확인할 수 있습니다.

      xmodmap -pk

  이로 인해 SDK는 Meta와 Alt를 함께 누르는 것으로 간주합니다. 쉘 프롬프트에서 다음을 입력하여 Meta_x 맵핑을 제거하여 해결할 수 있습니다.

      xmodmap -e "keysym Alt_L = Alt_L" -e "keysym Alt_R = Alt_R"

  주:
  이 해결책은 제거된 Meta 키를 사용할 경우 같은 표시장치에서 실행되는 다른 X-Windows 응용프로그램에 영향을 줄 수 있습니다.
- 느린 시스템에서 보통이 아닌 길이의 DSA 키 쌍을 작성하면 시간이 오래 걸릴 수 있습니다. 시간이 충분한 경우 프로세스가 완료되므로 이 지연을 정지로 해석하지 마십시오. DSA 키 생성 알고리즘은 다른 알고리즘보다 빠른 표준 키 길이(예: 512, 1024)를 생성하도록 최적화되었습니다.
- JNI 응용프로그램에서 JNI_CreateJavaVM()을 호출하면 세그먼트화 결함(신호 SIGSEGV)이 발생할 수 있습니다. 이런 결함을 방지하려면 -lpthread 옵션을 지정하여 JNI 프로그램을 다시 빌드하십시오.
- 대만어 사용자에 한해, LinYi ZhuYin, YiTian ZhuYin 및 Bosham IME를 사용하여 TCH 문자를 입력할 경우 기능키 Enter, Space, Backspace 및 ESC가 예상대로 작동하지 않습니다. Enter 키는 새 행을 삽입하고 ESC 키는 사전 편집 문자열이나 후보 창을 취소하는 데 사용되며 Space bar는 공간을 삽입합니다. 커미트 키를 누른 후에는 후보 창이 사라져야 하며 LinYi ZhuYin, YiTian ZhuYin 및 Bosham IME를 사용하여 대만어 문자를 입력하는 동안에는 Backspace 키를 누를 경우 후보 창이 표시되지 않아야 합니다.
- 여러 개의 멀티 스레드로 실행 중인 경우, `java.lang.OutOfMemoryError`와 같은 경고 메시지가 표시될 수 있습니다. 이는 사용자 시스템의 시스템 자원이 부족하다는 표시이며, 메시지의 원인은 다음과 같은 이유 때문일 수 있습니다.
  1. 다음과 같은 이유로 새 스레드를 작성할 수 없습니다.
     - 작성된 프로세스 수가 사용자 한계를 초과합니다.
     - 새 스레드를 작성하는 데 충분한 시스템 자원이 사용 가능하지 않습니다. 이 경우, 실행 중인 응용프로그램에 따라 다른 Java 예외사항을 참조할 수도 있습니다.
  2. 커널 메모리가 부족하거나 단편화되었습니다. /var/log/messages에서 종료된 프로세스 ID를 가진 해당 메모리 부족 커널 메시지를 참조할 수 있습니다.
  해당 시스템 자원을 늘리려면 시스템을 조정하십시오.
- 설치 중, Red Hat에서 배포된 이 제품의 이전 버전을 이미 설치한 경우, RPM(Red Hat Package Manager)은 IBM 패키지가 Red Hat이 분배한 제품의 임의 버전보다 이전 버전임을 보고합니다. 이 조건은 Red Hat이 패키지에서 제품의 버전 지정 설계를 대체하는 RPM 패키지에 "일련 번호"를 추가하기 때문에 발생하며, 기본적으로 RPM은 이미 설치된 버전보다 이전 버전으로 보이는 패키지 설치를 거절합니다. rpm 명령의 --oldpackage 옵션은 새 IBM 패키지를 설치할 수 있게 합니다.
- Linux 시스템에서 Java awt/swing 응용프로그램을 실행하여 디스플레이를 2차 시스템으로 내보낼 때 X 클라이언트 시스템에 로드된 글꼴 세트와 X 서버 시스템에 로드된 세트가 서로 다른 경우 일부 대화 상자를 표시하는 데 문제점이 발생할 수 있습니다. 이러한 문제점은 서버 버전의 기본 설치 시에는 arphic 글꼴을 설치하고 클라이언트의 기본 설치 시에는 이를 설치하지 않는 중국어 로케일의 SLES8에서 특히 자주 나타납니다. 이 문제점을 방지하려면 두 시스템에 동일한 글꼴을 설치하십시오.
- 시스템 로케일에서 UTF-8 인코딩을 사용하는 경우 일부 SDK 툴에서 sun.io.MalformedInputException이 발생할 수 있습니다. 사용자의 시스템이 UTF-8 인코딩을 사용하는지 보려면 LANG 또는 LC_ALL 등의 로케일별 환경 변수를 확인하여 해당 변수가 ".UTF-8" 접미부로 끝나는지 확인하십시오. sun.io.MalformedInputException이 발생하는 경우, 7비트 ASCII 범위(0x00 - 0x7f) 내에 없으면서 Java Unicode 문자 리터럴로 나타내지 않는 문자를 Java Unicode 문자 리터럴(예: '\u0080')로 변경하십시오. 또는 로케일별 환경 변수에서 ".UTF-8" 접미부를 제거하십시오. 예를 들어, 시스템의 기본 로케일이 "en_US.UTF-8"이면 LANG을 "en_US"로 설정하십시오.
- AMI 및 xcin을 교차 플랫폼 환경에서 사용하는 경우(예를 들어, 32비트 시스템과 64비트 시스템 간이나 빅 엔디안 시스템과 리틀 엔디안 시스템 간에 디스플레이를 내보내려는 경우) 문제점이 발생할 수 있습니다. 이러한 경우에는 Linux 배포자에게 문의하십시오.
- Redhat Enterprise Linux 3.0의 경우, AWT 텍스트 구성요소에서 중국어 문자가 표시되지 않을 수 있습니다(중국어 GB18030 로케일의 GB2312 문자는 제외).

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

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

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

작은 글자 부분. IBM에 메시지를 보내는 경우 IBM은 질문, 의견, 제안과 같은 피드백 데이터 등 메시지에 포함된 모든 정보를 기밀이 아닌 것으로 간주하여 이러한 정보와 관련하여서는 아무 책임을 지지 않으며 이 정보를 제한 없이 복제, 사용, 발표 및 타인에게 배포할 수 있습니다. 나아가 IBM은 본 정보와 연관된 제품의 개발, 제조, 마케팅을 포함하여(단, 이에 한하지 않음) 어떠한 목적으로도 본 정보에 포함된 아이디어, 개념, 노하우 또는 기술을 제한없이 사용할 수 있습니다.

# 주의사항

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

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

- 135-270
  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.의 상표 또는 등록상표입니다.

Linux는 미국 또는 기타 국가에서 사용되는 Linus Torvalds의 상표입니다.

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

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