Diagrama de temas

    • Apertura: miércoles, 8 de junio de 2022, 00:00

      jamVM

      JamVM

      La última versión es JamVM 2.0.0, lanzado el 30 de julio de 2014. Ver el liberar notas para los cambios desde 1.5.4.

      JamVM es una máquina virtual Java de código abierto que tiene como objetivo admitir el última versión de la especificación JVM, mientras que al mismo tiempo compacto y fácil de entender.

      Puede descargar la última versión de JamVM desde el descargar área o echa un vistazo al proyecto página de resumen. Esto contiene enlaces a los foros públicos e instalaciones para errores informes y solicitudes de características.

      Agradezco los comentarios de cualquier tipo, por ejemplo, informes de errores, sugerencias, etc. Siempre soy interesado en escuchar cómo y si las personas están usando JamVM, incluso si no lo tiene un problema envíeme un correo electrónico (dirección de correo electrónico en la parte inferior).

      Bibliotecas de Clase

      JamVM debe usarse junto con una biblioteca de clases Java para hacer un entorno completo de Java Runtime. Las bibliotecas de clases compatibles son GNU Classpath o la biblioteca de clases de OpenJDK.

      Classpath GNU

      GNU Classpath es una reimplementación de Java impulsada por la comunidad bibliotecas de clases. Durante muchos años fue la única biblioteca apoyada por JamVM. Desde el open-sourcing de Java, desarrollo de GNU Classpath se ha ralentizado, pero todavía está activo y mantenido. El último lanzamiento es 0.99, lanzado el 16 de marzo de 2012.

      Cuando se configura para GNU Classpath, JamVM proporciona una biblioteca compartida (libjvm.so) para su uso con la API de invocación JNI, y una independiente ejecutable (jamvm) para ejecutar programas Java.

      GNU Classpath es principalmente compatible con Java 1.5, con algunas API de Java 1.6. Aunque JamVM es compatible con Java 7 y Java 8, estas características están deshabilitadas cuando se usa con GNU Classpath. GNU Classpath, sin embargo, es mucho más pequeño que OpenJDK, lo que lo hace adecuado para sistemas integrados.

      De forma predeterminada, si no se especifica ninguna biblioteca de clases al configurar JamVM, JamVM está diseñado para usar GNU Classpath.

      OpenJDK/IcedTea

      OpenJDK es la implementación oficial de código abierto del resultado de JDK del open-sourcing de Java en 2007. Consiste en una biblioteca de clases, una máquina virtual (HotSpot) y un compilador java (más otras herramientas).

      JamVM es compatible con la biblioteca de clases de OpenJDK 6, 7 y 8 (el último). Cuando se configura para su uso con OpenJDK, JamVM proporciona un biblioteca compartida (libjvm.so) que se puede utilizar para reemplazar el libjvm.so contiene HotSpot. Se utiliza el lanzador OpenJDK existente (java), que ahora ejecuta JamVM.

      IcedTea es un arnés de construcción para OpenJDK que inicialmente reemplazó el gravado partes de OpenJDK con componentes gratuitos. Además de HotSpot, IcedTea también empaqueta y admite máquinas virtuales alternativas como JamVM. A use JamVM, la opción -jamvm se da en la línea de comandos java. Esto dirige el lanzador para cargar el libjvm.so desde el directorio jamvm en su lugar que el servidor estándar o el directorio del cliente.

      La forma más fácil de obtener OpenJDK/IcedTea es instalar un paquete preconstruido para su sistema. A continuación, puede reemplazar HotSpot o la biblioteca JamVM existente con la biblioteca que has construido.

      Plataformas/Arquitecturas Apoyadas

      JamVM ha sido escrito para un sistema compatible con Unix/Posix. Desafortunadamente, todavía existen incompatibilidades entre Unixes, y JamVM necesita usar varias llamadas no portátiles (principalmente relacionadas con el roscado). Además, algo de arquitectura se requieren definiciones específicas (barreras de memoria, etc.). Finalmente, el la convención de llamadas nativas (o ABI) es tanto plataforma como arquitectura dependiente. JamVM necesita esto al construir una trama de llamada para invocar un método nativo. Para la mayoría de las plataformas/arquitecturas esto es proporcionado por ensamblador nativo escrito a mano altamente eficiente, aunque también es libffi compatible con todas las plataformas (especificado por --with-libffi al configurar). Libffi es menos eficiente que el ensamblador escrito a mano, aunque reciente las versiones de JamVM también incluyen trozos para firmas de métodos comunes.

      Las siguientes plataformas/arquitecturas se reconocen configurando. Esos marcado con * debe estar configurado para usar libffi.

      • Linux: x86, x86_64, ARM, PowerPC, PowerPC64(*), MIPS, HPPA
      • FreeBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)
      • OpenBSD: x86, x86_64, ARM, PowerPC, PowerPC64(*), SPARC(*)
      • Mac OS X/Darwin: x86, x86_64, ARM, PowerPC, PowerPC64
      • Solaris/OpenSolaris: x86, x86_64
      • KFreeBSD: x86

      JamVM "Características"

      Para aquellos interesados en el diseño de máquinas virtuales, JamVM incluye un número de optimizaciones para mejorar la velocidad y reducir la huella. Una lista, en no orden particular, se da a continuación.

      • El motor de ejecución admite muchos niveles de optimización desde conmutado básico intérprete a intérprete subproceso en línea con almacenamiento en caché de pila (equivalente rendimiento a un JIT simple).
      • Utiliza roscas nativas ( roscas de posix ). Implementación completa del hilo incluyendo Thread.interrupt()
      • Las referencias de objetos son punteros directos ( i.e. sin mangos )
      • Admite cargadores de clase
      • Cerraduras finas eficientes para un bloqueo rápido en casos no contendidos ( the mayoría de bloqueo ) sin usar bloqueo de giro
      • Encabezado de dos palabras para minimizar el montón de gastos generales ( bloquear palabra y puntero de clase )
      • Recolector de basura para todo el mundo, con marca / barrido separados y marcar / comparar fases para minimizar la fragmentación del montón
      • La suspensión de rosca utiliza señales para reducir la latencia de suspensión y mejorar rendimiento ( sin comprobaciones de suspensión durante la ejecución normal )
      • Soporte completo de finalización de objetos dentro del recolector de basura ( con rosca del finalizador )
      • Soporte completo para referencias suaves / débiles / fantasmas ( con referencia Hilo del controlador )
      • Soporte completo para recolección y descarga de basura de clase y cargador de clase (incluidas las bibliotecas compartidas asociadas)
      • El colector de basura puede ejecutarse de forma síncrona o asíncrona dentro de su propio hilo
      • Las constantes de cadena dentro de los archivos de clase se almacenan en la tabla hash para minimice la sobrecarga de datos de clase (constantes de cadena compartidas entre todos clases)
      • Admite JNI y carga dinámica para su uso con bibliotecas estándar
      • Utiliza su propia interfaz nativa ligera para métodos nativos internos sin gastos generales de JNI
      • Soporte de VM para invokedynamic (JSR 292)
      • Soporte de VM para anotaciones de tipo (JSR 308)
      • Soporte de VM para expresiones lambda (JSR 335)
      • Soporte de VM para la reflexión de parámetros de método
      • JamVM está escrito en C, con una pequeña cantidad de plataforma dependiente ensamblador, y es fácilmente portátil a otras arquitecturas.

      ¡Eso es todo!

      Robert Lougher
      19 Agosto 2014.
      rob en jamvm.org.uk
      rlougher en users.sf.net