Date: 2004-06-09

# IBM Runtime Environment for Linux platforms, Java 2 Technology Edition, 버전 1.4.2

# 사용자 안내서

# 저작권 정보

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

이 사용자 안새서 개정판은 새 개정판에서 별도로 명시하지 않는 한, 사용 가능한 다음 플랫폼에 적용됩니다.

- IBM 32-bit Runtime Environment for Linux on Intel(TM) architecture, Java 2 Technology Edition, 버전 1.4.2
- IBM 64-bit Runtime Environment for Linux on Intel architecture, Java 2 Technology Edition, 버전 1.4.2
- IBM 32-bit Runtime Environment for Linux on iSeries(TM) and pSeries(R), Java 2 Technology Edition, 버전 1.4.2
- IBM 64-bit Runtime Environment for Linux on iSeries and pSeries, Java 2 Technology Edition, 버전 1.4.2
- IBM 31-bit Runtime Environment for Linux on zSeries(R), Java 2 Technology Edition, 버전 1.4.2
- IBM 64-bit Runtime Environment for Linux on zSeries, 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.

# 머리말

이 사용자 안내서는 모든 Linux 플랫폼용 IBM(R) Runtime Environment에 대해 설명합니다. 플랫폼별 정보가 명확하게 표시되어 있습니다. 사용자의 플랫폼에 맞는 자료인지 확인하십시오. 특히 Web Start 및 Plug-in은 Intel 구조의 Linux용 32비트 SDK에만 적용됩니다.

IBM Runtime Environment에는 JVM(Java Virtual Machine), 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"이라는 용어는 이 안내서에서 상호 교환적으로 사용됩니다.

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

# 목차

저작권 정보
머리말
개요
| |
규약
버전 호환성
| |
Linux PPC64 사용자 정보
Linux용 Runtime Environment에 포함된 파일
라이센스 계약
JIT 컴파일러
Java Native Interface 및 Native Method Interface
| |
Red Hat Enterprise Linux (RHEL) 3에 설치
Linux용 Runtime Environment 구성
Linux용 Runtime Environment 설치 제거
설치 가능한 RPM 패키지 설치 제거
압축된 TAR 패키지 설치 제거
| |
JDBC/ODBC 브릿지 복원
Java 응용프로그램 실행
명령 요약
옵션
표준 옵션
비표준 옵션
java 명령의 글로벌화
Classpath에 대한 작업
| |
대형 페이지 메모리 할당 구성
bootclasspath에 대한 작업
가비지 콜렉션 정책 지정
일시정지 시간
일시정지 시간 감소
힙이 가득 찬 상태의 환경
가비지 콜렉션에 관한 추가 정보
JVM의 신호 처리 방법
JVM에서 사용되는 신호
원시 코드 드라이버를 신호 체인 라이브러리로 링크
| |
RMI용 연결 핸들러 풀 구현
IBM 빌드 및 버전 번호 찾기
(Linux IA 32비트 전용) Java Plug-in 사용
Netscape 6 및 Mozilla용 Java Plug-in 설치 및 구성
Netscape 4용 Java Plug-in 설치 및 구성
gcc3.2.x 컴파일 Mozilla 브라우저에 Java Plug-in 사용
DBCS 매개변수 사용
(Linux IA 32비트 전용)Web Start 사용
Web Start 설치
floating 스택에 대한 작업
DBCS 언어에서 입력 방법 전환
사용자 시스템에 응용프로그램 설치
알려진 제한사항
모든 Linux 플랫폼에 적용되는 제한사항(별도로 명시한 경우 제외)
Linux IA 32비트 제한사항
Linux PPC 32비트 및 64비트 제한사항
Linux PPC 32비트 제한사항
Linux zSeries 64비트 제한사항
Linux zSeries 32비트 및 64비트 제한사항
사용자 안내서에 대한 의견
주의사항
상표

# 개요

Linux용 Runtime Environment에는 Java Runtime Environment를 작성하고 Java 프로그램을 실행하는 데 필요한 클래스 서브세트가 포함되어 있습니다. 또한 JVM, Java 클래스 및 지원 파일이 포함되어 있습니다. Linux용 Runtime Environment에는 SDK에 있는 클래스 서브세트만 포함되어 있습니다.

| | |

## 규약

|

이 사용자 안내서에서는 SDK의 기본 설치 디렉토리를 |/opt/IBMJava2-142/라고 합니다. 아래 나열된 플랫폼에는 각각의 기본 설치 디렉토리가 |있습니다. /opt/IBMJava2-142/를 참조하여 플랫폼에 맞는 디렉토리를 사용하십시오. |

|

|
- Linux IA 32비트: /opt/IBMJava2-142/
|
- Linux IA 64비트: /opt/IBMJava2-142/
|
- Linux PPC 32비트: /opt/IBMJava2-ppc-142/
|
- Linux PPC 64비트: /opt/IBMJava2-ppc64-142/
|
- Linux zSeries 31비트: /opt/IBMJava2-s390-142/
|
- Linux zSeries 64비트: /opt/IBMJava2-s390x-142/

## 버전 호환성

일반적으로 Linux용 SDK 버전 1.1.8, 1.2.2 또는 1.3.1에서 실행되는 모든 애플릿 또는 응용프로그램은 이 버전에서 올바로 실행되어야 합니다. Sun의 Java 1.4.2 API에 종속되는 애플릿은 Java 1.4.2 API를 지원하는 브라우저에서만 작동합니다.

1.4.2에서 컴파일된 클래스가 Runtime Environment 1.4.0 이전 릴리스에서 작동하는지는 보장할 수 없습니다.

| | |

### Linux PPC64 사용자 정보

|

Runtime Environment v1.4.2는 SLES 8에서 지원되지 않습니다. |SLES 8에서 SDK를 실행하려면 SDK v1.4.1 SR1을 사용하십시오.

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

Linux용 Runtime Environment에는 런타임시 프로그램을 지원하는 데 필요한 클래스 파일 및 디버그할 수 없는 .so 파일이 있습니다. Linux용 Runtime Environment에는 애플릿 뷰어나 javac와 같은 개발 도구 또는 개발 시스템에만 관련된 클래스가 포함되어 있지 않습니다.

또한 Runtime Environment for Linux에 사용하도록 Java Communications API(Application Programming Interface) 패키지가 제공됩니다. (Linux IA 64비트 및 Linux zSeries 31비트 및 64비트의 경우 제외).

## 라이센스 계약

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

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

## JIT 컴파일러

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

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

JIT를 사용 불가능하게 하려면 응용프로그램을 실행할 창의 쉘 프롬프트에서 다음을 입력하십시오.

        export JAVA_COMPILER=NONE

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

        export JAVA_COMPILER=jitc

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

        java -version

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

    (JIT enabled: jitc)

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

    (JIT disabled)

## Java Native Interface 및 Native Method Interface

JNI(Java Native Interface)는 Runtime Environment에 포함되어 있습니다. JNI 사용에 대해서는 Sun 웹 사이트 http://java.sun.com을 참조하십시오.

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

| | |

# Red Hat Enterprise Linux (RHEL) 3에 설치

|

Runtime Environment는 공유 라이브러리 /usr/lib/libstdc++-libc6.2-2.so.3에 따릅니다. |해당 라이브러리는 RedHat Enterprise Linux (RHEL) |3.0에서 기본값으로 설치되지 않습니다.

|

해당 라이브러리를 포함하는 rpm은 `compat-libstdc++-7.3-2.96.122.i386.rpm`입니다. 라이브러리를 설치하려면 쉘 프롬프트에서 다음을 입력하십시오. |

|

    rpm -ivh compat-libstdc++-7.3-2.96.122.i386.rpm

|

RHEL 3 설치 시 해당 라이브러리를 포함시키려면 다음을 수행하십시오. |

|

|
1. 패키지 기본값 화면이 표시되면 |설치할 패키지 세트 사용자 정의 옵션을 선택하십시오.
|
2. 패키지 그룹 선택 화면에서 개발 옵션 아래에 있는 레거시 소프트웨어 |개발을 선택하십시오.

# Linux용 Runtime Environment 구성

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

/opt/IBMJava2-142/jre/bin

Linux용 Runtime Environment를 다른 디렉토리에 설치한 경우, /opt/IBMJava2-142/를 Runtime Environment를 설치한 디렉토리로 대체하십시오.

주:
(Linux IA 32비트 중국어 사용자에 한해) RedHat Advanced Server의 글꼴 인코딩에서 불일치사항이 발생할 수 있으므로, 중국어를 기본 언어로 사용하는 환경에서 제품을 설치하는 경우에는 기본 언어를 영어로 설정하여 설치를 완료한 다음, 이를 중국어로 변경하는 것이 좋습니다. 그렇지 않으면 중국어 글꼴이 표시되지 않을 수도 있습니다.

# Linux용 Runtime Environment 설치 제거

Runtime Environment를 제거하는 방법은 설치 가능한 RPM(Red Hat Package Manager) 패키지를 설치한 경우와 압축된 TAR(Tape Archive) 패키지를 설치한 경우에 따라 다릅니다. 지시사항은 설치 가능한 RPM 패키지 설치 제거 또는 압축된 TAR 패키지 설치 제거를 참조하십시오.

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

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

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

   -     rpm -e IBMJava2-JRE-1.4.2

   - Linux PPC 32비트의 경우 다음을 입력하십시오.

         rpm -e IBMJava2-JRE-ppc-1.4.2

   - Linux PPC 64비트의 경우 다음을 입력하십시오.

         rpm -e IBMJava2-JRE-ppc64-1.4.2

   또는 kpackage나 yast2와 같은 그래픽 툴을 사용할 수 있습니다.
2. PATH 명령문에서 Runtime Environment을 설치한 디렉토리를 제거하십시오
3. (Linux IA 32비트에만 적용) Java Plug-in을 설치한 경우, 웹 브라우저 디렉토리에서 Java Plug-in 파일을 제거하십시오.

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

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

1. Runtime Environment를 설치한 디렉토리에서 Runtime Environment 파일을 제거하십시오.
2. PATH 명령문에서 Runtime Environment을 설치한 디렉토리를 제거하십시오.
3. (Linux IA 32비트에만 적용) Java Plug-in을 설치한 경우, 웹 브라우저 디렉토리에서 Java Plug-in 파일을 제거하십시오.

| | |

# JDBC/ODBC 브릿지 복원

|

IBM SDK, v1.4.0에서 제거되었던 JDBC/ODBC 브릿지가 |v1.4.2에서는 복원되었습니다.

# Java 응용프로그램 실행

java 툴은 Java 응용프로그램을 실행합니다.

JVM은 부트스트랩 classpath, 설치된 확장자 및 사용자 classpath와 같은 세 가지 위치 세트에서 시작 클래스 및 사용되는 기타 클래스를 검색합니다. 클래스 이름 또는 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 | jni]
  - 상세 출력을 사용 가능하게 합니다.
- -version
  - 제품 버전을 인쇄합니다.
- -X
  - 비표준 옵션에서 도움말을 인쇄합니다.

### 비표준 옵션

아래 나열된 -X 옵션은 사용 가능한 옵션의 서브세트입니다. 이것은 비표준 옵션으로 통지없이 변경될 수 있습니다.

- -Xargencoding
  - java 명령 옵션이 Unicode 이스케이프 순서를 사용하여 로케일의 문자 세트에 없는 문자를 표현할 수 있도록 합니다. Unicode 이스케이프 순서는 \u####의 형식입니다. 여기서, #은 16진수입니다.
- -Xbootclasspath:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 부트스트랩 클래스 및 자원용 탐색 경로를 설정합니다. bootclasspath를 설정하는 또 다른 방법이 있습니다. bootclasspath에 대한 작업을 참조하십시오.
- -Xbootclasspath/a:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 부트스트랩 클래스 경로의 끝에 추가합니다.
- -Xbootclasspath/p:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>
  - 부트스트랩 클래스 경로의 앞 부분에 추가합니다. bootclasspath에 대한 작업을 참조하십시오.
- -Xcheck:jni
  - JNI 기능의 추가 점검을 수행합니다.
- -Xcheck:nabounds
  - JNI 배열 조작의 추가 점검을 수행합니다.
- -Xdebug
  - 디버거를 사용 가능하게 하여 JVM을 시작합니다.
- -Xdisableexplicitgc
  - System.gc()에 대한 호출을 no-ops로 변경합니다.
- -Xdisablejavadump
  - 비정상적으로 프로세스를 종료할 경우, java 덤프 기능을 사용할 수 없습니다. Java 덤프를 사용할 수 없을 경우 시스템 프로세스 종료 덤프가 실행됩니다. Java 코드 내에서 문제가 발생하는 경우 java 덤프가 유용합니다. 시스템 구성요소에 문제가 있는 경우에는 정상적인 시스템 덤프를 실행하는 것이 더 유용합니다.
- -Xgcpolicy:{optthruput | optavgpause }
  - 가비지 콜렉션 설정을 지정합니다. 기본 설정은 optthruput입니다. 자세한 정보는 가비지 콜렉션 정책 지정을 참조하십시오.
- |-Xlp |
  |
  - Java 힙(Java 오브젝트가 할당되는 |힙)을 대형 페이지(MB)로 할당하도록 JVM에 요청합니다. 대형 페이지를 |사용할 수 없는 경우, Java 힙은 Linux의 표준 페이지(일반적으로 |4KB)로 할당됩니다. JVM은 shmget()을 사용하여 힙을 대형 페이지로 |할당합니다. 대형 페이지는 Linux 커널 |V2.6 이상을 실행하는 시스템에서 지원됩니다.
- -Xms<size>
  - 초기 Java 힙 크기를 설정합니다.
- -Xmx<size>
  - 최대 Java 힙 크기를 설정합니다.
- -Xnoclassgc
  - 클래스 가비지 콜렉션을 사용 불가능하게 합니다.
- -Xoss<size>
  - 임의의 스레드에 대한 최대 Java 스택 크기를 설정합니다.
- -Xquickstart
  - 응용프로그램의 시작 시간을 향상시킵니다. 이 옵션을 지정하지 않을 경우, 초기 메소드 컴파일은 최상의 최적화시 수행됩니다(즉, JIT는 "hot" 메소드가 처음에 최상의 최적화로 컴파일되므로 이 메소드를 다시 컴파일하지 않습니다).
- -Xrs
  - 운영 체제 신호의 사용을 줄입니다.
- -Xrunlibrary_name[:options]
  - 도움말 라이브러리를 로드합니다. 여러 개의 라이브러리를 로드하려면 명령행에서 두 번 이상 지정하십시오. 이러한 라이브러리의 예로 다음이 있습니다.
    - -Xrunhprof[:help] | [:<option>=<value>, ...]
      - 힙, CPU 또는 모니터 프로파일링을 수행합니다.
    - -Xrunjdwp[:help] | [:<option>=<value>, ...]
      - 응용프로그램의 원격 디버깅을 지원하기 위해 디버깅 라이브러리를 로드합니다.
- -Xss<size>
  - 임의의 스레드에 대한 최대 고유 스택 크기를 설정합니다. 자세한 정보는 floating 스택에 대한 작업을 참조하십시오.
- -Xverbosegclog:<path to file><filename>[X, Y]
  - verboseGC 결과물이 지정된 파일에 작성됩니다. 이미 파일이 있는 경우 해당 파일에 겹쳐씁니다. 기존 파일을 열 수 없거나 새 파일을 작성할 수 없는 경우, 결과물을 stderr로 방향 재지정합니다. 인수 X 및 Y를 지정하면(둘 다 정수) verboseGC 결과물은 파일의 Y수로 방향이 재지정됩니다. 여기서, 각각에 대한 verboseGC 결과물의 gc 사이클에 대해 X수가 포함됩니다. 이들 파일은 filename1, filename2 등의 형식이 있습니다.
    주:
    환경 변수 IBM_JVM_ST_VERBOSEGC_LOG는 제거되었습니다.
- -Xverify
  - 앞으로의 기본값을 추정하기 위한 가장 정밀한 점검을 가능하게 합니다.

## java 명령의 글로벌화

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

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

클래스 이름과 명령 인수를 UTF8 또는 ISO8859_1 인코딩으로 지정하려면 -Xargencoding:utf8 및 -Xargencoding:latin을 사용하십시오.

Runtime Environment에서 영어 이외의 로케일을 사용하는 경우 java 및 javaw 명령은 변환된 출력 메시지를 제공합니다. 이들 메시지는 1.3.1 버전의 메시지와는 다르며 Java가 실행되는 로케일에 따라서도 다릅니다. java에 의해 리턴되는 자세한 오류 설명 및 기타 디버그 정보는 영어로 되어 있습니다. 초기화 중 리턴되는 디버그 정보는 대괄호로 표시됩니다.

## Classpath에 대한 작업

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

| | |

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

|

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

|

대형 페이지 메모리 할당을 구성하려면 먼저, 실행 중인 커널이 대형 페이지를 지원하는지 |확인하십시오. /proc/meminfo 파일에 다음 행이 포함되어 있는지 |확인하십시오.

|

    HugePages_Total:     4
    |HugePages_Free:      4
    |Hugepagesize:     4096 kB

이들 필드의 값은 시스템에 따라 다릅니다. |커널이 대형 페이지를 지원하지 않는 경우 대형 페이지를 지원하는 새 커널을 |컴파일해야 합니다.

|

대형 페이지에 할당할 수 있는 메모리 용량은 |`HugePages_Free * Hugepagesize`의 값으로 구할 수 있습니다. 시스템 관리자는 |Java 힙 요구사항을 준수할 수 있도록 시스템의 대형 페이지 수를 구성해야 |합니다. 시스템 관리자는 /proc/sys/vm/nr_hugepages 파일을 편집하여 |대형 페이지의 수를 구성할 수 있습니다.

|

사용 가능한 여분의 대형 페이지가 시스템에 적당하게 있는 경우 |대형 페이지 메모리를 할당하는 shmget() 호출에 실패할 수 있습니다. 이는 대형 페이지가 |인접하지 않기 때문에 발생합니다. 이러한 실패를 피하려면 |시스템 관리자는 시스템 bootup에서 `hugepages=<n>` 옵션을 지정해야 |합니다(나중에 /proc으로 지정하는 대신).

|

shmmax를 사용하는 shmget()은 대형 페이지 메모리를 할당합니다. shmmax 값을 수정하려면 |/proc/sys/kernel/shmmax 파일을 편집하십시오.

|

shmget()은 루트로 실행 중인 경우에만 성공합니다. 대형 페이지를 |사용하려면 Java를 루트로 실행하거나 Java 실행 파일의 suid bit를 설정할 수 있습니다.

## bootclasspath에 대한 작업

Java 응용프로그램 실행에 설명된 -D 옵션을 사용하여 시스템 특성ibm.jvm.bootclasspath을 설정할 수 있습니다. 이 특성값은 추가 검색 경로로 사용되며, -Xbootclasspath/p:에 의해 정의된 값과 부트스트랩 클래스 경로 사이에 삽입됩니다. 부트스트랩 클래스 경로는 기본값이거나 -Xbootclasspath: 옵션을 사용하여 정의된 경로입니다.

-Xbootclasspath: 또는 -Xbootclasspath/p: 옵션을 사용하여 core.jar, graphics.jar, server.jar, security.jar, xml.jar, tools.jar 또는 charsets.jar의 클래스를 대체하는 응용프로그램은 전개하지 마십시오. 이런 전개는 Java 2 Runtime Environment 2진 코드 라이센스를 위반하는 것입니다.

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

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

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

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

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

### 일시정지 시간

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

### 일시정지 시간 감소

optavgpause 옵션은 가비지 콜렉션 일시정지 길이에 대한 힙 크기 증가의 영향을 제한함과 동시에 이들 가비지 콜렉션 일시정지의 시간을 상당히 줄여줍니다. 이 옵션은 특히 대형 힙으로 이루어진 구성과 관련이 있습니다. 일부 가비지 콜렉션 활동을 정상 프로그램 실행과 동시에 실행하면 일시정지 시간을 줄일 수 있습니다. 일시정지 시간을 줄이면, 응용프로그램 처리량이 일부 감소될 수 있으며 이는 응용프로그램에 따라 다릅니다.

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

Java 힙이 거의 가득 차게 되고 재생될 수 있는 가비지가 거의 없는 경우, 즉시 사용 가능한 공간이 없으므로 새 오브젝트에 대한 요청이 신속히 충족되지 않을 수 있습니다. 힙이 거의 가득 찬 용량으로 조작될 경우 위의 옵션 중에서 어느 옵션이 사용되는지에 관계없이 응용프로그램 성능이 저하될 수 있습니다. 또한 더 많은 힙 공간 요청이 계속 작성되면 응용프로그램에 OutofMemory 예외가 발생하게 되며, 이 예외를 찾아 처리하지 못하면 JVM이 종료될 수 있습니다. 이 때 JVM은 두 개의 진단 파일인 Heapdump 및 Javadump를 생성합니다. 이에 대해서는 Java 1.4.2 진단 안내서에 자세히 설명되어 있으며 이를 참조하여 Java 힙이 가득 차게 되는 원인을 판단할 수 있습니다. 진단 안내서는 http://www-106.ibm.com/developerworks/java/jdk/diagnosis/에 있는 개발자 문서에 있습니다. 이러한 조건에서는 -Xmx 옵션을 사용하여 힙 크기를 늘리거나 사용 중인 응용프로그램 오브젝트의 수를 줄이십시오.

### 가비지 콜렉션에 관한 추가 정보

가비지 콜렉션에 관한 자세한 정보는 다음을 참조하십시오.

http://www.ibm.com/developerworks/ibm/library/i-garbage1/

http://www.ibm.com/developerworks/ibm/library/i-garbage2/

http://www.ibm.com/developerworks/ibm/library/i-garbage3/

# JVM의 신호 처리 방법

JVM과 관련된 신호가 오면, 신호 핸들러가 호출됩니다. 이 신호 핸들러는 Java 또는 Java 이외의 스레드에 대해 호출되었는지를 판별합니다. 신호가 Java 스레드에 대한 것이면, JVM은 신호 처리를 제어할 수 있습니다. 신호가 Java 이외의 스레드에 대한 것이며 JVM를 설치한 응용프로그램에 신호에 대한 자체 핸들러가 이미 설치되어 있는 경우에는 해당 핸들러가 신호를 제어합니다. 그렇지 않으면, 이 신호는 무시됩니다. (신호의 기본 조치 여부와 상관없습니다.)

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

- 조건 및 복구를 처리합니다(예외가 응용프로그램 코드에 의해 발생된 경우). 또는
- 다음과 같이 제어된 시스템 종료 순서로 들어갑니다.
  1. 해당 신호에 대한 응용프로그램의 신호 핸들러 호출
  2. Javadump를 출력하여 실패 시점의 JVM 상태 설명
  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에 의해 사용 불가능
--- | --- | --- | ---
SIGSEGV | 예외 | 잘못된 메모리 액세스(액세스할 수 없는 메모리에 쓰기) | 아니오
SIGILL | 예외 | 잘못된 명령어(알수 없는 시스템 명령을 호출하려는 시도) | 아니오
SIGFPE | 예외 | 부동 소수점 예외(0으로 나누기) | 아니오
SIGBUS | 예외 | 버스 오류(존재하지 않는 메모리 위치를 주소 지정하려는 시도) | 예
SIGSYS | 예외 | 잘못된 시스템 호출 발행 | 예
SIGXCPU | 예외 | CPU 시간 한계 초과(실행 시간 초과) | 예
SIGXFSZ | 예외 | 파일 시스템 한계 초과 | 예
SIGABRT | 오류 | 비정상 종료. JVM 결함을 발견할 때마다 JVM이 이 신호를 일으킵니다. | 예
SIGINT | 인터럽트 | 대화식 주의(CTRL-C). JVM이 정상적으로 종료합니다. | 예
SIGTERM | 인터럽트 | 종료 요청. JVM이 정상 종료합니다. | 예
SIGHUP | 인터럽트 | 끊기. JVM이 정상 종료합니다. | 예
SIGUSR1 | 제어 | 사용자 정의. 내부 제어 목적으로 일부 JVM에서 사용됩니다. | 아니오
SIGUSR2 | 제어 | 사용자 정의. 내부 제어 목적으로 일부 JVM에서 사용됩니다. | 아니오
SIGQUIT | 제어 | 단말기에 대한 종료 신호. JVM은 이 신호를 사용하여 Javadump를 가져옵니다. | 예
SIGTRAP | 제어 | dbx 또는 ptrace에서 사용하기 위한 내부 제어. 내부 제어 목적으로 일부 JVM에서 사용됩니다. | 예
SIGPIPE | 제어 | 읽고 있지 않는 파이프에 쓰기. JVM은 이 신호를 무시합니다. | 아니오

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

신호 `1(SIGHUP)`, `2(SIGINT)`, `4(SIGILL)`, `6(SIGABRT)`, `7(SIGEMT)`, `8(SIGFPE)`, `10(SIGBUS)`, `11(SIGSEGV)`, `12(SIGSYS)`, `15(SIGTERM)` 및 `24(SIGXCPU)`는 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/classic -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 - 항상 설정
- SA_ONSTACK - Linux IA 및 zSeries의 경우 항상 설정(SIGSEGV만). Linux PPC의 경우 설정하지 않음.

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

| | |

# RMI용 연결 핸들러 풀 구현

|

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

|

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

|

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

|

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

# IBM 빌드 및 버전 번호 찾기

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

`java -version`

# (Linux IA 32비트 전용) Java Plug-in 사용

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

Java Plug-in은 Sun 웹 사이트 http://java.sun.com/j2se/1.4.2/docs/guide/plugin/developer_guide/에 설명되어 있습니다.

Java Plug-in은 SDK의 이번 릴리스에서 인쇄를 지원하지 않습니다.

Java Plug-in은 해당 배포판에서 명시한 대로 Netscape 4, Netscape 6 및 Mozilla에서 지원됩니다.

## Netscape 6 및 Mozilla용 Java Plug-in 설치 및 구성

Netscape 6 또는 Mozilla용 Java Plug-in을 설치하여 구성하려면 기호 링크를 라이브러리 파일 /opt/IBMJava2-142/jre/bin/libjavaplugin_oji.so에서 사용자 브라우저의 plugins 디렉토리(/brower-install-path/plugins)로 작성하십시오.

모든 사용자가 Java Plug-in을 사용할 수 있도록 하려면 다음을 수행하십시오.

1. root로 로그인하십시오.
2. 라이브러리 파일 /opt/IBMJava2-142/jre/bin/libjavaplugin_oji.so에 대한 기호 링크를 Mozilla 또는 Netscape plugin 디렉토리(일부 다른 경우도 있지만 일반적으로 /usr/local/mozilla/plugins/(또는 netscape))에 놓으십시오.

       ln -s /opt/IBMJava2-142/jre/bin/libjavaplugin_oji.so \
       /usr/local/mozilla/plugins/

주:
libjavaplugin_oji.so는 복사되기 보다는 기호로 링크되어야 합니다. 그렇지 않으면, JVM의 위치를 찾을 수 없습니다.

## Netscape 4용 Java Plug-in 설치 및 구성

Netscape 4용 Java Plug-in을 설치하여 구성하려면 기호 링크를 라이브러리 파일 /opt/IBMJava2-142/jre/bin/javaplugin.so에서 사용자 브라우저의 plugins 디렉토리로(/brower-install-path/plugins) 작성하십시오.

현재 사용자가 Java Plug-in을 사용할 수 있도록 하려면 다음을 수행하십시오.

1. plugins 디렉토리가 없는 경우 $HOME/.netscape 디렉토리 아래에 plugins 디렉토리를 작성하십시오.
2. 라이브러리 파일 /opt/IBMJava2-142/jre/bin/javaplugin.so로부터 /$HOME/.netscape/plugins로 기호 링크를 작성하십시오.

모든 사용자가 Java Plug-in을 사용할 수 있도록 하려면 다음을 수행하십시오.

1. root로 로그인하십시오.
2. 라이브러리 파일 /opt/IBMJava2-142/jre/bin/javaplugin.so에 대한 기호 링크를 plugin 디렉토리(일부 다른 경우도 있지만 일반적으로 /usr/local/netscape/plugins/)에 놓으십시오.

       ln -s /opt/IBMJava2-142/jre/bin/javaplugin.so \
          /usr/local/netscape/plugins/

주:
javaplugin.so는 복사되기 보다는 기호로 링크되어야 합니다. 그렇지 않으면 JVM의 위치를 찾을 수 없습니다.

## gcc3.2.x 컴파일 Mozilla 브라우저에 Java Plug-in 사용

gcc3.2.x 컴파일 Mozilla 브라우저(SLES8, Suse8.1)가 제공되는 배포판을 사용하는 경우에는 Linux용 IBM SDK, v1.4.2와 함께 제공되는 gcc3 컴파일 플러그인 라이브러리 (libjavaplugin_ojigcc3.so and libjavaplugin_jnigcc3.so)를 사용해야 합니다. 이들 라이브러리를 사용하려면 다음과 같이 <mozilla_installation_dir>/plugins 디렉토리 아래의 libjavaplugin_ojigcc3.so에 대한 기호 링크를 작성해야 합니다.

    ln -s <sdkdir>/jre/bin/libjavaplugin_ojigcc3.so libjavaplugin_ojigcc3.so

## 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 파일의 구문 분석에 사용할 인코딩을 지정할 수 있습니다.

- Netscape 4: 보기 메뉴 -> 문자 세트
- Mozilla: 보기 메뉴 -> 문자 코딩

# (Linux IA 32비트 전용)Web Start 사용

Java Web Start는 Java 기술에 기반한 응용프로그램을 전개하는 방법입니다. Web Start는 컴퓨터와 인터넷을 연결해 주고 이로써 사용자는 웹에서 바로 응용프로그램을 실행 및 관리할 수 있습니다. Java Web Start는 한 번의 클릭으로 응용프로그램을 시작할 수 있도록 하며 항상 최신 버전을 실행하도록 하여 설치 또는 업그레이드 프로시저가 필요없도록 합니다. 종종 웹을 통해 소프트웨어를 분배하기 위해서는, 웹에서 설치 프로그램을 찾아 이를 다운로드하여 배치한 후 실행해야 하는 경우가 있습니다. 설치 프로그램이 실행된 후 설치 디렉토리와 설치 옵션(예: 전체, 일반 또는 최소)을 선택하라는 프롬프트가 표시됩니다. 이는 소프트웨어의 각 새 버전에 대해 반복해야 하는 시간 소비가 많고 복잡한 태스크입니다.

이와 반대로 웹 전개 응용프로그램(예: HTML 기반 전자 우편 클라이언트 및 달력)은 설치와 사용이 간단합니다. 웹 브라우저가 프로세스를 자동으로 처리합니다. 복잡한 다운로드, 설정 및 구성 단계가 없고 최신 버전을 실행하도록 보장합니다. Java Web Start는 완전한 기능을 갖춘 응용프로그램에 동일한 이점을 제공합니다.

Web Start에 대한 자세한 정보는 http://java.sun.com/products/javawebstart를 참조하고 추가 문서에 대해서는 http://java.sun.com/j2se/1.4.2/docs/guide/jws/index.html을 참조하십시오.

## Web Start 설치

Web Start 설치 스크립트는 Java용 JRE V1.4.2와 함께 설치됩니다.

이 스크립트는 /opt/IBMJava2-142/jre/bin/webstart_install_sdk.sh입니다. Web Start를 사용하려면 이 스크립트를 실행하십시오. 현재 작업 디렉토리를 Web Start를 설치하려는 위치로 설정하십시오. 설치 프로세스 중 현재 작업 디렉토리에 서브디렉토리 javaws가 작성됩니다.

설치 프로세스에서는 Mozilla 및 기타 브라우저에서 사용되는 MIME 유형도 갱신합니다.

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

1. .jnlp 파일에 대한 참조인 웹 페이지에서 링크를 선택하십시오.
2. 위에서 작성한 javaws 디렉토리에서 javaws를 시작하여 응용프로그램을 선택할 수 있는 Web Start 대화 상자를 시작하십시오.
3. 쉘 스크립트에서 `javaws <URL>`을 입력하십시오. 여기서 `<URL>`은 .jnlp 파일의 위치입니다.

이러한 조치로 Web Start는 선택된 응용프로그램을 시작합니다. 응용프로그램이 처음 사용되는 경우 응용프로그램이 다운로드됩니다. 나중에 호출될 때, 원래 웹 사이트를 점검하여 갱신사항이 사용 가능한지 여부를 확인합니다. Web Start는 응용프로그램이 시작되기 전에 이들 갱신사항을 다운로드합니다.

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

# floating 스택에 대한 작업

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

(Linux IA 32비트에만 적용) 특정 Linux 배포본(예: Red Hat)에서는 'floating 스택'이라는 GLIBC 기능을 사용할 수 있습니다. Linux 커널 제한사항 때문에 JVM은 커넬 레벨이 2.4.10 미만인 경우 사용 가능하게 된 floating 스택이 SMP 하드웨어에서는 실행되지 않습니다. 이러한 환경에서는 JVM 또는 JVM을 시작하는 임의의 응용프로그램이 시작되기 전에 반드시 floating 스택을 사용 불가능하도록 해야 합니다. Red Hat에서 환경 변수를 내보내기하여 floating 스택을 사용 불가능하게 하려면 다음 명령을 사용하십시오.

    export LD_ASSUME_KERNEL=2.2.5

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

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

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

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

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

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

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

# 알려진 제한사항

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

## 모든 Linux 플랫폼에 적용되는 제한사항(별도로 명시한 경우 제외)

- 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)를 생성하도록 최적화되었습니다.
- 원시 프로그램은 1.1 JVM을 작성할 수 없습니다. JNI_CreateJavaVM()을 호출하여 이를 JNI_VERSION_1_1(0x00010001)의 버전에 전달할 수 없습니다. 전달할 수 있는 버전은 다음과 같습니다.
  - JNI_VERSION_1_2(0x00010002)
  - JNI_VERSION_1_4(0x00010004)

  모든 경우에 작성된 JVM은 라이브러리(즉, 1.2.2, 1.3.x, 1.4.x)에 의해 지정된 것이며, JNI 인터페이스에 포함되지 않은 것입니다. 인터페이스 API는 JVM에 의해 구현된 언어 스펙, 클래스 라이브러리 API 또는 JVM 작동의 모든 다른 영역에 영향을 주지 않습니다. 인터페이스 API는 원시 코드가 필요한 작동을 호출할 수 있는 방법만 지정합니다.

- 대만어 사용자에 한해, 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 패키지를 설치할 수 있게 합니다.
- SDK 버전 1.4.2의 경우, SLES 8이 설치된 SMP(Symmetric Multiprocessor) 시스템에서 실행되는 응용프로그램은 Java 모니터를 구현하는 변경된 IBM JVM에서 더 우수한 성능을 발휘합니다. 대부분의 응용프로그램에 장점이 있거나 성능의 차이가 없기 때문에 기본값으로 새 알고리즘이 설정됩니다. 새 기본값을 설정하여 JVM의 성능이 저하되는 경우에는 다음 환경 변수를 설정하여 기존 알고리즘을 복원할 수도 있습니다. `export IBM_JVM_MONITOR_OLD=<any value>`.

  자세한 정보는 v1.4.2 진단 안내서를 참조하십시오.

- 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"로 설정하십시오. | | |
  주:
  |
  RedHat의 일부 배포판(Redhat9 및 RHEL3 포함)은 UTF-8 인코딩을 기본값으로 사용합니다.
  |
  |
- |AMI 및 xcin을 교차 플랫폼 환경에서 사용하는 경우(예를 들어, 32비트 시스템과 64비트 시스템 간이나 |빅 엔디안 시스템과 리틀 엔디안 시스템 간에 디스플레이를 내보내려는 경우) 문제점이 발생할 수 |있습니다. 이러한 경우에는 Linux 배포자에게 문의하십시오. |
  |
- |Redhat Enterprise Linux 3.0의 경우, |AWT 텍스트 구성요소에서 중국어 문자가 표시되지 않을 수 있습니다(중국어 GB18030 로케일의 |GB2312 문자는 제외). |
  |

## Linux IA 32비트 제한사항

- Java Plug-in은 SDK의 이 릴리스에서 인쇄를 지원하지 않습니다.
- 한국어용 SLES 8에서 한국어 문자가 표시되지 않을 수 있습니다. 이를 해결하려면 다음과 같이 "baekmuk-ttf" rpm 패키지를 설치하여 `SUSEconfig`를 실행하십시오.

        # touch /usr/X11R6/lib/X11/fonts/truetype/fonts.scale.baekmuk
        # SUSEconfig

- 아랍어 텍스트 사용자의 경우, Linux를 Matrox video card 및 acceleration과 함께 사용하면서 drawString을 사용하여 큰 글꼴을 표시하면 문자가 왜곡되어 나타날 수 있습니다. 이는 해당 카드의 드라이버로 인해 발생합니다. 해당 문제점을 해결하려면 장치에서 acceleration을 사용 불가능하게 하십시오.

## Linux PPC 32비트 및 64비트 제한사항

- Java 코드에서 JNI 호출을 사용하는데, 특정 호출에 9개 이상의 float 또는 double 매개변수가 있을 경우, C 코드는 gcc-2.95.3 FSF(Free Software Foundation) 레벨의 GCC(GNU C Compiler)를 사용하여 컴파일해야 합니다.
- XFree86 버전 3.x를 실행 중이면, SIGSEGV 오류가 발생할 수도 있습니다. 이러한 문제점이 발생하지 않도록 하려면, XFree86 버전 4.x를 사용하는 것이 좋습니다.
- 날짜를 1970년 이전 날짜로 설정하면, Java를 시작할 때 예외 오류가 발생합니다. 이 문제점을 해결하려면 수동으로 시스템을 현재 날짜로 설정해야 합니다.

## Linux PPC 32비트 제한사항

- PowerPC용 SLES 8.0 설치 CD에는 중국어를 적절하게 표시하는 Java용 트루타입 중국어 글꼴이 들어 있지 않습니다. 중국어 글꼴 표시를 개선하려면 United Linux 1.0의 ttf-hanyi-20021016-0.noarch.rpm 패키지를 설치하십시오.

## Linux zSeries 64비트 제한사항

다음 제한사항은 Linux zSeries 64비트의 중국어, 대만어 및 한국어 사용자에게 적용됩니다.

- 버전 1.4.2의 경우 중국어 및 대만어 입력 메소드 서버(xcin)는 테스트하지 않았습니다.
- 중국어 사용자의 경우에 한해, 일부 중국어 문자가 표시되지 않을 수 있습니다. 이를 방지하려면 zSeries 64비트 시스템의 SLES8에 다음 트루타입 글꼴을 다운로드하십시오.
  - ttf-hanyi-20021016-0
  해당 글꼴은 SUSE 웹 사이트 http://www.suse.com/index_us.html에 나와 있습니다.
- 대만어 사용자의 경우에 한해, 일부 중국어 문자가 표시되지 않을 수 있습니다. 이러한 문제점을 방지하려면, SLES8에 다음 트루타입 글꼴을 다운로드하십시오. 이는 그래픽 클리이언트로 작동합니다.
  - ttf-arphic-bkai00mp-20001125-103
  - ttf-arphic-gbsn00lp-20001125-103
  - ttf-arphic-gkai00mp-20001125-103
  - ttf-arphic-bsmi00lp-20001125-103
  - ttf-arphic-20001125-323
  해당 글꼴은 SUSE 웹 사이트 http://www.suse.com/index_us.html에 나와 있습니다.

## Linux zSeries 32비트 및 64비트 제한사항

- 사운드 카드 없이 시스템에서 오디오를 사용하는 경우, Java에서 사운드 재생 시 메모리가 부족하다는 오류 메시지를 수신할 수 있습니다. 오류 메시지가 콘솔에 표시되지만, Java 응용프로그램에는 영향을 미치지 않습니다.
- 현재 분배의 Linux 커널이 인터넷 프로토콜 버전 6(IP6)의 지원을 제공하지만, 사용 시 문제점이 발생할 수 있습니다. Java에서 IP6의 지원이 이 릴리스에 포함되지만, Java 명령에서 -Djava.net.preferIPv4Stack=true 옵션에 대한 지원을 설정 해제하는 것이 좋습니다. 완전히 IP6를 지원하는 커널을 설치하려는 경우, 이 옵션이 필요하지 않습니다.

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

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

- 전자 우편: 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
  서울특별시 강남구 도곡동 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의 상표입니다.

IBM, iSeries, pSeries 및 zSeries는 미국 또는 기타 국가에서 사용되는 IBM Corporation의 상표 또는 등록상표입니다.

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

Intel, Intel Inside(로고), MMX 및 Pentium은 미국 또는 기타 국가에서 사용되는 Intel Corporation의 상표입니다.

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

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