# IBM 31-bit Runtime Environment for Linux on zSeries, Java 2 Technology Edition, Version 1.4.1; 사용자 안내서

# 저작권 정보

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

이 사용자 안내서 개정판은 새 개정판에 별도로 명시하지 않는 한, IBM 31-bit Runtime Environment for Linux on zSeries, Java 2 Technology Edition, Version 1.4.1 및 모든 후속 릴리스와 수정사항에 적용됩니다.

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

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

# 머리말

IBM(R) 31-bit Runtime Environment for Linux on zSeries(R), Java(TM) 2 Technology Edition, Version 1.4.1에는 Java Virtual Machine(JVM), Sun Microsystems의 핵심 Java 클래스 및 지원 파일이 들어 있습니다. Runtime Environment에는 SDK 패키지에 들어 있는 모든 클래스가 들어 있지는 않습니다.

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

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.0"에서 "1.4.1"로 갱신하는 것과 같이 사소하거나 명확한 변경을 제외하고는 1.4.1 사용자 안내서에 대한 기술적 변경은 HTML 또는 컬러 인쇄 사본으로 볼 때 빨간색으로 표시되고 변경사항 왼쪽에 수직 막대로 표시됩니다.

# 목차

저작권 정보

머리말

개요

- 버전 호환성
- Runtime Environment for Linux에 포함된 파일
- 라이센스 계약
- JIT 컴파일러
- NMI 및 JNI

  Runtime Environment for Linux 구성

  Runtime Environment for Linux 설치 제거

- 설치 가능한 RPM 패키지 설치 제거
- 압축된 TAR 패키지 설치 제거

  Java 응용프로그램 실행

- 명령 요약
- 옵션
- 표준 옵션
- 비표준 옵션
- java 명령의 글로벌화
- Classpath에 대한 작업
- |JVM의 신호 처리 방법
- |JVM에서 사용되는 신호
- |원시 코드 드라이버를 신호 체인 라이브러리로 링크
- bootclasspath에 대한 작업
- 가비지 콜렉션 정책 지정
- 일시정지 시간
- 일시정지 시간 감소
- 힙이 가득 찬 상태의 환경
- 가비지 콜렉션에 관한 추가 정보

  IBM 빌드 및 버전 번호 찾기

  floating 스택에 대한 작업

  DBCS 언어에서 입력 방법 전환

  런타임 예제

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

  알려진 제한사항

  주의사항

- 상표

  # 개요

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

  ## 버전 호환성

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

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

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

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

  ## 라이센스 계약

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

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

  ## JIT 컴파일러

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

  Runtime Environment for Linux에는 기본적으로 사용할 수 있는 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)

  ## NMI 및 JNI

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

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

  # Runtime Environment for Linux 구성

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

  /opt/IBMJava2-s390-141/jre/bin

  Runtime Environment for Linux를 /opt/IBMJava2-s390-141/ 이외의 디렉토리에 설치한 경우, /opt/IBMJava2-s390-141/를 Runtime Environment for Linux를 설치한 디렉토리로 대체하십시오.

  # Runtime Environment for Linux 설치 제거

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

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

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

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

             rpm -e IBMJava2-JRE-1.4.1

     또는 kpackage나 yast2와 같은 그래픽 툴을 사용할 수 있습니다.

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

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

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

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

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

  # 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 머리글로 표시됩니다.

  ## 옵션

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

  ### 표준 옵션

    -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에 대한 작업을 참조하십시오. |core.jar, graphics.jar, server.jar, security.jar, xml.jar, tools.jar 또는 |charsets.jar에 있는 클래스를 대체하는데 이 옵션을 사용하는 응용프로그램을 |전개하는 것은 Java 2 Runtime Environment 바이너리 코드 라이센스를 |위반하기 때문에 전개해서는 안됩니다.

    -Xbootclasspath/a:<디렉토리 및 ;로 구분되는 zip 또는 jar 파일>

      부트스트랩 클래스 경로의 끝에 추가합니다.

    |-Xbootclasspath/p:<디렉토리 |및 ;로 구분되는 zip 또는 jar 파일> |

      |부트스트랩 클래스 경로의 앞 부분에 추가합니다. core.jar, graphics.jar, |server.jar, security.jar, xml.jar, tools.jar 또는 charsets.jar에 있는 클래스를 |대체하기 위해 이 옵션을 사용하는 응용프로그램을 전개하는 것은 |Java 2 Runtime Environment 바이너리 코드 라이센스를 위반하기 때문에 전개하면 안됩니다. |

    -Xcheck:jni

      JNI 기능의 추가 점검을 수행합니다.

    -Xcheck:nabounds

      JNI 배열 조작의 추가 점검을 수행합니다.

    -Xdebug

      디버거를 사용 가능하게 하여 JVM을 시작합니다.

    |-Xdisableexplicitgc |

      |System.gc()에 대한 호출을 no-ops로 변경합니다. |

    -Xdisablejavadump

      비정상적으로 프로세스를 종료할 경우, java 덤프 기능을 사용할 수 없습니다. Java 덤프를 사용할 수 없을 경우 시스템 프로세스 종료 덤프가 실행됩니다. Java 코드 내에서 문제가 발생하는 경우 java 덤프가 유용합니다. 시스템 구성요소에 문제가 있는 경우에는 정상적인 시스템 덤프를 실행하는 것이 더 유용합니다.

    |-Xgcpolicy:{optthruput | optavgpause} |

      |가비지 콜렉션 설정을 지정합니다. 기본 설정은 optthruput입니다. 자세한 정보는 가비지 콜렉션 정책 지정을 |참조하십시오. |

    -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 c:\myapp\thisapp.class` 명령은 `java -classpath c:\myapp thisapp`를 지정하는 것과 동일합니다.

  ## |JVM의 신호 처리 방법

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

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

  - |조건 및 복구를 처리합니다(예외가 응용프로그램 코드에 의해 발생된 경우). 또는
  - |다음과 같이 제어된 시스템 종료 순서로 들어갑니다.
    1. |해당 신호에 대한 응용프로그램의 신호 핸들러 호출
    2. |실패 지점의 JVM 상태를 설명하기 위한 Java 코어 덤프 출력
    3. |모든 응용프로그램 설치 중단 후크 호출
    4. |정리된 시스템 종료를 제공하는 데 필요한 정리 수행 |
    |

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

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

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

  |JVM에서 사용되는 기타 신호는 내부 제어용이며 JVM을 종료시키지 않습니다. 관련된 제어 신호는 |단지 SIGQUIT이며, Java 코어 덤프를 |생성하게 됩니다.

  ### |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은 Java 코어 덤프를 가져오기 위해 이 신호를 사용합니다. | 예
  SIGTRAP | 제어 | dbx 또는 ptrace에서 사용하기 위한 내부 제어. 내부 제어 목적으로 일부 JVM에서 사용됩니다. | 예
  SIGPIPE | 제어 | 읽고 있지 않는 파이프에 쓰기. JVM은 이 신호를 무시합니다. | 아니오

  |JVM이 대부분의 신호를 사용하지 못하게 하려면 -Xrs(신호 사용 감축) |옵션을 사용하십시오. 자세한 정보는 |http://java.sun.com/j2se/1.4.1/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 서비스를 더 이상 필요로 하지 |않는 한, 복구하려는 시도를 하지 말아야 합니다.

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

  |IBM 31-bit Runtime Environment for Linux on zSeries, Java 2 Technology Edition, Version 1.4.1 JVM에는 새 신호 체인 기능이 포함되어 있습니다. 신호 체인 기능으로 JVM은 |자체 신호 핸들러를 설치하는 원시 코드와 보다 효율적으로 공동 조작할 수 |있습니다.

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

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

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

        |gcc -L <directory of libjvm.so> -ljsig -ljvm java_application.c

    |또는

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

        |export LD_PRELOAD=<libjsig.so dir>/libjsig.so; java_application (ksh)
        |
        |setenv LD_PRELOAD <libjsig.so dir>/libjsig.so; java_application (csh)

    |

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

  - |SA_NOCLDSTOP - 항상 설정 해제
  - |SA_NOCLDWAIT - 항상 설정 해제
  - |SA_RESTART - 항상 설정
  - |SA_ONSTACK - 항상 설정(SIGSEGV만) |

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

  ## bootclasspath에 대한 작업

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

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

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

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

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

  > -Xgcpolicy:optthruput

  및

  > -Xgcpolicy:optavgpause

  ### 일시정지 시간

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

  ### 일시정지 시간 감소

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

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

  Java 힙이 거의 가득 차게 되고 재생될 수 있는 가비지가 거의 없는 경우, 즉시 사용 가능한 공간이 없으므로 새 오브젝트에 대한 요청이 신속히 충족되지 않을 수 있습니다. 힙이 거의 가득 찬 용량으로 조작될 경우 위의 옵션 중에서 어느 옵션이 사용되는지에 관계없이 응용프로그램 성능이 저하될 수 있습니다. 또한 더 많은 힙 공간 요청이 계속 작성되면 응용프로그램에 OutofMemory 예외가 발생하게 되며, 이 예외를 찾아 처리하지 못하면 JVM이 종료될 수 있습니다. 이러한 조건에서는 -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/

  |Java 응용프로그램의 메모리 누수 처리에 관한 정보는 |http://www.ibm.com/developerworks/library/j-leaks/index.html을 |참조하십시오.

  # 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의 입력 방법 프레임워크 스펙을 참조하십시오.

  # 런타임 예제

  Sun 웹 사이트 http://java.sun.com에는 다운로드할 수 있는 "Hello World" 예제가 들어 있습니다. 이 예제에서는 Runtime Environment에서 실행되는 간단한 Java 응용프로그램을 작성하는 방법에 대해 보여줍니다.

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

  제품을 개발하고 운송할 준비가 되면, 제품을 사용자 시스템에 설치하고 사용자 소프트웨어를 지원하도록 사용자 시스템과 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 사본을 가지고 있습니다.

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

  # 알려진 제한사항

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

  - |여러 개의 멀티 스레드로 실행 중인 경우, |`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 패키지를 설치할 수 있게 합니다.

  - 사운드 카드 없이 시스템에서 오디오를 사용하려는 경우, Java에서 소리를 재생하려고 시도할 때 메모리 부족을 알리는 오류 메시지가 발행될 수 있습니다. 오류 메시지가 콘솔에 표시되지만, Java 응용프로그램에는 영향을 미치지 않습니다.

  - 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(변경사항이 있으면 Linux 커널을 다시 컴파일해야 함)

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

  - Ctrl-C를 사용하여 Java 응용프로그램을 종료한 경우, 여러 프로세스가 고립된(orphaned) 상태로 남게 될 수 있습니다.

  - 인터페이스에서 실행할 때 javap 프로그램은 결과에 문자열 "interface"를 중복합니다. 예를 들어, "java.lang.Runnable"에서 javap를 실행하면 다음과 같습니다.

        public interface interface java.lang.Runnable extends java.lang.Object...

  - 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)를 생성하도록 최적화되었습니다.

  - |V1.4.0으로부터 대부분의 새 입출력(NIO) 제한사항이 제거되었습니다. 다음 |제한사항은 아직 남아 있습니다.
    |

    |표 2. 새 입출력 제한사항

    Sun 버그 번호 | 제한사항의 간단한 설명
    --- | ---
    4696508 | 선택자가 지정된 대로 동기화되지 않음

    |

  - 원시 프로그램은 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는 |원시 코드가 필요한 작동을 호출할 수 있는 방법만 지정합니다.

  - 현재 분배의 Linux 커널이 인터넷 프로토콜 버전 6(IP6)의 지원을 제공하지만, 사용 시 문제점이 발생할 수 있습니다. Java에서 IP6의 지원이 이 릴리스에 포함되지만, Java 명령에서 -Djava.net.preferIPv4Stack=true 옵션에 대한 지원을 설정 해제하는 것이 좋습니다. 완전히 IP6를 지원하는 커널을 설치하려는 경우, 이 옵션이 필요하지 않습니다.

  다음 제한사항은 대만어 사용자에게만 적용됩니다.

  - TCH 문자를 입력하기 위해 LinYi ZhuYin, YiTian ZhuYin 및 Bosham IME를 사용할 때 Enter, Space, Backspace 및 ESC 기능 키가 예상대로 작동하지 않습니다. Enter 키는 새 행을 삽입하고 ESC 키는 사전 편집 문자열이나 후보 창을 취소하는 데 사용되며 Space bar는 공간을 삽입합니다. 커미트 키를 누른 후에는 후보 창이 사라져야 하며 LinYi ZhuYin, YiTian ZhuYin 및 Bosham IME를 사용하여 대만어 문자를 입력하는 동안에는 Backspace 키를 누를 경우 후보 창이 표시되지 않아야 합니다.

  # 주의사항

  이 정보는 미국에서 제공되는 제품 및 서비스용으로 작성된 것입니다. 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, Japan

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

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

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

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

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

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

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

  이러한 정보는 해당 조항 및 조건에 따라(예를 들면, 사용료 지불 포함) 사용할 수 있습니다.

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

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

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

  ## 상표

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

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

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

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