2009-09-05 42 views
19

si implementamos el intérprete de Java en el hardware, entonces, ¿cómo podemos lograr la neutralidad de la arquitectura del bytecode de java ... ¿Java usa JIT (intérprete Justo a tiempo)? y cómo todo esto se relaciona con el concepto de máquina virtual del sistema operativo y la máquina virtual de Java (JVM)¿podemos implementar un intérprete de Java en hardware que ejecute códigos byte Java de forma nativa?

+1

Lista de implementación: https://en.wikipedia.org/wiki/Java_processor –

Respuesta

10

Ya ha habido varias implementaciones de hardware del sistema Java (es decir, una CPU que puede ejecutar bytecodes) pero no se han convertido en la corriente principal. Esto es más probable porque las implementaciones de software funcionan tan bien o incluso mejor ya que las CPU se han vuelto más y más rápidas.

Como encontrará al investigar más a fondo, los detalles de las implementaciones de JVM no son tan importantes (y varían bastante) pero todos ejecutan el lenguaje de máquina del código JVM - byte java. Si te mantienes dentro del mundo de Java y no lo vinculas con elementos "nativos", deberías estar bien con la implementación que elijas.

Esta empresa se gana la vida de proporcionar sistemas de servidores sintonizados para los programas de Java, puede ser que le interesan: http://www.azulsystems.com/

+0

una pregunta rápida, sin embargo, ¿qué configuración debe tener un dispositivo para ejecutar la versión de software de jvm? – inquisitive

+1

@Inquisitive Alguien debe haber hecho una JVM disponible para ese dispositivo. La configuración debe cumplir los requisitos para la JVM. –

+1

Aquí en 2017 las CPU han dejado de ser cada vez más rápidas. En cambio, las JVM de software usan mucha más memoria para mantener la información de creación de perfiles que el JIT puede usar para crear código de máquina extremadamente optimizado donde sea importante. Las implementaciones de hardware generalmente no tienen esa opción, por lo que no se pueden optimizar tanto. Dado un hardware idéntico, la solución de software gana. –

3
  • La implementación de la JVM en el hardware ignora la ventaja de ejecutar código administrado. Qué diferente sería entonces de cualquier otro código nativo. Y sí, la neutralidad de la plataforma también se ve obstaculizada. De todos modos, hay tales implementaciones, echa un vistazo a la serie de procesadores aJile y Jazelle de ARM. Sin embargo, están destinados a plataformas integradas.
  • El compilador de Sun, HotSpot usa JIT. Personalmente no he usado otros, pero debería ser una tecnología muy utilizada.
  • JVM se puede considerar como una máquina virtual de recursos limitados, dirigida solo a una plataforma específica (el bytecode de Java).
+0

que significa virtualización de java (¿o podemos llamarlo jre?) Es diferente de la virtualización del sistema operativo ... ¿estoy en lo cierto? – paragjain

+0

La virtualización, como he entendido, es la simulación de hardware que usa software. La aplicación invitada (aplicaciones Java o sistemas operativos) ve la VM como simplemente otra computadora y usa código nativo para interactuar con ella.Por otro lado, la VM entiende el código máquina nativo, interpreta lo que la aplicación está solicitando y luego lleva a cabo las acciones en sí, siempre que existan las autorizaciones y permisos necesarios. Por lo tanto, según esta definición, la virtualización de aplicaciones java o sistema operativo es similar, es el rango de operaciones proporcionadas al invitado y el poder de la máquina virtual que difiere. – Chintan

+0

virtualización se refiere a cambiar una máquina física completa en un programa que se ejecuta en otra máquina física –

6

Sí, puede hacerlo. Aunque parece que está bloqueado en la etapa de especificación (o se abandonó), picoJava permite la ejecución nativa de bytecode de Java. picoJava has a port available on a FPGA. Hay Jazelle, también para procesadores ARM.

Dado que el hardware ejecutaría directamente bytecode, todas las optimizaciones también tendrían que hacerse en hardware. No se necesitaría JIT, ya que el procesador ejecutará bytecode directamente. Después de todo, cualquier implementación de hardware implicaría implementar el modelo de JVM como se define en el Java Virtual Machine Specification. Las optimizaciones que se pueden realizar estarán en las líneas de optimizaciones de hardware: canalización de instrucciones, uso de cachés, etc.

La neutralidad del hardware no se pierde, ya que el bytecode que se ejecuta en una implementación de hardware continuaría funcionando en una implementación de software como bien. Es el estándar de bytecode que permite que Java sea hardware neutro.

+0

Agradable para señalar que "La neutralidad del hardware no se pierde, ya que el bytecode que se ejecuta en una implementación de hardware también continuará trabajando en una implementación de software. Es el estándar de bytecode que permite que Java sea hardware neutro". –

6

Sí, hay varias implementaciones de Java hardware. Sin embargo, no siempre funcionan mejor que el software que se ejecuta en silicio de uso más general.

Mark Lam ha escrito several interesting blogs entries sobre este tema.

+0

Uno de los problemas subyacentes sería que las optimizaciones de software pueden ser 'parcheadas'. El hardware no puede. –

+1

Incluso si la ejecución ocurre en hardware, no hay nada que impida que la JVM de hardware haga las optimizaciones que desee. La máquina tiene RAM y todo :) –

+4

En realidad, es literalmente imposible que el software sea más rápido que el hardware. Si el hardware es más lento, significa que está subdesarrollado. Por ejemplo, si Hotspot JIT es más rápido que una implementación de hardware de Java, simplemente puede mover el Hotspot JIT al hardware, que seguramente será más rápido que el existente. Pero en cualquier caso, dudo que JIT sea la forma más rápida de implementar JVM en hardware. @Vineet: 1. Todo lo que se puede hacer en el software se puede hacer en hardware. 2. x86 realiza optimizaciones rigurosas a nivel de hardware. –