Componentes de Java SE

Componentes Java SE

La Plataforma Java SE tiene dos productos, la JRE y el JDK. En esta sección nos enfocaremos en explicar todos los componentes principales dentro de la JRE y el JDK para entender como funciona Java SE. En el siguiente diagrama, podemos visualizar aproximadamente como esos componentes están estructurados. (Para obtener el diagrama completo, podemos ver el mismo en la documentación oficial)

Diagrama Conceptual

Ahora explicaremos estos conceptos desde afuera hacia adentro, empezando por el JDK y finalizando en la JVM.

Java Development Kit

Contiene los compiladores y depuradores para desplegar applets y aplicaciones y es un superconjunto de la JRE. Como desarrolladores, nosotros instalamos la JDK para desarrollar y desplegamos aplicaciones. La JDK contiene principalmente:

  • La JRE (Java Runtime Environment)
  • El Lenguaje Java (sobre el que hablamos en el artículo Beneficios de Java)
  • Tools y Tool APIs, la mayoría de estos son comandos como java, javac, jar, keytool, y muchos otros. Estos comandos son utilizados para crear y construir aplicaciones, asignar políticas de seguridad en el sistema. (Para mayor información sobre estás herramientas podemos leer la documentación oficial)

Java Runtime Environment

Proporciona librerias, la JVM (Java Virtual Machine), la API de Java SE y otros componentes que ejecutan applets y aplicaciones. Esos componentes incluyen:

  • Despliegue: contiene la Java Web Start y el Plug-int Applet/Java.
  • Kit de Herramientas de Intefaz de Usuario: contiene Java FX

Java Virtual Machine

Como hemos mencionado en el artículo Beneficios de Java, una de las características de Java es WORA (Write once, run anywhere), esta característica es gracias a la JVM (Java Virtual Machine). Esta tiene dos funciones principales:

  • Permitir a los programas Java ejecutarse en cualquier dispositivo o sistema operativo.
  • Gestionar y optimizar la memoria del programa, una actividad que realiza con la ayuda del Garbage Collection.

La Java Virtual Machine tiene varios aspectos importantes, pero solo vamos a hablar sobre dos:

  • Especificación: Esto significa, una VM (Maquina Virtual) para ser una JVM solo necesita cumplir con la especificación

    ser capaz de leer el archivo con formato .class y ejecutar las operaciones especificadas en el mismo correctamente.

    Esto suena simple, pero una JVM necesita crear un entorno correcto para ejecutar una clase Java en un hardware específico, Sistema Operativo, o la combinación de ambos.
  • Implementación: Ya que la JVM es una especificación, hay multiples implementación de ella, con el mismo objetivo (ejecutar aplicaciones Java) pero optimizadas para diferentes necesidades (hardware, software). Usualmente nosotros instalamos la JVM Oracle HotSpot, que es la que viene incluida en el Oracle JDK, pero existen otras implementaciones de la JVM, como por ejemplo Elipse OpenJ9, GraalVM o Zulu (una JVM creada por Azul Systems optimizada para embebidos).

API de Java SE

Podemos definir la API de Java SE como un conjunto de todos los paquetes, clases, interfaces, y elementos que componen a Java como un lenguade de programación, todos esos elementos que nosotros utilizamos para programar con el. Java tiene una de las mejores documentaciones, se puede ver una definición completa de cada elemento, que incluye descripción, índice de constructores y métodos con sus detalles, listado de métodos heredados, y algunas veces pequeños ejemplos que muestran como utilizar dicho elemento. Podemos revisar la documentación oficial aquí, realmente les recomiendo que guarden el link en sus marcadores, les será de mucha utilidad.

La API de Java SE está dividida dentro de las siguientes categorías:

  • Librerías Base (lang, util): Aquí se encuentran los elementos básicos de la Plataforma Java, como clases wrapper para los tipos de datos primitivos, clases fundamentales, la librería Math, la API Collections, Reflection, Concurrency y muchas otras. Todos los elementos dentro de los paquetes java.lang y java.util. Podemos leer la guía oficial o la lista entera de paquetes.
  • Otras Librerías Base: Incluye otras librerías importantes como I/O, Object Serialization, Networking, Security, JNI (Java Native Interface), Internationalization y otras. Aquí se incluyen paquetes como java.io, java.nio, java.net, javax.net. Lee la documentación oficial para obtener más información.
  • Librerías de Integración: La mayoría de las aplicaciones necesitan interactuar con otros elementos fuera de ellas o otro tipo de elementos diferentes a ellas. Para poder realizar esto utilizamos las librerías de integración, como JDBC (Java Database Connectivity), RMI (Remote Method Invocation), CORBA (Common Object Request Broker Architecture), y otras. Lee más en la documentación oficial.
  • Kits de Herramientas de Interfaz de Usuarios: Como su nombre lo indica, son librerías relacionadas con al interacción de los usuarios, como gráficos y sonidos, con la excepción de Java FX. Aquí se incluyen librerías como AWT, Swing, Java 2D, Sound. También podemos informarnos más leyendo la documentación oficial.

Compact Profiles

En Java 8 fueron introducidos los Compact Profiles, que pueden definirse como un subconjunto de la API de Java SE que tienen el poder de reducir el tamaño estático de la JRE en dispositivos con una capacidad de almacenamiento limitada, reduciendo el footprint de memoria para aplicaciones que no requieren toda la API de Java. Por el otro lado, podemos agrupar la configuración de la JRE con un Compact Profile también.

Tenemos tres compact profiles, que son capas aditivas, esto significa que cada profile contiene al profile anterior (una verión más pequeña), terminando en la API de Java SE que contiene todos los compact profiles, como podemos ver en el siguiente diagrama.

Compact Profiles

Cada compact profile está definido por las siguientes APIs:

  • compact1: Este es el más pequeño, el primero de los compact profiles. Posee la mayoría de las librerías base (lang y util), incluye todo el paquete java.lang, Math, Collections, Ref Object, Regular Expressions, Logging, Concurrency Utilities, Reflection, Versioning, JAR, ZIP. De las otras librerías base contiene Security, Serialization, Extension Mechanism, Override Mechanism, Networking, Date and Time, I/O , Internationalization. Finalmente del grupo de librerías de integración contiene JNDI y Scripting.
  • compact2: Ya que los compact profiles son capas aditivias, este contiene el compact1, de las otras librerias base XML y JAXP, del grupo de librerías de integración contiene JDBC y RMI.
  • compact3: Contiene compact2, que a su vez contiene compact1, pero adicionamos Management e Instrumentation de las librerías base (lang y util), y del grupo de otras librerias base JMX.
  • API de Java SE: Finalmente aquí vamos a incluir todos los compact profiles, adicional Preferences API de las librerias base (lang y util). Beans y JNI del grupo de otras librerias base. IDL y RMI-IIOP de las librerias de integración. Todos los kits de herramientas de interfaz de usuario.

Podemos profundizar en todos los detalles de los compact profiles en la documentación oficial.

Tags
Java SE 8
Comparte este artículo