¿El código de bytes será el mismo si el mismo archivo java es compilado por diferentes compiladores de Java? No se realizan cambios en el archivo Java de origen.¿Compilar el mismo código usando diferentes JDKs dará como resultado el mismo código de bytes?
Respuesta
Sí, pero: puede experimentar problemas si utiliza paquetes como com.sun
etc., porque son propietarios.
Además, hace un tiempo tropecé con Object (In | Out) putStream trabajando de manera diferente en Sun JDK e IBM JDK, sin embargo, tal vez, hice algo mal allí, así que no estoy seguro de esto.
Prueba: http://docs.oracle.com/javase/specs/ - La especificación de máquina virtual de Java, Java SE 7 Edición
Actualización: Lo siento. De hecho, no es exactamente el mismo bytecode, pero todas las JVM certificadas lo entenderán y darán el mismo resultado.
Usted habla sobre la portabilidad del código fuente, este no es el punto. – gd1
Nope. El código de bytes diferirá en qué compilador lo use, pero solo ligeramente y dentro de las especificaciones. Puede que esté equivocado, pero hasta donde yo sé, los cambios están relacionados principalmente con la optimización de javac en diferentes JDK. El código de bytes es de todos modos JVM interoperable.
Bytecode no siempre es JVM interoperable. Considere el problema del número de versión del archivo classfile. Una JVM anterior no ejecutará bytecodes con un número de versión más nuevo. –
¿No es eso en escenarios como un 1.5 JVM tratando de ejecutar el código 1.6 JDK? – Thihara
No, en absoluto.
PS .: probable que significa "JDK", no "JVM"
Es JVM específica, así como JVM reside en qué plataforma (sistema operativo). En cada caso, es algo diferente. No sé si compilar la misma fuente dos veces usando el mismo javac en el mismo jvm. ¿Alguien tiene idea?
¿El código de bytes será el mismo si el mismo archivo Java se compila en diferentes JVM? No se realizan cambios en el archivo Java de origen.
No está del todo claro qué quiere decir, pero la respuesta es muy probablemente "no".
Diferentes JDK tendrán diferentes compiladores de Java que pueden emitir diferentes códigos de bytes para el mismo código fuente. El compilador javac ha evolucionado con el tiempo.
Las diferentes versiones principales de Java a menudo emiten archivos de clase que se ajustan a las diferentes versiones de la especificación del archivo de clase.
Incluso si se limita a una instalación JDK, dos ejecuciones del compilador en el mismo archivo fuente producirán archivos .class no idénticos. (El archivo de clase incluye una marca de tiempo de compilación ...)
La única manera de que la respuesta podría ser "sí" sería si estuviera haciendo caso omiso de la marca de tiempo de compilación y (posiblemente) otros metadatos en la comparación, se Emitían códigos de bytes para la misma versión de destino, y las versiones de JDK estaban lo suficientemente cerca como para que la generación de códigos de bytes de los compiladores de Java no hubiera cambiado entre las versiones.
Un ejemplo es que el javac de IBM y el javac de Sun/Oracle tienen diferentes formas de calcular el 'serialVersionUID' Esto puede conducir a problemas de serialización si el mismo código se compila con dos compiladores diferentes. –
No, con cada nuevo JDK. En general, el compilador de Java también se actualiza para realizar algunas optimizaciones durante la compilación. El código de bytes será diferente cuando se compile con diferentes versiones de Java.
El código de bytes es producido por el compilador de Java cuales no es parte de la implementación JVM específica.El código de bytes es el nombre del lenguaje intermedio ejecutado por el motor de ejecución de una JVM, por lo que la JVM no produce sino que ejecuta este código. Lo que la JVM puede hacer es compilar el código de bytes en el código máquina, que puede diferir. Este compilador se llama compilador Just-In-Time (JIT).
Lo que puede dar lugar a diferentes códigos de bytes, sin embargo, es diferente compiladores Java - los más importantes se enumeran allí: http://en.wikipedia.org/wiki/Java_compiler
- 1. Compilar el mismo archivo con diferentes banderas usando CMAKE
- 2. Mismo código en el navegador/servidor
- 3. Ejecutando el mismo código para get (self) como post (auto)
- 4. Usando Notepad ++ para compilar el código Java
- 5. compilaciones repetibles del mismo código fuente C# en diferentes máquinas
- 6. mismo código de modificación [C++]
- 7. Mismo código fuente simple, binarios diferentes en Windows
- 8. Throw VS rethrow: ¿el mismo resultado?
- 9. Implementando 2 aplicaciones heroku diferentes con el mismo código y el repositorio git
- 10. Repite el mismo código HTML en varias páginas
- 11. ¿Cómo se produce el mismo resultado en diferentes navegadores al incrustar un archivo SVG en código HTML?
- 12. ¿Por qué C# genera diferentes EXEs para el mismo código fuente?
- 13. ¿Puedo compilar el código universal usando el GCC de Macports?
- 14. utiliza el mismo objeto de bloqueo en dos bloques de código diferentes?
- 15. ¿Cómo se ejecuta el mismo código con muchos archivos (nombre de archivo diferente en el mismo directorio) en Matlab?
- 16. Métodos de refactorización que usan el mismo código pero tipos diferentes
- 17. Diferentes VirtualHosts con el mismo puerto
- 18. Muchas plataformas, el mismo código base, la mejor estrategia?
- 19. ¿Qué sucede si dos objetos diferentes tienen el mismo código hash?
- 20. Proyectos múltiples que comparten el mismo código sin referencia circular
- 21. Rails ActionController Ejecutar el mismo código para cada acción
- 22. ¿Cada máquina genera el mismo resultado de número aleatorio usando la misma semilla?
- 23. ¿Cómo ejecuto procesos de forma sincrónica, buscando el mismo resultado?
- 24. Posible tener el mismo contrato, el mismo enlace, la misma dirección, pero diferentes puertos?
- 25. C#. OpenTK mismo código que OpenGL?
- 26. ¿Cómo actualizar el mismo EditText usando TextWatcher?
- 27. Dos variables con el mismo nombre y tipo, en dos archivos .c diferentes, compilar con gcc
- 28. En Emacs, ¿cómo evitar que aparezca el mismo buffer en diferentes ventanas en el mismo marco?
- 29. Evitar escribir el mismo algoritmo en varios idiomas diferentes
- 30. python doctest: el resultado esperado es el mismo que el resultado "obtenido", pero la prueba falló
¿El código de bytes ser el mismo - No. – Ved
compilador Java producirá el código de bytes de Java no JVM – Maddy
Los compiladores toman el código fuente de Java y lo convierten en código de máquina o lo convierten en código de bytes Java. Por lo general, lo convierten en código de bytes. Las JVM toman el código Java Byte como entrada. El código de Byte que le dice a JVM qué hacer. – Maddy