# IBM Runtime Environment para Plataformas Linux, Java 2 Technology Edition, Version 1.4.2

# Guia do Usuário

# Informações de Copyright

Nota: Antes de utilizar estas informações e o produto que elas suportam, certifique-se de ler as informações gerais em Avisos.

A edição deste Guia do Usuário se aplica a essas plataformas a medida que tornam-se disponíveis:

- IBM 32-bit Runtime Environment para Linux na Arquitetura Intel(TM), Java 2 Technology Edition, Version 1.4.2
- IBM 64-bit Runtime Environment para Linux na Arquitetura Intel, Java 2 Technology Edition, Version 1.4.2
- IBM 32-bit Runtime Environment para Linux em iSeries(TM) e pSeries(R), Java 2 Technology Edition, Version 1.4.2
- IBM 64-bit Runtime Environment para Linux em iSeries e pSeries, Java 2 Technology Edition, Version 1.4.2
- IBM 31-bit Runtime Environment para Linux em zSeries(R), Java 2 Technology Edition, Version 1.4.2
- IBM 64-bit Runtime Environment para Linux em zSeries, Java 2 Technology Edition, Version 1.4.2

e para todos os releases e modificações subseqüentes, até que seja indicado de outra maneira em novas edições.

(c) Copyright Sun Microsystems, Inc. 1997, 2003, 901 San Antonio Rd., Palo Alto, CA 94303 USA. Todos os direitos reservados.

(c) Copyright International Business Machines Corporation, 1999, 2004. Todos os direitos reservados.

Direitos Restritos para Usuários do Governo dos Estados Unidos - Uso, duplicação e divulgação restritos pelo documento GSA ADP Schedule Contract com a IBM Corporation.

# Prefácio

Este Guia do Usuário descreve o IBM(R) Runtime Environment para todas as plataformas Linux. As informações específicas da plataforma estão claramente marcadas como tal. Assegure-se de estar lendo o material relativo à sua plataforma. De modo particular, o Web Start e o Plug-in são específicos para o 32-bit SDK para Linux na Arquitetura Intel.

O IBM Runtime Environment contém a JVM (Java Virtual Machine), as principais classes Java da Sun Microsystems e arquivos de suporte. O Runtime Environment não contém todas as classes encontradas no pacote SDK.

O Guia do Usuário oferece informações gerais sobre o Runtime Environment e informações específicas sobre as diferenças na implementação da IBM do Runtime Environment em comparação com a implementação da Sun. Leia este Guia do Usuário juntamente com a documentação mais extensa encontrada no Web site da Sun: http://java.sun.com.

O Manual de Diagnóstico IBM JVM fornece informações mais detalhadas sobre o IBM JVM.

Para obter a lista de distribuições com a qual o SDK para Linux foi testado, visite o endereço: http://www-106.ibm.com/developerworks/java/jdk/linux/tested.html

Observe que o Runtime Environment para Linux é um subconjunto do SDK e permite que você execute apenas aplicativos Java. Se você instalou o SDK, o Runtime Environment está incluído.

Os termos "Runtime Environment" e "Java Virtual Machine" são utilizados alternadamente neste Guia do Usuário.

As alterações técnicas para este Guia do Usuário Versão 1.4.2, com exceção de alterações menores ou evidentes, como a atualização de "1.4.1" para "1.4.2", estão indicadas em vermelho ao visualizar o HTML ou uma cópia impressa colorida e por barras verticais à esquerda das alterações.

# Índice

Informações de Copyright
Prefácio
Visão Geral
| |
Convenções
Compatibilidade entre Versões
| |
Informações para Usuários do Linux PPC64
Arquivos Incluídos com o Runtime Environment para Linux
Contrato de Licença
O Compilador JIT (Just-In-Time)
Java Native Interface e Native Method Interface
| |
Instalando no RHEL (Red Hat Enterprise Linux) 3
Configurando o Runtime Environment para Linux
Desinstalando o Runtime Environment para Linux
Desinstalando o Pacote RPM (Red Hat Package Manager) Instalável
Desinstalando o Pacote TAR (Tape Archive) Compactado
| |
Ponte JDBC/ODBC Restabelecida
Ativando um Aplicativo Java
Resumo de Comandos
Opções
Opções Padrão
Opções Não-padrão
Globalização do Comando Java
Trabalhando com Classpaths
| |
Configurando a Alocação da Memória de Página Grande
Trabalhando com bootclasspath
Especificando a Política de Coleta de Lixo
Tempo de Pausa
Redução do Tempo de Pausa
Ambiente com Heaps Muito Cheios
Informações Adicionais sobre Coleta de Lixo
Como a JVM Processa Sinais
Sinais Utilizados pela JVM
Vinculando um Driver de Código Nativo à Biblioteca de Cadeia de Sinais
| |
Implementando o Conjunto da Rotina de Tratamento de Conexão para RMI
Obtendo o Número de Compilação e Versão IBM
(Apenas Linux IA 32-bit) Utilizando o Java Plug-in
Instalando e Configurando o Java Plug-in para Netscape 6 e Mozilla
Instalando e Configurando o Java Plug-in para Netscape 4
Utilizando o Java Plug-in com Navegadores gcc3.2.x Mozilla Compilados
Utilizando Parâmetros DBCS
(Apenas Linux IA 32-bit) Utilizando o Web Start
Instalando o Web Start
Trabalhando com Pilhas Flutuantes
Alternando o Método de Entrada em Idiomas DBCS
Instalando o Aplicativo em um Sistema de Usuário
Limitações Conhecidas
As limitações que se aplicam a todas as plataformas Linux, exceto onde indicado
Limitações do Linux IA 32-bit
Limitações do Linux PPC 32-bit e 64-bit
Limitações do Linux PPC 32-bit
Limitações do Linux zSeries 64-bit
Limitações do Linux zSeries 32-bit e 64-bit
Algum Comentário sobre este Guia do Usuário?
Avisos
Marcas Comerciais

# Visão Geral

O Runtime Environment para Linux contém o subconjunto das classes exigidas para criar um Java Runtime Environment e executar programas Java. Ele também contém a JVM (Java Virtual Machine), classes Java e arquivos de suporte. O Runtime Environment para Linux contém apenas um subconjunto das classes encontradas no SDK.

| | |

## Convenções

|

Em todo este Guia do Usuário o diretório de instalação padrão do SDK |se refere ao /opt/IBMJava2-142/. As plataformas listadas abaixo possuem os seguintes |diretórios de instalação padrão; utilize o diretório apropriado |à sua plataforma ao consultar o /opt/IBMJava2-142/:

|

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

## Compatibilidade entre Versões

Em geral, qualquer applet ou aplicativo executado na Versão 1.1.8, 1.2.2 ou 1.3.1 do SDK para Linux deverá ser executado corretamente nesta versão. Os applets que dependem dos APIs Java 1.4.2 da Sun funcionam somente em navegadores que suportam APIs Java 1.4.2.

Não há garantia de que as classes compiladas 1.4.2 funcionem nos releases do Runtime Environment anteriores à versão 1.4.0.

| | |

### Informações para Usuários do Linux PPC64

|

O Runtime Environment v1.4.2 não é suportado no SLES 8. Se você |quiser executar o SDK no SLES 8, utilize o SDK v1.4.1 SR1.

## Arquivos Incluídos com o Runtime Environment para Linux

O Runtime Environment para Linux inclui arquivos .so não depuráveis e os arquivos de classe necessários para suportar um programa no tempo de execução. O produto Runtime Environment para Linux não inclui nenhuma das ferramentas de desenvolvimento, como appletviewer ou javac, nem classes que pertençam apenas a um sistema de desenvolvimento.

Além disso, o pacote de API (Aplication Programming Interface) do Java Communications é fornecido para uso com o Runtime Environment para Linux. (Exceto no Linux IA 64-bit e Linux zSeries 31-bit e 64-bit).

## Contrato de Licença

O arquivo LICENSE_xx.html contém o contrato de licença para o software Runtime Environment para Linux. (xx é a abreviação do idioma.)

Para exibir ou imprimir o contrato de licença, abra o arquivo em um navegador da Web.

## O Compilador JIT (Just-In-Time)

O compilador JIT (Just-In-Time) (libjitc.so) gera dinamicamente o código de máquina para as seqüências de bytecode freqüentemente utilizadas nos aplicativos e applets do Java enquanto são executados.

O Runtime Environment para Linux inclui o JIT (libjitc.so), que é ativado por padrão. É possível desativar o JIT para ajudar no isolamento de um problema com um aplicativo Java, um applet ou o próprio compilador.

Para desativar o JIT, em um shell da janela em que irá executar o aplicativo, digite:

    export JAVA_COMPILER=NONE

Para ativar o JIT, em um prompt do shell, digite:

        export JAVA_COMPILER=jitc

Para verificar se o JIT está ativado ou não, em um prompt do shell, digite:

        java -version

Se o JIT estiver sendo utilizado, será exibida uma mensagem que inclui:

    (JIT enabled: jitc)

Se o JIT não estiver sendo utilizado, será exibida uma mensagem que inclui:

    (JIT disabled)

## Java Native Interface e Native Method Interface

A JNI (Java Native Interface) está incluída no Runtime Environment. Para obter informações sobre o uso da JNI, consulte o Web site da Sun: http://java.sun.com.

A IBM não suporta a Native Method Interface neste release. Não use esta interface em seus aplicativos.

| | |

# Instalando no RHEL (Red Hat Enterprise Linux) 3

|

O Runtime Environment depende da biblioteca compartilhada /usr/lib/libstdc++-libc6.2-2.so.3. |Essa biblioteca não vem instalada por padrão para o RHEL (Red Hat Enterprise Linux) |3.0.

|

O rpm que contém essa biblioteca é `compat-libstdc++-7.3-2.96.122.i386.rpm`. Para instalar a biblioteca, em um tipo de prompt do shell:

|

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

|

Para incluir a biblioteca durante a instalação do RHEL 3:

|

|
1. Ao alcançar a tela Package Defaults, selecione |a opção Customize the Set of packages to be installed.
|
2. Na tela Package Group Selection, nas opções Development, selecione Legacy Software |Development.

# Configurando o Runtime Environment para Linux

Depois de instalar o Runtime Environment para Linux, edite o script de login do shell e adicione este diretório à instrução PATH:

/opt/IBMJava2-142/jre/bin

Se você instalou o Runtime Environment para Linux em um diretório diferente, substitua /opt/IBMJava2-142/ pelo diretório no qual foi instalado o Runtime Environment.

Nota:
(Apenas para Usuários Chineses do Linux IA 32-bit) Por motivo de inconsistências nos códigos fonte no RedHat Advanced Server, ao fazer a instalação em um ambiente no qual você deseja que o chinês seja o idioma padrão, é melhor efetuar a instalação com o idioma padrão sendo o inglês e depois alterar para chinês, quando a instalação for concluída. Caso contrário, as fontes em chinês podem não ser exibidas.

# Desinstalando o Runtime Environment para Linux

A maneira que você remove o Runtime Environment depende do fato de você ter instalado o pacote RPM (Red Hat Package Manager) ou o pacote TAR (Tape Archive) compactado. Veja instruções nos tópicos Desinstalando o Pacote RPM (Red Hat Package Manager) Instalável ou Desinstalando o Pacote TAR (Tape Archive) Compactado.

## Desinstalando o Pacote RPM (Red Hat Package Manager) Instalável

Para desinstalar o Runtime Environment para Linux se tiver instalado o pacote RPM instalável:

1. Em um script do shell, digite:

   -         rpm -e IBMJava2-JRE-1.4.2

   - Para Linux PPC 32-bit:

         rpm -e IBMJava2-JRE-ppc-1.4.2

   - Para Linux PPC 64-bit:

         rpm -e IBMJava2-JRE-ppc64-1.4.2

   Como alternativa, você pode utilizar uma ferramenta gráfica como kpackage ou yast2.
2. Remova da instrução PATH o diretório no qual você instalou o Runtime Environment.
3. (Apenas Linux IA 32-bit) Se você instalou o Java Plug-in, remova os arquivos do Java Plug-in do diretório do navegador da Web.

## Desinstalando o Pacote TAR (Tape Archive) Compactado

Para desinstalar o Runtime Environment para Linux, caso tenha instalado o pacote TAR compactado:

1. Remova os arquivos do Runtime Environment do diretório no qual você instalou o Runtime Environment.
2. Remova da instrução PATH o diretório no qual você instalou o Runtime Environment.
3. (Apenas Linux IA 32-bit) Se você instalou o Java Plug-in, remova os arquivos do Java Plug-in do diretório do navegador da Web.

| | |

# Ponte JDBC/ODBC Restabelecida

|

A ponte JDBC/ODBC, que foi removida do IBM SDK, v1.4.0, |foi restabelecida para a v1.4.2.

# Ativando um Aplicativo Java

A ferramenta java ativa um aplicativo Java.

A JVM pesquisa a classe de inicialização e as outras classes utilizadas nos três conjuntos de localizações: o classpath bootstrap, as extensões instaladas e o classpath do usuário. Os argumentos após o nome da classe ou nome do arquivo JAR são transmitidos para a função principal.

O comando javaw é idêntico ao java, exceto que o javaw não possui janela de console associada. Utilize javaw quando não desejar que uma janela de prompt de comandos seja exibida. O ativador javaw exibirá uma caixa de diálogo com informações sobre erros se houver falha na ativação.

## Resumo de Comandos

Os comandos java e javaw utilizam a seguinte sintaxe:

    java [ opções ] class [ argumentos ... ]
    java [ opções ] -jar file.jar [ argumentos ... ]
    javaw [ opções ] class [ argumentos ... ]
    javaw [ opções ] -jar file.jar [ argumentos ... ]

Os itens entre colchetes são opcionais.

opções
  Opções de linha de comandos.
class
  Nome da classe a ser chamada.
file.jar
  Nome do arquivo jar a ser chamado. Ele é utilizado apenas com -jar.
argumento
  Argumento aprovado para função main.

Se a opção -jar for especificada, o arquivo JAR nomeado irá conter arquivos de classe e recurso para os aplicativos com a classe de inicialização indicada pelo cabeçalho do manifesto Main-Class.

## Opções

O ativador possui um conjunto de opções padrão suportadas no ambiente de tempo de execução atual e que serão suportadas em releases futuros. Além disso, há um conjunto de opções fora do padrão.

### Opções Padrão

- -D<property_name>=<valor>
  - Define uma propriedade do sistema.
- -assert
  - Imprime ajuda para opções relacionadas à declaração.
- -cp ou -classpath <diretórios e arquivos zip ou jar separados por :>
  - Define o caminho de pesquisa para classes de aplicativo ou recursos. Se as opções -classpath e -cp não forem utilizadas e CLASSPATH não estiver definido, o usuário classpath será, por padrão, o diretório atual (.). Consulte também Trabalhando com Classpaths.
- -help ou -?
  - Exibe uma mensagem de utilização.
- -showversion
  - Imprime a versão do produto e continua.
- -verbose:[class | gc | jni]
  - Permite saída interativa.
- -version
  - Exibe a versão do produto.
- -X
  - Exibe a ajuda para opções que não são padrão.

### Opções Não-padrão

As opções -X listadas abaixo são um subconjunto das opções disponíveis. Elas não fazem parte do padrão e estão sujeitas à alteração sem aviso prévio.

- -Xargencoding
  - Permite que as opções no comando java utilizem seqüências de escape Unicode para representar caracteres que não estejam no conjunto de caracteres da localidade. Seqüências de escape Unicode estão no formato \u####, em que # é um dígito hexadecimal.
- -Xbootclasspath:<diretórios e arquivos zip ou jar separados por ;>
  - Define o caminho de pesquisa para classes e recursos bootstrap. Existem outras maneiras de definir bootclasspath. Consulte Trabalhando com bootclasspath.
- -Xbootclasspath/a:<diretórios e arquivos zip ou jar separados por ;>
  - Anexa ao final do caminho da classe bootstrap.
- -Xbootclasspath/p:<diretórios e arquivos zip ou jar separados por ;>
  - Coloca na frente do caminho de classe de bootstrap. Consulte Trabalhando com bootclasspath.
- -Xcheck:jni
  - Executa verificações adicionais das funções JNI.
- -Xcheck:nabounds
  - Executa verificações adicionais das operações de array JNI.
- -Xdebug
  - Inicia a JVM com o depurador ativado.
- -Xdisableexplicitgc
  - Altera as chamadas para System.gc() no no-ops.
- -Xdisablejavadump
  - Desativa o recursos de dump Java para encerramento anormal de processos. Quando o dump java estiver desativado, o dump de encerramento do processo do sistema será executado. O dump java é útil quando o problema ocorrer dentro do código java. Se o problema estiver nos componentes do sistema, é possível que seja mais útil obter o dump de sistema normal.
- -Xgcpolicy:{optthruput | optavgpause }
  - Especifica a definição de coleta de lixo. A definição padrão é optthruput. Para obter mais informações, consulte Especificando a Política de Coleta de Lixo.
- |-Xlp |
  |
  - Solicita que o JVM aloque o heap Java (o heap a partir do qual os objetos Java são |alocados) com páginas grandes, cujo tamanho está em megabytes. Se não houver |páginas grandes disponíveis, o heap Java será alocado com as páginas padrão |do Linux, que normalmente são de 4 KB. O JVM utiliza o shmget() para alocar as páginas |grandes para o heap. As páginas grandes são suportadas pelos sistemas que executam os kernels do Linux |V2.6 ou superior.
- -Xms<tamanho>
  - Define o tamanho do heap Java inicial.
- -Xmx<tamanho>
  - Define o tamanho máximo do heap Java.
- -Xnoclassgc
  - Desativa coleta de lixo da classe.
- -Xoss<tamanho>
  - Define o tamanho máximo de pilha Java para qualquer encadeamento.
- -Xquickstart
  - Aprimora o tempo de inicialização dos aplicativos. Se você não especificar essa opção, a compilação inicial dos métodos será feita em alta otimização (isto é, o JIT não recompila métodos "hot" porque os métodos são inicialmente compilados com alta otimização).
- -Xrs
  - Reduz o uso de sinais de sistema operacional.
- -Xrunnome_biblioteca[:opções]
  - Carrega bibliotecas assistentes. Para carregar múltiplas bibliotecas, especifique-a mais de uma vez na linha de comandos. Exemplos dessas bibliotecas são:
    - -Xrunhprof[:help] | [:<opção>=<valor>, ...]
      - Executa o perfil do heap, da CPU ou do monitor.
    - -Xrunjdwp[:help] | [:<opção>=<valor>, ...]
      - Carrega bibliotecas de depuração para suporte da depuração remota de aplicativos.
- -Xss<tamanho>
  - Define o tamanho máximo da pilha nativa para qualquer encadeamento. Para obter informações adicionais, consulte Trabalhando com Pilhas Flutuantes.
- -Xverbosegclog:<caminho para o arquivo><nome do arquivo>[X, Y]
  - Faz com que a saída verboseGC seja gravada no arquivo especificado. Se o arquivo sair, ele será sobrescrito. Caso contrário, se um arquivo existente não puder ser aberto ou um novo arquivo não puder ser criado, a saída será redirecionada para stderr. Se você especificar os argumentos X e Y (ambos são inteiros) a saída verboseGC será redirecionada para o número Y de arquivos, cada um contendo o número X de ciclos gc equivalente à saída verboseGC. Esses arquivos possuem o formato nome de arquivo1, nome de arquivo2 e assim por diante.
    Nota:
    A variável de ambiente IBM_JVM_ST_VERBOSEGC_LOG foi removida.
- -Xverify
  - Permite verificações mais rigorosas, antecipando o padrão futuro.

## Globalização do Comando Java

O comando java e outros comandos do ativador java (como javaw) permitem que um nome de classe seja especificado como qualquer caractere Unicode que esteja no conjunto de caracteres da localidade atual.

Você poderá especificar qualquer caractere Unicode no nome de classe e argumentos utilizando seqüências de escape java. Para fazê-lo, será necessário especificar -Xargencoding. Para especificar um caractere Unicode, utilize seqüências de escape no formato `\u####`, em que # é um dígito hexadecimal (0 a 9, A a F).

Para especificar que o nome de classe e argumentos de comando estejam em codificação UTF8 ou ISO8859_1, utilize -Xargencoding:utf8 e -Xargencoding:latin.

No Runtime Environment, se estiver utilizando uma localidade que não esteja em inglês, os comandos java e javaw fornecerão mensagens de saída traduzidas. Essas mensagens diferem das mensagens da versão 1.3.1 e diferem também com base na localidade na qual o Java está sendo executado. As descrições detalhadas dos erros e outras informações de depuração retornadas pelo java estão em inglês. As informações de depuração retornadas durante a inicialização são mostradas entre colchetes.

## Trabalhando com Classpaths

No Runtime Environment, você poderá especificar um nome de classe como um nome de arquivo completo, incluindo um caminho completo e a extensão .class. Nas versões anteriores do SDK, só era possível especificar a classe relativa ao CLASSPATH e a extensão .class não era permitida. O uso do nome de arquivo completo permite que você ative um aplicativo java pelo desktop ou pelo ativador de arquivos. Se você especificar um arquivo .class com caminho e extensão, o caminho especificado será colocado em CLASSPATH. Por exemplo, o comando `java ~/myapp/thisapp.class` é equivalente a especificar `java -classpath ~/myapp thisapp`.

| | |

## Configurando a Alocação da Memória de Página Grande

|

O uso da página grande é pretendido principalmente para fornecer melhorias de desempenho |para aplicativos que aloquem muita memória e freqüentemente acessem essa memória. |As melhorias de desempenho de página grande são ocasionadas principalmente pelo número reduzido |de falhas no TLB (Translation Lookaside Buffer). Essa melhoria é causada |pelo fato de o TLB mapear uma área de memória virtual maior.

|

Para configurar a alocação de memória de página grande, primeiro certifique-se de que o kernel |que está sendo executado suporta páginas grandes. Verifique se o arquivo /proc/meminfo contém as |seguintes linhas:

|

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

Observe que os valores desses campos são dependentes do sistema. |Se o kernel não suportar páginas grandes, você deve compilar um novo kernel |com suporte de página grande.

|

A quantidade de memória que pode ser alocada para páginas grandes é fornecida pelo |produto do `HugePages_Free * Hugepagesize`. O administrador do sistema |deve configurar o número de páginas grandes no sistema para atender as necessidades |de heap do Java. O administrador do sistema pode configurar o número de páginas |grandes editando o arquivo /proc/sys/vm/nr_hugepages.

|

Às vezes, quando o sistema tem um número adequado de páginas grandes livres disponível, |a chamada para shmget() para a alocação de memória de página grande falha. Essa falha |ocorre porque as páginas imensas não são contíguas. Para evitar essa falha, |o administrador do sistema deve especificar a opção `hugepages=<n>` |no bootup do sistema (em vez de fazê-lo mais tarde por /proc).

|

shmget(), que utiliza shmmax, aloca a memória de página grande. Para modificar o |valor do shmmax, edite o arquivo /proc/sys/kernel/shmmax.

|

Observe que o shmget() só terá êxito se estiver sendo executado pela raiz. Para utilizar as páginas |grandes, você pode executar o Java como raiz ou definir o suid bit do Java executável.

## Trabalhando com bootclasspath

Você pode definir a propriedade do sistema ibm.jvm.bootclasspath utilizando a opção -D descrita em Ativando um Aplicativo Java. O valor dessa propriedade é utilizado como um caminho de pesquisa adicional, que é inserido entre qualquer valor definido por -Xbootclasspath/p: e o classpath bootstrap.O caminho de classe de auto-inicialização é o padrão ou aquele definido por meio da opção -Xbootclasspath:.

Não implemente aplicativos que utilizem a opção -Xbootclasspath: ou -Xbootclasspath/p: para substituir uma classe em em core.jar, graphics.jar, server.jar, security.jar, xml.jar, tools.jar ou charsets.jar, pois tal implementação violaria a licença do código binário do Java 2 Runtime Environment.

## Especificando a Política de Coleta de Lixo

A opção -Xgcpolicy de tempo de execução JVM especifica a política de coleta de lixo.

-Xgcpolicy possui os valores optthruput (o padrão) ou optavgpause. A opção controla o comportamento do coletor de lixo, fazendo trocas entre o throughput do aplicativo e o sistema geral, e faz com que os tempos de pausa sejam causados pela coleta de lixo.

O formato da opção e seus valores são:

> -Xgcpolicy:optthruput

> -Xgcpolicy:optavgpause

### Tempo de Pausa

Quando a tentativa de um aplicativo em criar um objeto não pode ser atendida imediatamente no espaço disponível no heap, o coletor de lixo é responsável pela identificação de objetos não referidos (lixo), por excluí-los e retornar o heap para um estado no qual pedidos de alocação imediatos e subseqüentes possam ser atendidos rapidamente. Tais ciclos de coleta de lixo introduzem pausas inesperadas ocasionais na execução do código do aplicativo. Como os aplicativos aumentam de tamanho e complexidade e os heaps tornam-se correspondentemente maiores, esse tempo de pausa da coleta de lixo tende a aumentar de tamanho e importância. O valor padrão de coleta de lixo, optthruput, fornece um rendimento alto para aplicativos, mas com o custo das pausas ocasionais, que podem variar de alguns milissegundos até vários segundos, dependendo do tamanho do heap e quantidade de lixo.

### Redução do Tempo de Pausa

A opção optavgpause reduz substancialmente o tempo gasto nessas pausas de coleta de lixo, além de limitar o efeito do aumento do tamanho do heap na duração da pausa da coleta de lixo. Essa opção é especialmente importante para as configurações que possuem heaps grandes. Os tempos de pausa são reduzidos pela execução de algumas atividades de coleta de lixo que ocorrem em conjunto com a execução normal do programa. Com o tempo de pausa reduzido, você poderá perceber uma redução do throughput do aplicativo, que varia de aplicativo para aplicativo.

### Ambiente com Heaps Muito Cheios

Se o heap Java estiver quase cheio, e houver pouco lixo para ser recuperado, os pedidos de novos objetos poderão não ser atendidos rapidamente por não haver espaço disponível de imediato. Se o heap for operado com capacidade quase cheia, o desempenho do aplicativo poderá ser afetado, independentemente de quais opções anteriores forem utilizadas; e, se os pedidos de mais espaço para o heap continuarem a ser feitos, o aplicativo receberá uma exceção OutofMemory, o que resultará na finalização da JVM caso a exceção não seja capturada e tratada. Neste ponto o JVM produzirá dois arquivos de diagnóstico: um Heapdump e um Javadump. Eles estão detalhados no Manual de Diagnóstico para Java 1.4.2 e podem ser utilizados para determinar o que causou a alta ocupação do heap do Java. O Manual de Diagnóstico está no developerWorks, em: http://www-106.ibm.com/developerworks/java/jdk/diagnosis/. Nessas condições, recomenda-se aumentar o tamanho do heap utilizando a opção -Xmx ou reduzir o número de objetos do aplicativo em uso.

### Informações Adicionais sobre Coleta de Lixo

Para obter informações adicionais detalhadas sobre coleta de lixo, consulte:

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/

# Como a JVM Processa Sinais

Quando surge um sinal que é do interesse da JVM, uma rotina de tratamento de sinais é chamada. Essa rotina de tratamento de sinais determina se o sinal foi chamado por causa de um encadeamento Java ou não-Java. Se o sinal for por causa de um encadeamento Java, a JVM assumirá o controle do tratamento do sinal. Se o sinal for por causa de um encadeamento não-Java e o aplicativo que instalou o JVM tiver instalado anteriormente sua própria rotina de tratamento para o sinal, o controle será fornecido a essa rotina de tratamento. Caso contrário, o sinal será ignorado (quer isso seja ou não a ação padrão do sinal).

Com relação aos sinais de exceção e erro, a JVM:

- Identifica a condição e recupera (quando a exceção é causada pelo código do aplicativo) ou
- Insere uma seqüência de encerramento controlado em que ela:
  1. Chama a rotina de tratamento de sinais do aplicativo em razão desse sinal.
  2. Produz um Javadump, para descrever o estado da JVM em um ponto da falha
  3. Chama todos os ganchos de interrupção instalados pelo aplicativo.
  4. Executa a limpeza necessária para fornecer um encerramento limpo.

Para obter informações sobre como gravar um ativador que especifica os ganchos acima, consulte: http://www-106.ibm.com/developerworks/java/library/i-signalhandling/. Este item foi gravado para Java V1.3.1, mas se aplica também às versões posteriores.

Com relação aos sinais de interrupção, a JVM insere também uma seqüência de encerramento controlado, mas dessa vez ela é tratada como uma terminação normal:

- Chama a rotina de tratamento de sinais do aplicativo em razão desse sinal.
- Executa todos os ganchos de encerramento do aplicativo.
- Chama todos os ganchos de saída instalados pelo aplicativo.
- Executa a limpeza necessária da JVM.

O encerramento é idêntico ao encerramento iniciado por uma chamada para o método `System.exit()`.

Outros sinais utilizados pela JVM destinam-se a propósitos de controle interno e não causam a sua terminação. O único sinal de controle de interesse é SIGQUIT, o que faz com que um Javadump seja gerado.

## Sinais Utilizados pela JVM

A Tabela 1 a seguir mostra os sinais utilizados pela JVM. Os sinais foram agrupados na tabela por tipo ou uso, como se segue:

- Exceções: O sistema operacional faz surgir sincronicamente um sinal de exceção apropriado sempre que uma condição fatal ocorre.
- Erro: A JVM fará surgir um SIGABRT caso detecte uma condição da qual ela não pode recuperar-se.
- Interrupções: Os sinais de interrupção surgem de maneira assíncrona, de fora de um processo JVM, para solicitar encerramento.
- Controles: Outros sinais são utilizados pela JVM para propósitos de controle.

Tabela 1. Sinais Utilizados pela JVM
Nome do Sinal | Tipo de Sinal | Descrição | Desativado pelo -Xrs
--- | --- | --- | ---
SIGSEGV | Exceção | Acesso incorreto à memória (gravar para memória inacessível) | Não
SIGILL | Exceção | Instrução inválida (tentativa de chamar uma instrução de máquina desconhecida) | Não
SIGFPE | Exceção | Exceção de ponto flutuante (dividir por zero) | Não
SIGBUS | Exceção | Erro de barramento (tentativa de endereçamento a uma localização de memória inexistente) | Sim
SIGSYS | Exceção | Emitida chamada do sistema inválida | Sim
SIGXCPU | Exceção | O limite de tempo da CPU foi excedido (passou-se um tempo muito longo sem execução) | Sim
SIGXFSZ | Exceção | O limite de tamanho do arquivo foi excedido | Sim
SIGABRT | Erro | Finalização anormal. A JVM emite esse sinal sempre que detecta uma falha da JVM. | Sim
SIGINT | Interrupção | Atenção interativa (CTRL-C). A JVM sai normalmente. | Sim
SIGTERM | Interrupção | Pedido de finalização. A JVM sairá normalmente. | Sim
SIGHUP | Interrupção | Interromper. A JVM sai normalmente. | Sim
SIGUSR1 | Controle | Definido pelo usuário. Utilizado por algumas JVMs para propósitos de controle interno. | Não
SIGUSR2 | Controle | Definido pelo usuário. Utilizado por algumas JVMs para propósitos de controle interno. | Não
SIGQUIT | Controle | Um sinal de saída de um terminal. A JVM utiliza isso para efetuar Javadumps. | Sim
SIGTRAP | Controle | Interno para uso do dbx ou ptrace. Utilizado por algumas JVMs para propósitos de controle interno. | Sim
SIGPIPE | Controle | Uma gravação para um canal que não está sendo lido. A JVM ignora isso. | Não

Utilize a opção -Xrs (reduz uso de sinais) para evitar que a JVM manipule a maior parte dos sinais. Para obter informações adicionais, consulte a página do ativador de aplicativos Java da Sun em http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html.

Os sinais `1 (SIGHUP)`, `2 (SIGINT)`, `4 (SIGILL)`, `6 (SIGABRT)`, `7 (SIGEMT)`, `8 (SIGFPE)`, `10 (SIGBUS)`, `11 (SIGSEGV)`, `12 (SIGSYS)`, `15 (SIGTERM)`, e `24 (SIGXCPU)` provocam o encerramento da JVM; por essa razão, uma rotina de tratamento de sinais do aplicativo não deverá ser tentada para a recuperação destes, a menos que os serviços da JVM não sejam mais necessários.

## Vinculando um Driver de Código Nativo à Biblioteca de Cadeia de Sinais

O Runtime Environment contém um recurso de cadeia de sinais. A cadeia de sinais permite que a JVM interopere mais eficazmente com o código nativo que instala suas próprias rotinas de tratamento de sinais.

O recurso de cadeia de sinais permite que um aplicativo vincule e carregue a biblioteca compartilhada libjsig.so antes das bibliotecas do sistema. A biblioteca libjsig.so assegura que as chamadas como `signal()`, `sigset()` e `sigaction()` sejam interceptadas para que suas rotinas de tratamento não substituam as rotinas de tratamento de sinais da JVM. Em vez disso, essas chamadas salvam as novas rotinas de tratamento de sinais, ou as "encadeia" ocultas sob as rotinas de tratamento instaladas pela JVM. Mais tarde, quando qualquer um desses sinais surgir e for verificado que eles não se destinam à JVM, as rotinas de tratamento pré-instaladas serão chamadas.

Para utilizar libjsig.so:

- Efetue o link com o aplicativo que cria ou incorpora uma JVM:

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

  ou
- Utilize a variável de ambiente LD_PRELOAD:

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

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

  (Assumindo que `JAVA_HOME` esteja configurado; caso contrário, utilize /opt/IBMJava2-142/jre.)

Se você instalar rotinas de tratamento de sinais que utilizam `sigaction()`, alguns sa_flags não serão observados quando a JVM utilizar o sinal. São elas:

- SA_NOCLDSTOP - Isso nunca é definido.
- SA_NOCLDWAIT - Isso nunca é definido.
- SA_RESTART - Isso sempre é definido.
- SA_ONSTACK - Este é sempre configurado (apenas SIGSEGV) para Linux IA e zSeries e não é configurado para Linux PPC.

A biblioteca libjsig.so também oculta as rotinas de tratamento de sinais da JVM do aplicativo. Por essa razão, chamadas como `signal()`, `sigset()` e `sigaction()` que são feitas após o início da JVM não retornam mais uma referência à rotina de tratamento de sinais da JVM; em vez disso, retornam qualquer rotina de tratamento que foi instalada antes da inicialização da JVM.

| | |

# Implementando o Conjunto da Rotina de Tratamento de Conexão para RMI

|

O conjunto de encadeamento para as Rotinas de Tratamento de Conexão do RMI não é |ativado por padrão.

|

Para ativar o conjunto de conexão implementado no nível TCPTransport do RMI, |defina a opção

|

    -Dsun.rmi.transport.tcp.connectionPool=true (ou qualquer valor que não seja nulo)

|

Essa versão do Runtime Environment não possui nenhuma definição que |você possa utilizar para limitar o número de encadeamentos no conjunto de conexão.

# Obtendo o Número de Compilação e Versão IBM

Para obter o número de compilação e versão IBM, em um prompt do shell, digite:

`java -version`

# (Apenas Linux IA 32-bit) Utilizando o Java Plug-in

O Plug-in Java é um plug-in de navegador da Web. Ao utilizar o Java Plug-in, você pode ignorar o JVM padrão de seu navegador da Web e utilizar um Runtime Environment para executar os applets ou beans no navegador.

O Java Plug-in é documentado pela Sun em: http://java.sun.com/j2se/1.4.2/docs/guide/plugin/developer_guide/.

O Plug-in Java não suporta impressão neste release do SDK.

O Java Plug-in é suportado no Netscape 4, Netscape 6, e Mozilla, conforme fornecido pelo seu distribuidor.

## Instalando e Configurando o Java Plug-in para Netscape 6 e Mozilla

Para instalar e configurar o Java Plug-in para Netscape 6 ou Mozilla, crie um link simbólico do arquivo de biblioteca /opt/IBMJava2-142/jre/bin/libjavaplugin_oji.so para o seu diretório de plugins do navegador (/brower-install-path/plugins).

Para disponibilizar o Plug-in Java para todos os usuários:

1. Efetue login como root.
2. Coloque um link simbólico para o arquivo de biblioteca /opt/IBMJava2-142/jre/bin/libjavaplugin_oji.so no diretório de plugins do Mozilla ou Netscape (normalmente /usr/local/mozilla/plugins/ (ou netscape), embora isso possa variar em algumas distribuições).

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

Nota:
libjavaplugin_oji.so deverá ser vinculado simbolicamente em vez de copiado; caso contrário, ele não conseguirá encontrar a localização da JVM.

## Instalando e Configurando o Java Plug-in para Netscape 4

Para instalar e configurar o Java Plug-in para Netscape 4, crie um link simbólico a partir de um arquivo de biblioteca /opt/IBMJava2-142/jre/bin/javaplugin.so para o diretório de plugins do seu navegador (/brower-install-path/plugins).

Para disponibilizar o Java Plug-in para o usuário atual:

1. Crie um diretório chamado plugins no diretório $HOME/.netscape se ele já não existir.
2. Crie um link simbólico a partir do arquivo de biblioteca /opt/IBMJava2-142/jre/bin/javaplugin.so para /$HOME/.netscape/plugins.

Para disponibilizar o Plug-in Java para todos os usuários:

1. Efetue login como root.
2. Coloque um link simbólico para o arquivo de biblioteca /opt/IBMJava2-142/jre/bin/javaplugin.so no diretório de plugins (normalmente /usr/local/netscape/plugins/, embora isso possa variar em algumas distribuições).

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

Nota:
javaplugin.so deve ser simbolicamente vinculado em vez de copiado; caso contrário, ele não será capaz de encontrar o local da JVM.

## Utilizando o Java Plug-in com Navegadores gcc3.2.x Mozilla Compilados

Se você estiver utilizando uma distribuição enviada com um navegador gcc3.2.x Mozilla compilado (SLES8, Suse8.1), será necessário utilizar as bibliotecas de plug-in gcc3 compiladas que são enviadas com o IBM SDK para Linux, v1.4.2: libjavaplugin_ojigcc3.so e libjavaplugin_jnigcc3.so. Para utilizar essas bibliotecas, crie um link simbólico para libjavaplugin_ojigcc3.so no diretório <mozilla_installation_dir>/plugins:

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

## Utilizando Parâmetros DBCS

O Java Plug-in suporta caracteres de byte duplo (por exemplo, chinês tradicional BIG-5, coreano, japonês) como parâmetros para as marcações `<APPLET>`, `<OBJECT>` e `<EMBED>`. Será necessário selecionar a codificação de caractere correta para seu documento HTML, para que o Plug-in Java possa analisar o parâmetro. Especifique a codificação de caracteres para o documento HTML utilizando a marcação `<META>` na seção `<HEAD>` desta forma:

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

Esse exemplo pede que o navegador utilize a codificação de caracteres Chinese BIG-5 para analisar a utilização do arquivo HTML. Todos os parâmetros são aprovados para o Plug-in Java corretamente. No entanto, algumas das versões mais antigas dos navegadores podem não interpretar essa marcação corretamente. Nesse caso, você poderá fazer com que o navegador ignore essa marcação, mas poderá ter de alterar a codificação manualmente.

Você poderá especificar qual codificação você deseja utilizar para analisar o arquivo HTML:

- Netscape 4: Exibir Menu -> Conjunto de Caracteres
- Mozilla: Exibir Menu -> Código de Caractere

# (Apenas Linux IA 32-bit) Utilizando o Web Start

O Java Web Start é um meio de implementar aplicativos baseados na tecnologia java. Ele conecta o computador e a Internet e permite ao usuário iniciar e gerenciar aplicativos diretamente através da Web. O Java Web Start oferece ativação com um clique do mouse para aplicativos e assegura que você sempre esteja executando a versão mais recente, eliminando procedimentos de instalação e atualização. Geralmente, a distribuição de software pela web requer que você encontre o instalador na Web, faça o download do arquivo e o localize para, em seguida, executá-lo. Após a execução do instalador, ele pede diretório de instalação e opções de instalação como completa, típica ou mínima. Isso pode levar muito tempo e pode vir a ser uma tarefa bastante complicada, que deve ser repetida para cada versão do software.

Por outro lado, aplicativos implementados na Web, como seu cliente de e-mail e calendário baseados em HTML, são simples de instalar e utilizar. O navegador da Web tornou o processo automático. Não existem etapas complicadas de download, instalação e configuração e você tem a garantia de estar executando a versão mais recente. O Java Web Start oferece os mesmos benefícios a aplicativos completos.

Para obter mais informações sobre o Web Start, consulte: http://java.sun.com/products/javawebstart e para obter mais documentação, consulte: http://java.sun.com/j2se/1.4.2/docs/guide/jws/index.html.

## Instalando o Web Start

O script de instalação do Web Start é instalado com o JRE para Java V1.4.2.

O script é chamado de /opt/IBMJava2-142/jre/bin/webstart_install_sdk.sh. Para utilizar o Web Start, execute o script. Defina o diretório de trabalho atual para a localização na qual você deseja instalar o Web Start. O processo de instalação cria um subdiretório chamado javaws no diretório de trabalho atual.

O processo de instalação também atualiza os tipos mime que são utilizados pelo Mozilla e outros navegadores.

Você pode chamar o Web Start de três maneiras:

1. Selecione um link em uma página da Web que faça referência a um arquivo .jnlp.
2. Inicie o javaws no diretório javaws criado anteriormente, iniciando assim o diálogo Web Start no qual os aplicativos podem ser selecionados.
3. No script do shell, digite `javaws <URL>`, em que `<URL>` é a localização de um arquivo .jnlp.

Todas essas ações fazem com que o Web Start inicie o aplicativo selecionado. O aplicativo será transferido por download se essa for a primeira vez que ele está sendo utilizado. Nas chamadas posteriores, o Web site original será verificado para ver se há alguma atualização disponível. O Web Start faz o download dessas atualizações antes do início do aplicativo.

Se ocorrer um erro em um jnlp (um nome de marcação inválido, por exemplo), o Web Start será interrompido sem exibir uma mensagem de erro.

# Trabalhando com Pilhas Flutuantes

Em um sistema Linux de pilha não-flutuante, independentemente do valor que for definido para -Xss, será fornecido um tamanho mínimo de pilha nativa de 256 KB para cada encadeamento. Em um sistema Linux de pilha flutuante, os valores -Xss são aceitos. Portanto, se você estiver migrando de um sistema Linux de pilha não-flutuante, será necessário assegurar-se de que todos os valores de -Xss sejam grandes o suficiente e não dependam de um mínimo de 256 KB.

Distribuições específicas do Linux (apenas Linux IA 32-bit) - Red Hat, por exemplo - possuem um recurso GLIBC ativado chamado 'pilhas flutuantes'. Por causa das limitações do kernel Linux, a JVM não será executada em hardware SMP com pilhas flutuantes ativadas caso o nível do kernel seja inferior a 2.4.10. Nesse ambiente, pilhas flutuantes devem ser desativadas antes que a JVM ou qualquer aplicativo que inicie a JVM seja iniciado. No Red Hat, utilize este comando para desativar pilhas flutuantes, exportando uma variável de ambiente:

    export LD_ASSUME_KERNEL=2.2.5

# Alternando o Método de Entrada em Idiomas DBCS

Em sistemas DBCS (Conjunto de Caracteres de Byte Duplo), se deseja trocar o método de entrada, você deve utilizar a classe java.util.prefs.Preferences em vez de utilizar as variáveis de ambiente IBMJAVA_INPUTMETHOD_SWITCHKEY e IBMJAVA_INPUTMETHOD_SWITCHKEY_MODIFIERS. Consulte Especificação de Estrutura do Método de Entrada da Sun em detalhes.

# Instalando o Aplicativo em um Sistema de Usuário

Após desenvolver seu produto e estar pronto para expedi-lo, você precisa instalar o produto em um sistema de usuário, configurar o sistema do usuário para suportar o software e configurar o ambiente de tempo de execução.

Se você utilizar o Runtime Environment para Linux, deverá assegurar-se de que o procedimento de instalação não sobreponha uma instalação já existente (a menos que o Runtime Environment para Linux seja uma versão anterior).

Para redistribuir o Runtime Environment para Linux, você pode instalá-lo em seu próprio sistema e em seguida copiar os arquivos requeridos do Runtime Environment para o seu conjunto de instalação. Se você escolher essa abordagem, deverá incluir todos os arquivos fornecidos com o Runtime Environment para Linux. O software do Runtime Environment para Linux poderá ser redistribuído somente se todos os arquivos forem incluídos. De fato, quando você envia o aplicativo, ele tem sua própria cópia do Runtime Environment para Linux.

Para obter informações específicas sobre os arquivos que devem ser redistribuídos, consulte o contrato de licença que acompanha esse produto.

# Limitações Conhecidas

As seções a seguir explicam as limitações conhecidas do Runtime Environment para Linux.

## As limitações que se aplicam a todas as plataformas Linux, exceto onde indicado

- É possível que você não consiga utilizar a área de transferência do sistema com DBCS (Conjunto de Caracteres de Byte Duplo) para copiar informações entre aplicativos Linux e Java, caso esteja executando o KDE (K Desktop Environment).
- O SDK implementa encadeamentos Java como encadeamentos nativos, que irá resultar em cada encadeamento sendo um processo Linux separado. Se o número de encadeamentos Java exceder o número máximo de processos permitidos, seu programa poderá retornar uma mensagem de erro, um erro SIGSEGV ou seu sistema poderá travar.

  O número máximo de encadeamentos disponíveis é determinado pelos valores mínimos de:

  - A definição dos processos de usuário (ulimit -u) em /etc/security/limits.conf
  - O limite definido em /proc/sys/kernel/threads_max
  - O limite PTHREAD_THREADS_MAX que é definido no libpthreads.so (alteração requer que o glibc seja compilado novamente)

  Entretanto, você poderá ficar sem armazenamento virtual antes de atingir o número máximo de encadeamentos.

- Se você encerrou um aplicativo Java com um Ctrl-C, vários processos poderão ser deixados órfãos.
- Uma tentativa de exibir as caixas de diálogo criadas com o Swing poderá causar um atraso de alguns segundos antes que essas caixas sejam exibidas na janela.
- Os resultados de KeyEvent que incluem a tecla ALT diferem ao utilizar diferentes gerenciadores de janelas no Linux. Além disso, diferem dos resultados de outros sistemas operacionais. No gerenciador de janelas Enlightenment, Alt+A e Shift+Alt+A produzem modificadores diferentes e Ctrl+Alt+A não produz eventos de tecla. No entanto, ao utilizar o gerenciador de janela WindowMakerr, Ctrl+Alt+A irá produzir um evento de tecla.
- No Sistema Linux X Window, o mapa de teclas está definido para: 64 0xffe9 (Alt_L) 0xffe7 (Meta_L) e 113 0xffea (Alt_R) 0xffe8 (Meta_R). Para verificar isto, digite este comando em um prompt do shell:

      xmodmap -pk

  Esse é o motivo pelo qual o SDK considera que Meta + Alt estão sendo processados juntos. Como alternativa, é possível remover o mapeamento de Meta_x, digitando o seguinte em um prompt do shell:

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

  Nota:
  Essa alternativa poderá afetar outros aplicativos X-Window que estão sendo executados na mesma tela caso eles utilizem a tecla Meta removida.
- A criação de pares de chaves DSA de comprimentos incomuns pode demorar um tempo significativo em máquinas mais lentas. Não interprete esse atraso como uma interrupção porque o processo será concluído se for permitido tempo suficiente. O algoritmo de geração da chave DSA foi otimizado para gerar comprimentos de chave padrão (neste caso, 512, 1024) com mais rapidez que os outros.
- Programas nativos não podem criar uma JVM 1.1. Não é possível chamar JNI_CreateJavaVM() e aprovar uma versão do JNI_VERSION_1_1(0x00010001). As versões que podem ser aprovadas são:
  - JNI_VERSION_1_2(0x00010002)
  - JNI_VERSION_1_4(0x00010004)

  A JVM criada em cada caso é a especificada pelas bibliotecas (isto é, 1.2.2, 1.3.x, 1.4.x), e não a que é aplicada pela interface JNI. A interface API não afeta a especificação de idioma implementada pela JVM, as APIs da biblioteca de classes ou qualquer outra área de comportamento da JVM. A interface API especifica somente como o código nativo pode chamar o comportamento exigido.

- Somente para usuários do chinês tradicional, as teclas de função Enter, Space, Backspace e ESC não funcionam da maneira esperada ao utilizar os IMEs LinYi ZhuYin, YiTian ZhuYin e Bosham para inserir os caracteres TCH. A tecla Enter insere uma nova linha, a tecla ESC é utilizada para cancelar as cadeias de pré-edição ou a janela candidata e barra de espaço insere um espaço. A janela candidata deve desaparecer após a tecla de consolidação ter sido pressionada e não deve aparecer quando você pressionar a tecla backspace enquanto utiliza os IMEs LinYi ZhuYin, YiTian ZhuYin e Bosham para inserir os caracteres de chinês tradicional.
- Se você estiver trabalhando com vários encadeamentos simultâneos, poderá obter uma mensagem de aviso: `java.lang.OutOfMemoryError`. Isso é uma indicação de que sua máquina está sendo executada sem recursos de sistema e as mensagens podem ser causadas pelas seguintes razões:
  1. Novos encadeamentos não podem ser criados porque:
     - O número de processos criados ultrapassa o limite do usuário.
     - Não há recursos de sistema suficientes que estejam disponíveis para criar novos encadeamentos. Nesse caso, talvez seja necessário consultar também outras exceções Java, dependendo de qual aplicativo está sendo executado.
  2. O kernel está sem memória ou está fragmentado. Poderão ser vistas mensagens correspondentes de Sem Memória do kernel no /var/log/messages que possui o ID do processo eliminado.
  Tente ajustar o sistema para aumentar seus recursos correspondentes.
- Durante a instalação, se a versão anterior deste produto, distribuída pela Red Hat, já tiver sido instalada, o RPM (Red Hat Package Manager) relatará que o pacote IBM é mais antigo que quaisquer versões do produto que a Red Hat distribuiu. Essa condição ocorre porque o Red Hat adiciona ao pacote RPM um "número de série" que substitui o esquema de versões do produto no pacote e, por padrão, o RPM se recusa a instalar um pacote que pareça ser mais antigo que o já instalado. A opção --oldpackage do comando rpm permite a instalação do novo pacote IBM.
- No SDK Version 1.4.2, os aplicativos executados em SMP (Symmetric Multiprocessor Machines) no SLES 8 têm melhor desempenho com uma implementação de IBM JVM dos monitores de Java. Em razão de a maioria dos aplicativos possuírem vantagens ou nenhuma alteração ao desempenho, o novo algoritmo é agora o comportamento padrão. Se, por outro lado, a nova definição padrão reduzir o desempenho de seu JVM, você poderá restaurar o algoritmo antigo definindo a variável de ambiente: `export IBM_JVM_MONITOR_OLD=<any value>`.

  Para obter informações adicionais, consulte Manual de Diagnóstico para v1.4.2.

- Ao executar um aplicativo java awt/swing em uma máquina Linux e exportar a exibição para uma segunda máquina, poderão ocorrer problemas para exibir alguns diálogos se o conjunto de fontes carregadas na máquina do cliente X for diferente do conjunto carregado na máquina do servidor X. Esse problema é visível particularmente com SLES8 em localidades do idioma chinês, em que a instalação padrão da versão do servidor instala as fontes arphic, mas a instalação padrão do cliente não o faz. Para evitar esse problema, instale as mesmas fontes em ambas as máquinas.
- |Se a localidade do seu sistema estiver utilizando a codificação UTF-8, algumas ferramentas do SDK |podem apresentar uma sun.io.MalformedInputException. Para descobrir se seu |sistema está utilizando uma codificação UTF-8, analise as variáveis de ambiente específicas |da localidade como LANG ou LC_ALL para |ver se elas terminam com o sufixo ".UTF-8". Se você encontrar uma sun.io.MalformedInputException, |altere os caracteres que não estão dentro da série de 7-bit ASCII (0x00 - 0x7f) |e que não são representados como caracteres literais de Java Unicode para caracteres literais |de Java Unicode (por exemplo: '\u0080'). Você pode também obter uma solução alternativa para este |problema removendo o sufixo ".UTF-8" das variáveis de ambiente específicas da localidade; |por exemplo, se sua máquina tiver a localidade padrão de "en_US.UTF-8", |defina LANG para "en_US". | |
  Nota:
  |
  Algumas distribuições |de RedHat, incluindo Redhat9 e RHEL3, utilizam a codificação UTF-8 como padrão.
  |
  |
- |Se você estiver utilizando AMI e xcin em um ambiente de plataforma cruzada |(por exemplo, se você tentar exportar a exibição entre um sistema de 32-bit e um de 64-bit |ou entre um sistema big-endian e um little-endian) podem ocorrer |alguns problemas. Se você tiver esse tipo de problema, entre em contato com um distribuidor Linux. |
  |
- |No Redhat Enterprise Linux 3.0, os caracteres em chinês podem |não ser exibidos nos componentes de texto AWT, exceto para caracteres GB2312 |na localidade GB18030 em chinês. |
  |

## Limitações do Linux IA 32-bit

- O Java Plug-in não suporta a impressão neste release do SDK.
- O SLES 8 para coreano pode não exibir caracteres coreanos. Para corrigir isso, instale o pacote rpm "baekmuk-ttf" e execute `SUSEconfig`:

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

- Para usuários de texto em árabe, ao utilizar o Linux com uma placa de vídeo Matrox e aceleração ativada, a distorção de caracteres pode ser vista ao utilizar drawString para exibir as fontes grandes. Esse problema é causado pelo driver dessas placas. A solução alternativa é desativar a aceleração do dispositivo.

## Limitações do Linux PPC 32-bit e 64-bit

- Se o seu código Java utiliza chamadas da JNI e alguma chamada específica tiver mais de oito parâmetros float ou double, seu código C deve ser compilado com o nível gcc-2.95.3 FSF (Free Software Foundation) do GCC (GNU C Compiler).
- Se você estiver executando a versão 3.x do XFree86, você pode receber um erro SIGSEGV. Para evitar esse problema, é recomendado que você utilize a versão 4.x do XFree86.
- Se a data estiver definida para uma data anterior a 1970, você irá obter um erro de exceção quando tentar iniciar o Java. Para solucionar este problema, defina manualmente a data de sua máquina para a data atual.

## Limitações do Linux PPC 32-bit

- Os CDs de instalação do SLES 8.0 para PowerPC não incluem fontes TrueType Chinese adequadas para Java para exibir caracteres em chinês corretamente. Instale o pacote ttf-hanyi-20021016-0.noarch.rpm do United Linux 1.0 para melhorar a exibição das fontes em chinês.

## Limitações do Linux zSeries 64-bit

As seguintes limitações se aplicam aos usuários do idioma chinês, taiwanês e coreano no Linux zSeries 64-bit:

- O servidor do método de inserção de chinês e taiwanês (xcin) não foi testado com a Versão 1.4.2.
- Apenas para usuários do chinês simplificado, alguns caracteres em chinês podem não ser exibidos. Para evitar o problema, faça o download da fonte TrueType no SLES8 para o sistema zSeries 64-bit:
  - ttf-hanyi-20021016-0
  A fonte está disponível no Web site da SUSE em: http://www.suse.com/index_us.html.
- Apenas para usuários do chinês tradicional, alguns caracteres em chinês podem não ser exibidos. Para evitar o problema, faça o download das fontes TrueType no SLES8, as quais funcionam como um cliente gráfico:
  - ttf-arphic-bkai00mp-20001125-103
  - ttf-arphic-gbsn00lp-20001125-103
  - ttf-arphic-gkai00mp-20001125-103
  - ttf-arphic-bsmi00lp-20001125-103
  - ttf-arphic-20001125-323
  As fontes estão disponíveis no Web site da SUSE em: http://www.suse.com/index_us.html.

## Limitações do Linux zSeries 32-bit e 64-bit

- Se você utilizar o áudio em uma máquina sem uma placa de som, poderá aparecer uma mensagem de erro indicando que não há memória suficiente quando o Java tentar reproduzir o som. A mensagem será exibida no console mas ela não irá afetar seu aplicativo Java.
- Embora o kernel do Linux nas distribuições atuais forneça suporte ao IP6 (Internet Protocol Versão 6), é possível encontrar problemas ao utilizá-lo. O suporte ao IP6 do Java está incluso neste release, mas é aconselhável que este seja desligado com a opção -Djava.net.preferIPv4Stack=true no comando Java. Se um kernel for instalado e o mesmo suportar completamente o IP6, não será necessária esta opção.

# Algum Comentário sobre este Guia do Usuário?

Caso tenha algum comentário sobre a utilidade, ou não, deste Guia do Usuário, gostaríamos de saber sua opinião por meio de um desses canais. Observe que esses canais não foram implementados para responder perguntas técnicas - os canais são apenas para comentários sobre a documentação. Envie seus comentários:

- Por e-mail: idrcf@hursley.ibm.com.
- Por fax:
  - Do Reino Unido: 01962 842327
  - De outros locais:<código internacional>44 1962 842327
- Por escrito para:
  Centro de Tecnologia IBM Brasil
  Centro de Traduções
  Caixa Postal 71
  CEP: 13001-970
  Campinas, SP

Letras Miúdas. Ao mandar uma mensagem para a IBM, o Cliente concorda que todas as informações contidas em sua mensagem, incluindo dados sobre feedback, como perguntas, comentários, sugestões ou informações similares, serão classificadas como não-confidenciais; a IBM não possui nenhuma obrigação de qualquer tipo em relação a tais informações e poderá reproduzir, utilizar, divulgar e distribuir as informações a terceiros sem nenhuma limitação. A IBM poderá usar todas as idéias, conceitos, conhecimentos ou técnicas contidas em tais informações para o fim que desejar, incluindo, mas não se limitando a desenvolvimento, fabricação e marketing de produtos incorporando tais informações.

# Avisos

Estas informações foram desenvolvidas para produtos e serviços oferecidos nos Estados Unidos. A IBM pode não oferecer os produtos, serviços ou recursos discutidos neste documento em outros países. Consulte seu representante da IBM local para obter informações sobre os produtos e serviços atualmente disponíveis em sua área. Qualquer referência a produtos, programas ou serviços IBM não significa que apenas produtos, programas ou serviços IBM possam ser utilizados. Qualquer produto, programa ou serviço funcionalmente equivalente, que não infrinja nenhum direito de propriedade intelectual da IBM ou quaisquer outros direitos da IBM, poderá ser utilizado em substituição a este produto, programa ou serviço. Entretanto, a avaliação e verificação da operação de qualquer produto, programa ou serviço não-IBM é de inteira responsabilidade do Cliente.

A IBM pode ter patentes ou solicitações de patentes pendentes relativas a assuntos tratados nesta publicação. O fornecimento desta publicação não garante ao Cliente nenhum direito sobre tais patentes. Pedidos de licença devem ser enviados, por escrito, para:

- Gerência de Relações Comerciais e Industriais da IBM Brasil
  Av. Pasteur, 138-146, Botafogo
  Rio de Janeiro, RJ
  CEP 22290-240

Para pedidos de licenças com relação a informações sobre DBCS (Conjunto de Caracteres de Byte Duplo), entre em contato com o Departamento de Propriedade Intelectual da IBM em seu país ou envie pedidos, por escrito, para:

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

O parágrafo a seguir não se aplica a nenhum país em que tais disposições não estejam de acordo com a legislação local:

A INTERNATIONAL BUSINESS MACHINES CORPORATION FORNECE ESTA PUBLICAÇÃO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE NENHUM TIPO, SEJA EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS IMPLÍCITAS DE MERCADO OU DE ADEQUAÇÃO A UM DETERMINADO PROPÓSITO. Alguns países não permitem a exclusão de garantias expressas ou implícitas em certas transações; portanto, esta disposição pode não se aplicar ao Cliente.

Estas informações podem incluir imprecisões técnicas ou erros tipográficos. Periodicamente, são feitas alterações nas informações aqui contidas; tais alterações serão incorporadas em futuras edições desta publicação. A IBM pode fazer aperfeiçoamentos e/ou alterações nos produtos e/ou programas descritos nesta publicação, a qualquer momento, sem aviso prévio.

Referências nestas informações a Web sites não-IBM são fornecidas apenas por conveniência e não representam de forma alguma um endosso a esses Web sites. Os materiais contidos nesses Web sites não fazem parte dos materiais deste produto IBM e a utilização desses Web sites é de responsabilidade do usuário.

A IBM pode utilizar ou distribuir qualquer informação fornecida, da forma que julgar apropriada, sem que isso incorra em qualquer obrigação para com o Cliente.

Licenciados deste programa que pretendam obter mais informações sobre o mesmo com o objetivo de permitir: (i) a troca de informações entre programas criados independentemente e outros programas (incluindo este) e (ii) a utilização mútua das informações trocadas, devem entrar em contato com:

- Gerência de Relações Comerciais e Industriais da IBM Brasil
  Av. Pasteur, 138-146, Botafogo, Rio de Janeiro-RJ, CEP 22290-240

Tais informações podem estar disponíveis, sujeitas a termos e condições apropriados, incluindo, em alguns casos, o pagamento de uma taxa.

O programa licenciado descrito neste documento e todo o material licenciado disponível são fornecidos pela IBM sob os termos do Contrato com Cliente IBM, Contrato de Licença de Programa Internacional IBM ou qualquer contrato equivalente.

Todos os dados de desempenho aqui descritos foram determinados em um ambiente controlado. Portanto, os resultados obtidos em outros ambientes operacionais podem variar significativamente. Algumas medidas podem ter sido tomadas em sistemas em fase de desenvolvimento e não há garantia de que tais medidas sejam as mesmas nos sistemas normalmente disponíveis. Além disso, algumas medições podem ter sido estimadas através de extrapolação. Os resultados reais podem variar. Os usuários deste documento devem verificar os dados que se aplicam ao seu ambiente específico.

As informações referentes a produtos não-IBM foram obtidas junto a fornecedores desses produtos, anúncios publicados ou outras fontes publicamente disponíveis. A IBM não testou esses produtos e não pode confirmar a precisão de desempenho, compatibilidade nem qualquer outra reivindicação relacionada a produtos não-IBM. Dúvidas sobre os recursos dos produtos não-IBM devem ser encaminhadas aos fornecedores dos respectivos produtos.

## Marcas Comerciais

IBM é uma marca comercial da International Business Machines Corporation nos Estados Unidos e/ou em outros países.

IBM, iSeries, pSeries e zSeries são marcas comerciais ou marcas comerciais registradas da International Business Machines Corporation nos Estados Unidos e/ou em outros países.

Java e todas as marcas comerciais e logotipos baseados em Java são marcas comerciais ou marcas comerciais registradas da Sun Microsystems, Inc., nos Estados Unidos e/ou em outros países.

Intel, Intel Inside (logotipos), MMX e Pentium são marcas comerciais da Intel Corporation nos Estados Unidos e/ou em outros países.

Outros nomes de empresas, produtos ou serviços podem ser marcas comerciais ou marcas de serviço de terceiros.

Este produto inclui software desenvolvido pela Apache Software Foundation http://www.apache.org/.