Nota: antes de utilizar esta información y el producto al que da soporte, asegúrese de leer la información general que aparece en Avisos.
Esta edición de la Guía del usuario corresponde a IBM 64-bit Runtime Environment for Windows sobre arquitectura AMD64, Java 2 Technology Edition, versión 1.4.2, y a todos los releases y modificaciones siguientes hasta que se indique lo contrario en nuevas ediciones.
(c) Copyright Sun Microsystems, Inc. 1997, 2003, 901 San Antonio Rd., Palo Alto, CA 94303 USA. Reservados todos los derechos.
(c) Copyright International Business Machines Corporation, 1999, 2004. Reservados todos los derechos.
Derechos restringidos para los usuarios del Gobierno de los Estados Unidos - Su uso, duplicación o divulgación están restringidos por el GSA ADP Schedule Contract con IBM Corp.
El IBM(R) 64-bit Runtime Environment for Windows(R) sobre arquitectura AMD64, Java(TM) 2 Technology Edition, versión 1.4.2 contiene la Java Virtual Machine (JVM), clases Java de Sun Microsystems centrales y archivos de soporte. El Runtime Environment no contiene todas las clases que se encuentran en el paquete del SDK.
La Guía del usuario proporciona información general sobre el Runtime Environment e información específica sobre las diferencias en la implementación de IBM del Runtime Environment comparada con la implementación de Sun. Lea esta Guía del usuario además de la documentación más amplia que se proporciona en el sitio Web de Sun: http://java.sun.com.
El Runtime Environment recibe soporte en la Edición de 64 bits de Microsoft(R) Windows XP y en la edición de 64-bits de Windows Server 2003.
La guía IBM JVM Diagnostics Guide proporciona información más detallada sobre IBM JVM.
Tenga en cuenta que el SDK incluye el Runtime Environment para Windows, que sólo le permite ejecutar aplicaciones Java. Si ha instalado el SDK, está incluido el Runtime Environment.
Los términos "Runtime Environment" y "Java Virtual Machine" se utilizan de manera indistinta a lo largo de esta Guía del usuario.
Para obtener los números de versión y de nivel de compilación de IBM, escriba lo siguiente en el indicador de mandatos:
java -version
La herramienta java inicia una aplicación Java. Requiere como parámetro un nombre de clase inicial Java. Si no lo proporciona, se imprimirá un mensaje de uso.
La JVM busca la clase inicial además de otras que se utilizan en tres conjuntos de ubicaciones: la classpath de rutina de carga, las extensiones instaladas y la classpath de usuario. Los argumentos que van después del nombre de clase o nombre de archivo JAR se pasan a la función principal.
El mandato javaw es idéntico a java, excepto que javaw no tiene una ventana de consola asociada.Utilice javaw si no desea que aparezca una ventana indicadora de mandatos. El iniciador javaw muestra un recuadro de diálogo con información de error si se produce una anomalía durante el inicio.
Los mandatos java y javaw tienen la sintaxis siguiente:
java [ opciones ] clase [ argumentos ... ] java [ opciones ] -jar archivo.jar [ argumentos ... ] javaw [ opciones ] clase [ argumentos ... ] javaw [ opciones ] -jar archivo.jar [ argumentos ... ]
Los elementos que aparecen entre corchetes son opcionales.
Si se especifica la opción -jar, el archivo JAR especificado contiene los archivos de clases y recursos de la aplicación, con la clase de arranque indicada mediante la cabecera de manifiesto Main-Class (clase principal).
El iniciador tiene un conjunto de opciones estándar a las que el Runtime Environment da soporte actualmente y en releases futuros. Además, existe un conjunto de opciones no estándar.
Las opciones -X enumeradas a continuación son no estándar y están sujetas a cambios sin previo aviso.
El mandato java y otros mandatos del iniciador java (como javaw) permiten especificar un nombre de clase con cualquier carácter Unicode que esté en el juego de caracteres del entorno local actual.
También puede especificar cualquier carácter Unicode en el nombre de clase y argumentos utilizando secuencias de escape java. Para hacerlo, debe especificar -Xargencoding. Para especificar un carácter Unicode, utilice secuencias de escape con el formato \u####, donde # es un dígito hexadecimal (0 a 9, A a F).
De modo alternativo, para especificar que el nombre de clase y los argumentos del mandato están en código UTF8, utilice -Xargencoding:utf8, o bien, en código ISO8859_1 utilice -Xargencoding:latin.
Los mandatos java y javaw proporcionan mensajes de salida traducidos. Estos mensajes difieren según el entorno local en que se ejecute Java. Las descripciones de error detalladas y otra información de depuración devuelta por java está en inglés.
Para especificar un nombre de clase con el nombre de archivo completo, incluya la vía de acceso completa y la extensión .class. En versiones anteriores, podía especificar sólo la clase que era relativa a la CLASSPATH y no se permitía la extensión .class. La utilización del nombre de archivo completo permite iniciar una aplicación java desde el escritorio o iniciador de archivos. Si especifica un archivo .class con vía de acceso y extensión, la vía de acceso especificada se sitúa dentro de la CLASSPATH. Por ejemplo, el mandato java c:\miapli\estaapli.class equivale a especificar java -classpath c:\miapli estaapli.
Para establecer que se ejecute automáticamente una clase java o un archivo jar desde el archivo utilice la opción Herramientas->Opciones de carpeta->Tipos de archivo del Explorador de Windows. De forma alternativa, escriba en el indicador de mandatos:
assoc .class=javaclass ftype javaclass=C:\Archivos de programa\IBM\Java142\jre\bin\java.exe %l %*
La opción -Xgcpolicy de ejecución de la JVM especifica la política de recopilación de desechos.
-Xgcpolicy toma los valores optthruput (el valor por omisión), optavgpause o gencon. La opción controla el comportamiento del recopilador de desechos, realizando intercambios entre la salida de la aplicación y el sistema en general y los tiempos de pausa provocados por la recopilación de desechos.
El formato de la opción y sus valores son:
-Xgcpolicy:optthruput
-Xgcpolicy:optavgpause
-Xgcpolicy:gencon
Cuando un intento de una aplicación de crear un objeto no se puede cumplir inmediatamente con el espacio disponible en el almacenamiento dinámico, corresponde al recopilador de desechos identificar los objetos sin referencia (desechos), suprimirlos y devolver el almacenamiento dinámico a un estado en el que las peticiones de asignación inmediatas y posteriores se puedan satisfacer rápidamente. Estos ciclos de recopilación de desechos provocan pausas inesperadas ocasionales en la ejecución del código de la aplicación. Como el tamaño y la complejidad de las aplicaciones aumenta y los almacenamientos dinámicos crecen en consecuencia, este tiempo de pausa de recopilación de desechos tiende a aumentar en duración e importancia. El valor por omisión de la recopilación de desechos, optthruput, proporciona una salida muy alta para las aplicaciones, pero al coste de estas pausas ocasionales, que pueden variar de unos pocos milisegundos a varios segundos, en función del tamaño del almacenamiento dinámico y la cantidad de desechos.
La JVM utiliza dos técnicas para reducir los tiempos de pausa:
La opción de línea de mandatos -Xgcpolicy:optavgpause solicita el uso de la recopilación de desechos simultánea para reducir notablemente el tiempo invertido en las pausas de recopilación de desechos. La recopilación de desechos simultánea reduce el tiempo de pausa realizando algunas actividades de recopilación de desechos durante la ejecución normal del programa para minimizar los trastornos provocados por la recopilación del almacenamiento dinámico. La opción -Xgcpolicy:optavgpause también limita el efecto de aumento de tamaño de almacenamiento dinámico en lo que dura la pausa de recopilación de desechos. La opción -Xgcpolicy:optavgpause resulta de mayor utilidad para configuraciones que tienen grandes almacenamientos dinámicos. Con el tiempo de pausa reducido, podría experimentar alguna reducción de la salida a las aplicaciones.
Durante la recopilación de desechos simultánea se invierte una cantidad de tiempo considerable en identificar los objetos de una relativa larga duración que no se pueden recopilar. Si la recopilación de desechos se centra en objetos que muy probablemente sean reciclables, puede reducir aún más los tiempos de pausa de algunas aplicaciones. La recopilación de desechos generacional consigue ésto dividiendo el almacenamiento dinámico en dos "generaciones", las áreas: "guardería" y "permanente". Los objetos se colocan en una de estas áreas en función de su antigüedad. La guardería es la más pequeña de las dos y contiene objetos con menos antigüedad; el área permanente es mayor y contiene objetos con más antigüedad. Primero se asignan los objetos a la guardería; si duran lo suficiente el sistema solicita pasarlos finalmente al área permanente.
La recopilación de desechos generacional depende de la mayoría de los objetos que no duran mucho. Este tipo de recopilación reduce los tiempos de pausa centrando el esfuerzo para recuperar el almacenamiento en la guardería porque tiene el espacio más reciclable. En lugar de utilizar tiempos de pausa esporádicos pero prolongados para recopilar el almacenamiento dinámico completo, se recopila con más frecuencia la guardería y, si dicho ésta es lo suficientemente pequeña, los tiempos de pausa son comparativamente breves. No obstante, la recopilación de desechos generacional tiene el inconveniente de que con el tiempo podría llenarse el área permanente si hay demasiados objetos de larga duración. Para minimizar el tiempo de pausa cuando se produce esta situación, utilice una combinación de las recopilaciones de desechos simultánea y generacional. La opción -Xgcpolicy:gencon solicita el uso combinado de la recopilación de desechos simultánea y generacional para ayudar a minimizar el tiempo que se invierte en las pausas de recopilación de desechos.
Si el almacenamiento dinámico de Java está casi lleno y hay muy pocos desechos que recopilar, es posible que las peticiones de objetos nuevos no se puedan satisfacer rápidamente ya que no hay espacio disponible inmediatamente. Si se trabaja con un almacenamiento dinámico casi lleno, el rendimiento de las aplicaciones puede resentirse sin importar cuál de las opciones anteriores se usa y, si se siguen realizando peticiones de más espacio de almacenamiento dinámico, la aplicación recibe una excepción OutofMemory, que provoca la interrupción de la JVM si esta excepción no se detecta y gestiona. En este punto, la JVM producirá un archivo de diagnóstico "javadump". En estas condiciones, se recomienda incrementar el tamaño del almacenamiento dinámico mediante la opción -Xmx o reducir el número de objetos de aplicación en uso.
El compilador JIT (just-in-time) (jitc.dll) genera dinámicamente el código máquina utilizado con frecuencia por secuencias de código de bytes en aplicaciones o applets Java mientras se están ejecutando.
Runtime Environment para Windows incluye el JIT (jitc.dll), que, por omisión, está habilitado. Es posible inhabilitar el JIT para contribuir a aislar un problema con una aplicación Java, un applet o el mismo compilador.
Para inhabilitar el JIT, utilice la opción -Xint. En la ventana del indicador de mandatos del donde se ejecuta la aplicación, escriba:
java -Xint class
Para verificar si el JIT está habilitado o no, escriba lo siguiente en el indicador de mandatos:
java -version
Si el JIT se está utilizando, aparece un mensaje que incluye lo siguiente:
(JIT enabled)
Si el JIT no se está utilizando, aparece un mensaje que incluye:
(JIT disabled)
La agrupación de hebras para manejadores de conexiones para RMI no está habilitada por omisión.
Para habilitar la agrupación de conexiones implementada a nivel TCPTransport de RMI, establezca la opción
-Dsun.rmi.transport.tcp.connectionPool=true (o cualquier valor no nulo)
Esta versión del Runtime Environment no tiene ningún valor que pueda utilizarse para limitar el número de hebras en la agrupación de conexiones.
Para obtener más información, consulte el sitio de Java de Sun: http://java.sun.com.
Cuando se activa una señal que resulta interesante para la JVM, se llama a un manejador de señales. Este manejador de señales determina si ha sido llamado por una hebra Java o no Java.
Si la señal es de una hebra Java, la JVM toma el control del manejo de la señal. Si se instala un manejador de aplicaciones para este señal y no se ha especificado la opción de línea de mandatos -Xnosigchain, después de que la JVM ha terminado el proceso, se llamará al manejador de aplicaciones para esta señal.
Si la señal es de una hebra no Java y la aplicación que ha instalado la JVM ha instalado previamente su propio manejador de señales, se pasa el control a ese manejador. En otro caso, si la JVM o la aplicación Java solicitan la señal, o bien, se ignora la señal o se lleva a cabo la acción por omisión.
La excepción a esta regla se produce en Windows, donde se crea una nueva hebra por cada señal generada externamente (por ejemplo, al pulsar Control-Inter) para ejecutar el manejador de señales. En este caso, el manejador de señales de la JVM realiza su proceso y si se instala un manejador de aplicaciones para este señal y no ha especificado la opción de línea de mandatos -Xnosigchain, se llamará al manejador de aplicaciones para esta señal.
Para señales de excepción y de error la JVM:
En el caso de las señales de interrupción, la JVM también entra en una secuencia de conclusión controlada, pero esta vez se trata como una terminación normal que:
La conclusión es idéntica a la conclusión iniciada por una llamada al método Java System.exit().
Otras señales utilizadas por la JVM son para temas de control interno y no hacen que termine. La única señal de control interesante es SIGBREAK, que hace que se genere un Javadump.
La Tabla 1 siguiente muestra las señales utilizadas por la JVM. Las señales se agrupan en la tabla por tipo o utilización, de la forma siguiente:
Nombre de señal | Tipo de señal | Descripción | Inhabilitada por -Xrs |
---|---|---|---|
SIGSEGV | Excepción | Acceso incorrecto a la memoria (escritura en memoria inaccesible) | No |
SIGILL | Excepción | Instrucción no permitida (intento de invocar una instrucción de máquina desconocida) | No |
SIGFPE | Excepción | Excepción de coma flotante (división por cero) | No |
SIGABRT | Error | Terminación anormal. La JVM lanza esta señal cada vez que detecta una anomalía en la JVM. | No |
SIGINT | Interrupción | Atención interactiva (Control-C). La JVM sale normalmente. | Sí |
SIGTERM | Interrupción | Petición de terminación. La JVM saldrá normalmente. | Sí |
SIGBREAK | Control | Señal de interrupción procedente de un terminal. La JVM utiliza esto para tomar Javadumps. | No |
Utilice la opción -Xrs (reducir el uso de señales) para evitar que la JVM maneje la mayoría de señales. Para obtener más información, consulte la página del iniciador de aplicaciones de Java de Sun en http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html.
Las señales 2 (SIGINT), 4 (SIGILL), 6 (SIGABRT), 8 (SIGFPE) y 11 (SIGSEGV) en hebras de JVM provocan que concluya la JVM; por lo tanto, un manejador de señales de la aplicación no debería intentar recuperarse de estas situaciones a menos que ya no necesite los servicios de la JVM.
El Runtime Environment contiene un encadenamiento de señales. El encadenamiento de señales permite a la JVM interoperar de forma más eficaz con el código nativo que instala sus propios manejadores de señales.
El encadenamiento de señales permite a la aplicación enlazar y cargar la biblioteca compartida jsig.dll antes de msvcrt.dll. La biblioteca jsig.dll garantiza que las llamadas a signal() sean interceptadas para que sus manejadores no sustituyan a los manejadores de señales de la JVM. En su lugar, estas llamadas guardan los nuevos manejadores de señales o los "encadenan" detrás de los manejadores instalados por la JVM. Más tarde, cuando se lance alguna de estas señales y se determine que no está destinada a la JVM, se invocarán los manejadores preinstalados.
Para utilizar jsig.dll, enlácela con la aplicación que crea o incorpora la JVM.
Cuando trabaje con un editor de métodos de entrada (IME), se recomienda que complete la composición de caracteres y que seleccione el candidato antes de utilizar el espacio de trabajo para cualquier otra operación.
Los usuarios de chino tradicional no deberán dirigir la salida de aplicaciones Java directamente al mandato more. En su lugar, deben dirigir la salida hacia un archivo temporal y después examinar el archivo por separado.
Si tiene algún comentario acerca de la utilidad, o no utilidad, de esta Guía del usuario, estaremos encantados de conocer su opinión a través de uno de estos canales. Tenga en cuenta que estos canales no están destinados a responder consultas técnicas, sólo son para comentarios acerca de documentación. Envíe sus comentarios:
La letra pequeña. Si elige enviar un mensaje a IBM, acepta que toda la información contenida en su mensaje, incluidos los datos de respuesta, como preguntas, comentarios, sugerencias, etc., se considerarán no confidenciales e IBM no tendrá ningún tipo de obligación sobre dicha información y será libre de reproducir, utilizar, revelar y distribuir la información a otros sin limitaciones. Además, IBM será libre de utilizar cualquier idea, concepto, conocimiento o técnica contenido en dicha información para cualquier tipo de propósito, incluyendo, pero sin limitarse al desarrollo, fabricación y marketing de productos que incluyan dicha información.
Esta información se ha desarrollado para productos y servicios que se ofrecen en los EE.UU. IBM puede que no ofrezca los productos, servicios o características que se discuten en este documento en otros países. Consulte con el representante de IBM de su localidad para obtener información sobre los productos y servicios que están disponibles actualmente en su zona. Cualquier referencia a un producto, programa o servicio de IBM no pretende afirmar ni implica que sólo se pueda utilizar dicho producto, programa o servicio de IBM. En su lugar, puede utilizarse cualquier producto, programa o servicio funcionalmente equivalente que no infrinja ninguno de los derechos de propiedad intelectual de IBM. Sin embargo, la evaluación y la verificación del funcionamiento conjuntamente con otros productos, programas o servicios que no son de IBM es responsabilidad del usuario.
IBM puede tener patentes o solicitudes pendientes de patente que cubran temas que se tratan en este documento. La posesión de este documento no le otorga ninguna licencia sobre estas patentes. Puede hacer consultas sobre licencias, escribiendo a:
Para hacer consultas sobre licencias relativas a la información de doble byte (DBCS), póngase en contacto con el Departamento de propiedad intelectual de IBM en su país o envíe sus consultas por escrito a:
El párrafo siguiente no se aplica en el Reino Unido ni en ningún país en que tales disposiciones entren en contradicción con la legislación local:
INTERNATIONAL BUSINESS MACHINES CORPORATION PROPORCIONA ESTA PUBLICACIÓN "TAL CUAL" SIN GARANTÍAS DE NINGÚN TIPO, NI EXPLÍCITAS NI IMPLÍCITAS, INCLUYENDO PERO NO LIMITÁNDOSE A ELLAS, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN O DE ADECUACIÓN A UN PROPÓSITO DETERMINADO. Algunos países no permiten la renuncia a las garantías explícitas o implícitas en determinadas transacciones; por lo que el párrafo anterior puede que no se aplique en su caso.
Esta publicación puede contener incorrecciones técnicas o errores tipográficos. Periódicamente se realizarán modificaciones en la información aquí contenida; dichos cambios se incorporarán en nuevas ediciones de la publicación. IBM puede efectuar en cualquier momento mejoras y/o cambios en los productos y/o programas que se describen en esta publicación sin previo aviso.
Las referencias hechas en esta publicación a sitios Web que no son de IBM se proporcionan únicamente por cortesía y de ningún modo deben interpretarse como un respaldo público de dichos sitios Web. Los materiales de estos sitios Web no forman parte de los materiales de IBM para este producto y el uso que se haga de estos sitios Web es de la entera responsabilidad del usuario.
IBM puede utilizar o distribuir la información que se le suministra de la forma en que lo crea conveniente sin que incurra por ello en ninguna obligación con usted.
Los usuarios que dispongan de licencias para este programa y que deseen tener información sobre el mismo con el propósito de poder: (i) intercambiar información entre programas creados de forma independiente y otros programas (incluido éste) y (ii) utilizar mutuamente la información que se ha intercambiado, deben ponerse en contacto con:
Dicha información puede estar disponible, sujeta a los términos y condiciones adecuados, incluido en algunos casos, el pago de una tasa.
El programa bajo licencia que se describe en este documento y todo el material bajo licencia disponible para él lo facilita IBM en los términos descritos en IBM Customer Agreement, en IBM International Program License Agreement o en cualquier otro contrato equivalente entre las partes.
Los datos de rendimiento que se hallan en esta publicación se han determinado en un entorno controlado. Por tanto, los resultados que se obtengan en otros sistemas operativos pueden diferir considerablemente. Es posible que algunas medidas se hayan tomado en sistemas de nivel de desarrollo y no hay garantías de que estas medidas serán iguales en los sistemas habitualmente disponibles. Además, es posible que algunas de las medidas se hayan estimado por medio de extrapolaciones. Es posible que los resultados reales varíen. Los usuarios de este documento deben comprobar los datos que son de aplicación para su entorno en concreto.
La información relativa a productos que no son de IBM se ha obtenido de los proveedores de esos productos, de los anuncios publicados por los mismos o de otras fuentes a disposición del público. IBM no ha probado esos productos y no puede confirmar la precisión del rendimiento, su compatibilidad o cualquier otra afirmación relacionada con productos que no son de IBM. Las preguntas sobre las posibilidades de los productos que no son de IBM deben dirigirse a los proveedores de dichos productos.
IBM es una marca registrada de International Business Machines Corporation en los Estados Unidos y/o en otros países.
Java y todas las marcas y logotipos basados en Java son marcas comerciales o marcas registradas de Sun Microsystems, Inc. en los Estados Unidos y/o en otros países.
Microsoft, Windows, Windows NT y el logotipo de Windows son marcas registradas de Microsoft Corporation en los Estados Unidos y/o en otros países.
Otros nombres de empresas, productos o servicios pueden ser marcas registradas o de servicio de otros.
Este producto incluye software desarrollado por Apache Software Foundation http://www.apache.org/.