# IBM Runtime Environment para Linux na Arquitetura AMD64, Java 2 Technology Edition, Versão 1.4.2

# Runtime Environment: 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.

Esta edição do Guia do Usuário aplica-se ao IBM Runtime Environment para Linux na Arquitetura AMD64, Java 2 Technology Edition, Versão 1.4.2.

(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 Linux(TM) na Arquitetura AMD64.

O IBM Runtime Environment contém a JVM (Java(TM) 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 SDK inclui o Runtime Environment para Linux, que permite somente a execução de 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.

# Índice

Informações de Copyright
Prefácio
Visão Geral
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
Configurando o Runtime Environment
Desinstalando o Runtime Environment para Linux
Desinstalando o Pacote RPM (Red Hat Package Manager) Instalável
Desinstalando o Pacote TAR (Tape Archive) Compactado
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
Especificando a Política de Coleta de Lixo
Tempo de Pausa
Redução do Tempo de Pausa
Ambiente com Heaps Muito Cheios
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
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
Algum Comentário sobre este Guia do Usuário?
Avisos
Marcas Registradas

# Visão Geral

O Runtime Environment contém a Java Virtual Machine, classes Java e arquivos de suporte. O Runtime Environment contém apenas um subconjunto das classes localizadas no SDK e permite executar classes Java, mas não permite compilar programas Java.

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

O Runtime Environment para Linux inclui arquivos de objetos binários e arquivos de classe que são necessários para suportar um programa em tempo de execução. O Runtime Environment para Linux não inclui nenhuma ferramenta de desenvolvimento, como appletviewer ou o compilador Java (javac), nem classes que pertenceriam 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. Se você tiver instalado a API de Comunicações Java, poderá encontrar informações sobre ela na publicação JavaComm API User Guide.

## 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, utilize a opção -Xint. No janela de prompt shell em que o aplicativo é executado, digite:

        java -Xint classe

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)

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 como utilizar o JNI, consulte o Web site da Sun: http://java.sun.com/j2se/1.4.2/docs/guide/jni.

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

# Configurando o Runtime Environment

Depois de instalar o Runtime Environment, edite o script de login de shell e inclua esse diretório na instrução PATH:

/opt/IBMJava2-142/jre/bin

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

# Desinstalando o Runtime Environment para Linux

O processo que você utiliza para remover o Runtime Environment para Linux depende se você instalou o pacote RPM (Red Hat Package Manager) instalável 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-0.0

   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.

## 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.

# Ativando um Aplicativo Java

A ferramenta java ativa um aplicativo Java. Ela requer um nome de classe Java inicial como parâmetro. Se esse nome não for fornecido, uma mensagem de uso será impressa.

A JVM procura a classe inicial (e outras classes utilizadas) em três conjuntos de locais: no caminho de classe de auto-inicialização, nas extensões instaladas e no caminho de classe 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 da procura por classes e recursos de aplicativos. 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 | dynload | stack | debug | sizes | stackwalk]
  - Permite saída interativa.
- -version
  - Exibe a versão do produto.
- -X
  - Imprime a ajuda sobre opções não padrão.

### Opções Não Padrão

As opções -X listadas a seguir não são opções padrão e, portanto, estão sujeitas a alterações sem aviso prévio.

- -Xargencoding
  - Permite colocar seqüências de escape Unicode na lista de argumentos.
- -Xbootclasspath:<diretórios e arquivos zip ou jar separados por ;>
  - Define o caminho da procura por classes e recursos de auto-inicialização.
- -Xbootclasspath/a:<diretórios e arquivos zip ou jar separados por ;>
  - Anexa os diretórios, arquivos zip ou arquivos jar especificados ao final do caminho de classe de auto-inicialização.
- -Xbootclasspath/p:<diretórios e arquivos zip ou jar separados por ;>
  - Anexa os diretórios, arquivos zip ou arquivos jar especificados ao começo do caminho de classe de auto-inicialização. Não implemente aplicativos que utilizam a opção -Xbootclasspath: ou -Xbootclasspath/p: para substituir uma classe em core.jar, graphics.jar, server.jar, security.jar, xml.jar, tools.jar ou charsets.jar, pois uma implementação como essa violaria a licença de código binário do Java 2 Runtime Environment.
- -Xcheck:jni
  - Executa verificações adicionais das funções JNI. Também é possível utilizar -Xrunjnichk.
- -Xcheck:nabounds
  - Executa verificações adicionais das operações de array JNI. Também é possível utilizar -Xrunjnichk.
- -Xcompactexplicitgc
  - Compacta todas as chamadas para `System.gc()`. Consulte também -Xnocompactexplicitgc
- -Xcompactgc
  - Compacta todos os ciclos do Coletor de Lixo. Consulte também -Xnocompactgc
- -Xdbg:<opções>
  - Carrega bibliotecas de depuração para suporte da depuração remota de aplicativos. Equivale exatamente a -Xrunjdwp
- -Xdbginfo:<caminho para arquivo de símbolos>
  - Carrega e transmite opções para o servidor de informações de depuração.
- -Xdisablejavadump
  - Faz com que dumps de sistema sejam gerados, em vez de dumps java, quando ocorrem problemas.
- -Xdebug
  - Inicia a JVM com o depurador ativado.
- -Xdisableexplicitgc
  - Altera as chamadas para `System.gc()` em no-ops.
- -Xfuture
  - Ativa verificações completas em formatos de arquivos de classe. Utilize esse sinalizador ao desenvolver um novo código, pois verificações mais completas serão o padrão em releases futuros do ativador de aplicativos Java.
- -Xgc:<opções>
  - Transmite opções, como verbose, compact, nocompact e assim por diante, ao Coletor de Lixo.
- -Xgcpolicy:[:optthruput]|[:optavgpause]
  - Controla o comportamento do coletor de lixo. A opção optthruput é a padrão e proporciona um rendimento do processamento muito alto aos aplicativos, embora isso implique a ocorrência de pausas ocasionais. A opção optavgpause reduz o tempo gasto nessas pausas para coleta de lixo e limita o efeito do aumento do tamanho de heap durante a pausa para coleta de lixo. Utilize optavgpause se a sua configuração apresentar um heap muito grande.
- -Xgcthreads<número de encadeamentos>
  - Define o número de encadeamentos que devem executar a coleta de lixo.
- -Xinitsh<tamanho>
  - Define o tamanho inicial do armazenamento designado para a inclusão de classes do sistema.
- -Xint
  - Faz com que a JVM utilize apenas o Interpretador, desativando o JIT e o AOT.
- -Xiss
  - Define o tamanho inicial da pilha de encadeamentos Java.
- -Xjit[:<número de encadeamentos>]
  - Ativa o JIT e/ou transmite opções para ele. Consulte também -Xnojit.
- -Xlinenumbers
  - Ativa os números de linhas para depuração. Consulte também -Xnolinenumbers.
- -Xmaxe<tamanho>
  - Define o tamanho máximo de acordo com o qual o coletor de lixo expande o heap. Normalmente, o coletor de lixo expande o heap quando a quantidade de espaço livre está abaixo de 30% (ou de acordo com a quantidade especificada com o uso de -Xminf), até atingir a quantidade necessária de forma a restaurar o espaço livre para 30%. A opção -Xmaxe limita a expansão ao valor especificado; por exemplo, `-Xmaxe10M` limita a expansão a 10 MB.
- -Xmaxf<tamanho>
  - Especifica a porcentagem máxima de heap que deve estar livre após uma coleta de lixo. Se o espaço livre exceder esse valor, a JVM tentará reduzir o heap. Especifique o tamanho como um valor decimal no intervalo de 0 a 1. Por exemplo, `-Xmaxf0.5` define o espaço livre máximo como 50%. O valor padrão é 0.6.
- -Xmca<tamanho>
  - Define o segmento de classes RAM a ser incrementado de acordo com o tamanho especificado.
- -Xmco<tamanho>
  - Define o segmento de classes ROM a ser incrementado de acordo com o tamanho especificado.
- -Xmine<tamanho>
  - Define o tamanho mínimo de acordo com o qual o coletor de lixo expande o heap. Normalmente, o coletor de lixo expande o heap de acordo com a quantidade necessária para restaurar o espaço livre para 30% (ou de acordo com a quantidade especificada com o uso de -Xminf). A opção -Xmine define a expansão de forma que ela corresponda no mínimo ao valor especificado; por exemplo, `-Xmine50M` define o tamanho da expansão como um mínimo de 50 MB.
- -Xminf<tamanho>
  - Especifica a porcentagem mínima de heap que deve estar livre após uma coleta de lixo. Se o espaço livre estiver abaixo desse valor, a JVM tentará expandir o heap. Especifique o tamanho como um valor decimal no intervalo de 0 a 1; por exemplo, um valor de `-Xminf0.3` solicita que o espaço livre mínimo corresponda a 30% do heap
- -Xmjit[:<número de encadeamentos>]
  - Ativa o MicroJIT e/ou transmite opções para ele.
- -Xmn<tamanho>
  - Define o tamanho do novo heap como o tamanho especificado.
- -Xmo<tamanho>
  - Define o tamanho de heap Java inicial. Também é possível utilizar -Xms.
- -Xmoi<tamanho>
  - Incrementa o tamanho de heap Java inicial.
- -Xmr<tamanho>
  - Define o tamanho do conjunto memorizado.
- -Xms<tamanho>
  - Define o tamanho de heap Java inicial. Também é possível utilizar -Xmo.
- -Xmso<tamanho>
  - Define o tamanho da pilha de encadeamentos do S.O.
- -Xmx<tamanho>
  - Define o tamanho máximo do heap Java.
- -Xnm
  - Especifica o tamanho do pool de monitores.
- -Xnoagent
  - Desativa a interface sun.tools.debug antiga de forma a possibilitar o uso do suporte para depuração JPDA.
- -Xnoaot
  - Desativa o AOT.
- -Xnoclassgc
  - Desativa coleta de lixo da classe. Isso desativa a coleta de lixo do armazenamento associado a classes Java que deixaram de ser utilizadas pela JVM.
- -Xnocompactgc
  - Desativa a compactação para o Coletor de Lixo. Consulte também -Xcompactgc
- -Xnocompactexplicitgc
  - Desativa a compactação em uma chamada para `System.gc()`. Consulte também -Xcompactexplicitgc
- -Xnojit
  - Desativa o JIT. Consulte também -xjit.
- -Xnolinenumbers
  - Desativa os números de linhas para depuração. Consulte também -Xlinenumbers.
- -Xnopartialcompactgc
  - Desativa a compactação incremental em uma chamada para `System.gc()`. Consulte também -Xpartialcompactgc
- -Xnosigcatch
  - Desativa o código de recuperação da JVM. Consulte também -Xsigcatch.
- -Xnosigchain
  - Desativa o encadeamento de rotinas de tratamento de sinais. Consulte também -Xsigchain.
- -Xoptionsfile=<file>
  - Especifica um arquivo que contém opções e definições JVM.
- -Xoss<tamanho>
  - Define o tamanho máximo de pilha Java para qualquer encadeamento.
- -Xpartialcompactgc
  - Ativa a compactação incremental em todas as chamadas para `System.gc()`. Consulte também -Xnopartialcompactgc
- -Xquickstart
  - Aprimora o tempo de inicialização atrasando a compilação.
- -Xrdbginfo:<host>:<porta>
  - Carrega e transmite opções para o servidor remoto de informações de depuraçã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. Equivale exatamente a -Xdbg
    - -Xrunjnichk[ :verbose | trace | profile | nonfatal | nowarn | noadvice | pedantic | help]
      - Executa verificações adicionais das funções JNI.
- -Xsigcatch
  - Ativa o código de recuperação da JVM. Consulte também -Xnosigcatch.
- -Xsigchain
  - Ativa o encadeamento de rotinas de tratamento de sinais. Consulte também -Xnosigchain.
- -XsigquitToFile<caminho para arquivo><nome_do_arquivo>
  - Faz o dump de informações a partir do rastreio sigquit para o arquivo especificado.
- -Xss<tamanho>
  - Define o tamanho máximo da pilha nativa para qualquer encadeamento. Para obter informações adicionais, consulte Trabalhando com Pilhas Flutuantes.
- -Xthr:<opções>
  - Define opções de encadeamento.
- -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 inteiros), a saída verboseGC será redirecionada ao número X de arquivos, cada um contendo o número Y de ciclos de coleta de lixo adequados para a saída verboseGC. Esses arquivos possuem o formato nome de arquivo1, nome de arquivo2 e assim por diante.
- -Xverify
  - Ativa a verificação completa de classes para cada classe carregada.
- -Xverify:none
  - Desativa a verificação completa de classes.

## 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.

Também é possível especificar qualquer caractere Unicode nos argumentos e no nome de classe 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).

Como alternativa, para especificar que o nome de classe e os argumentos de comando possuem a codificação UTF8, utilize -Xargencoding:utf8 ou, na codificação ISO8859_1, utilize -Xargencoding:latin.

Os comandos java e javaw fornecem mensagens de saída traduzidas. Essas mensagens são diferentes com base no código do idioma em que o Java está sendo executado. As descrições detalhadas de erros e outras informações de depuração retornadas por java estão em inglês.

## Trabalhando com Classpaths

É possível especificar um nome de classe como um nome de arquivo completo, incluindo um caminho completo e a extensão .class. Em versões anteriores, apenas era possível especificar a classe relativa a 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`.

## 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 utiliza os valores optthruput (o padrão), optavgpause ou gencon. 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

> -Xgcpolicy:gencon

### 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 JVM utiliza duas técnicas para reduzir tempos de pausa:

- Coleta de lixo simultânea
- Coleta de lixo com base em gerações

A opção de linha de comandos -Xgcpolicy:optavgpause solicita o uso da coleta de lixo simultânea para reduzir significativamente o tempo gasto em pausas para coletas de lixo. A Coleta de Lixo Simultânea reduz o tempo de pausa executando algumas atividades de coleta de lixo simultaneamente à execução normal de programas para minimizar a interrupção causada pela coleta do heap. A opção -Xgcpolicy:optavgpause também limita o efeito do aumento do tamanho de heap durante a pausa para coleta de lixo. A opção -Xgcpolicy:optavgpause é mais útil para configurações que apresentam grandes heaps. Com o tempo de pausa reduzido, você poderá perceber uma certa redução no rendimento do processamento dos aplicativos.

Durante a coleta de lixo simultânea, um tempo significativo é gasto com a identificação de objetos relativamente resistentes que não conseguem ser coletados. Se a Coleta de Lixo concentrar-se apenas nos objetos com a maior tendência de serem recicláveis, será possível reduzir ainda mais os tempos de pausa de alguns aplicativos. A Coleta de Lixo com Base em Gerações obtém o mesmo resultado dividindo o heap em duas "gerações", as áreas de "desenvolvimento" e "estabilidade". Os objetos são colocados em uma dessas áreas dependendo da duração. A área de desenvolvimento é a menor e contém objetos mais recentes, enquanto a área de estabilidade é maior e contém objetos mais antigos. Os objetos são alocados primeiro à área de desenvolvimento; se persistirem por um período suficiente, avançarão em algum momento para a área de estabilidade.

A Coleta de Lixo com Base em Gerações depende da curta duração da maioria dos objetos. Ela reduz os tempos de pausa concentrando-se na tentativa de reivindicar o armazenamento na área de desenvolvimento, pois essa área inclui a maioria do espaço reciclável. Em vez de tempos de pausa ocasionais, mas demorados, para coletar todo o heap, a área de desenvolvimento é coletada com mais freqüência e, se essa área for pequena o bastante, os tempos de pausa serão relativamente menores. Entretanto, a Coleta de Lixo com Base em Gerações apresenta a desvantagem da possibilidade de que, com o passar do tempo, a área de estabilidade fique lotada se vários objetos persistirem por muito tempo. Para minimizar o tempo de pausa quando essa situação ocorrer, utilize uma combinação da Coleta de Lixo Simultânea com a Coleta de Lixo com Base em Gerações. A opção -Xgcpolicy:gencon solicita o uso combinado dessas duas técnicas para ajudar a minimizar o tempo gasto com qualquer pausa para coleta de lixo.

### 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. Nesse ponto, a JVM gerará um arquivo de diagnóstico "javadump". 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.

# 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 uma rotina de tratamento de aplicativo para esse sinal for instalada e você não tiver especificado a opção de linha de comandos -Xnosigchain, após o término do processamento da JVM, essa rotina de tratamento será chamada.

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, se o sinal for solicitado pela JVM ou pelo aplicativo Java, ele será ignorado ou a ação padrão será executada.

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

- Trata a condição e se recupera, ou
- Insere uma seqüência de encerramento controlado em que ela:
  1. Produz um Javadump, para descrever o estado da JVM em um ponto da falha
  2. Chama a rotina de tratamento de sinais do aplicativo em razão desse sinal.
  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 especifique os ganchos acima, consulte:
http://www-106.ibm.com/developerworks/java/library/i-signalhandling/.
Esse item foi gravado para o Java V1.3.1, mais ainda se aplica a versões mais recentes.

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 são 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
--- | --- | --- | ---
SIGBUS | Exceção | Acesso incorreto à memória (alinhamento incorreto de dados) | Não
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
SIGABRT | Erro | Finalização anormal. A JVM emite esse sinal sempre que detecta uma falha da JVM. | Não
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
SIGQUIT | Controle | Um sinal de saída de um terminal. JVM uses this for taking Javadumps. | Não
SIGPIPE | Controle | Canal interrompido. Defina como SIG_IGN | 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)`, `7 (SIGBUS)`, `8 (SIGFPE)`, `11 (SIGSEGV)` e `15 (SIGTERM)` em encadeamentos da JVM fazem com que a JVM seja encerrada. Portanto, uma rotina de tratamento de sinais de aplicativo não deve tentar uma recuperação a partir desses sinais, 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 encadeamento 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 encadeamento de sinais permite que um aplicativo estabeleça um vínculo 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/j9vm -ljvm java_application.c

  ou
- Utilize a variável de ambiente 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)

  (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.

A biblioteca libjsig.so também oculta do aplicativo rotinas de tratamento de sinais da JVM. 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.

Para obter informações adicionais, consulte o site do Java da Sun: http://java.sun.com.

# 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`

# 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. Por isso, 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 que não dependam de um mínimo de 256 KB.

# 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.

##

- É 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.
- Uma chamada para JNI_CreateJavaVM() a partir de um aplicativo JNI pode gerar uma falha de segmentação (sinal SIGSEGV); para evitar essa falha, reconstrua o programa JNI especificando a opção -lpthread.
- 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.
- 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 "pt_BR.UTF-8", defina LANG para "pt_BR".
- 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.

# 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 através do correio. Observe que esse meio não foi implementado para responder perguntas técnicas - ele serve apenas para comentários sobre a documentação. Envie seus comentários:

- Por escrito para:
  Centro de Tecnologia IBM - 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 e 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 Registradas

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

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

Linux uma marca registrada da Linus Torvalds nos Estados Unidos e/ou em outros países.

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

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