powered - ¿Es Java completamente independiente de la plataforma?
jdk java (9)
¿Es Java completamente independiente de la plataforma?
si no es así, se debe tener cuidado al ver que su código escrito en Java puede ejecutarse en multiplataformas. Básicamente, debería funcionar en plataformas específicas como Windows (varias versiones), Linux (todos los tipos), Mac y Solaris.
Aunque en la práctica, la mayoría del código de bytes compilado es independiente de la plataforma, mi experiencia en mis 12 años de desarrollo en la plataforma Java me ha enseñado que todavía hay idiosincrasia de plataforma a plataforma.
Por ejemplo, al desarrollar una aplicación Java 1.4 Swing para PC y MacOSX, el comportamiento de los diálogos fue diferente si el marco principal es nulo.
Otro ejemplo podría ser trabajar con el sistema de archivos y los archivos en general. La API de Java tiene métodos para ayudar a proteger al desarrollador de las diferencias en los separadores de ruta ( /
vs /
). Cuando se escribe en un archivo, es importante usar la API FileWriter como está previsto para que los caracteres de retorno y los demás se generen correctamente para la plataforma en la que se está escribiendo.
Entonces, mientras que el lema es "escribir una vez, correr en cualquier lugar", mi experiencia ha sido para envs de producción, es escribir una vez, probar , en todas partes.
Como resultado, tener pruebas sólidas de unidad e integración puede ayudar con esto, ya que puede ejecutar esas pruebas en las distintas plataformas que desea distribuir su software.
A pesar de algunos problemas menores aquí y allá, es genial ver su código ejecutándose en Linux, Unix, Windows y MacOSX (BSD Unix) usando los mismos JARs.
Como señaló djacobson, la respuesta es un calificado "sí". En su mayor parte, los desarrolladores de Java no tienen que preocuparse por las dependencias de la plataforma. Sin embargo, es posible que tenga problemas al tratar con API que manejan las funciones tradicionales de plataforma y sistema operativo.
Cuando se trata de la E / S de archivos, por ejemplo, es fácil hacer que su plataforma de código sea dependiente al ignorar las diferencias entre los separadores de archivo / ruta entre las plataformas (es decir, usar ''/'
lugar de File.separator
).
En su mayoría, sí. Debido a que Java compila a un código de bytes que ejecuta su máquina virtual, generalmente se puede esperar que se comporte de la misma manera, independientemente del sistema que se encuentre debajo de la máquina virtual.
Sin embargo. Ni siquiera las máquinas virtuales son inmunes a los errores . Una búsqueda rápida en Google muestra lo siguiente, por ejemplo:
http://www.ibm.com/developerworks/java/library/j-diag0521.html
Las diferencias en el comportamiento pueden variar de JVM a JVM. Es de esperar que no termine con un código que dependa de cualquiera de estos casos ... pero vale la pena realizar una investigación cuidadosa para saber cuáles son las limitaciones de su infraestructura.
Hay muy pocos y deberían ser bastante obvios. como System.getProperty ("os.name") es claramente dependiente del sistema operativo o no funcionaría. El más común es System.exec (), ya que llama a otra aplicación que está en su sistema. De nuevo, debe saber si la aplicación a la que llama funciona igual en todos los sistemas o no (es poco probable).
Junto con las preocupaciones anteriores, el principal problema que tuve fue en realidad construir en diferentes plataformas, que tal vez no sea lo que está pidiendo, pero puede ser algo a lo que debe prestar atención.
OS X es especialmente culpable de esto cuando usa la Distribución de Java de Apple (por qué alguien querría poner su propio paquete de Java, no lo sé, pero ese es un argumento aparte, y en OSX no creo que tenga otra opción, pero usar su java). Las bibliotecas en las que puede confiar o no están en directorios completamente diferentes, por ejemplo, bibliotecas en lugar de lib si mi memoria me sirve correctamente. Y el IBM java creo que los paquetes Clases en diferentes tarros en algunos casos. ¡¡Ridículo!!
Espero que ayude.
La independencia de la plataforma significa que la ejecución de su programa no depende del tipo de sistema operativo (podría ser cualquiera: Linux, windows, Mac ..etc). Entonces compile el código una sola vez y ejecútelo en cualquier sistema (en C / C ++, necesitamos compilar el código para cada máquina en la que lo ejecutamos). Java es un lenguaje basado tanto en compilador ( javac
) como en intérprete (jvm).
El código fuente de Java se compila primero en código de byte usando javac
compilador javac
. Este código de bytes se puede convertir fácilmente a un código de máquina equivalente utilizando JVM . JVM (Java Virtual Machine) está disponible en todos los sistemas operativos que instalamos. Por lo tanto, el código de bytes generado por javac
es universal y se puede convertir a código de máquina en cualquier sistema operativo, esta es la razón por la cual Java es independiente de la plataforma.
Lo más importante de lo que debe preocuparse es el código UI, para asegurarse de que esté representado correctamente en todas las plataformas en las que se ejecutará.
Otra fuente de posibles problemas es la implementación en diferentes servidores de aplicaciones. Puede haber problemas de incompatibilidad entre ellos.
Java, aparte de eso, es independiente de la plataforma. Esta es también una de sus debilidades, ya que está codificando para un denominador común y muchas de las funciones de cada sistema operativo individual no están disponibles.
Su problema no será ejecutar su código, pero es más probable que los supuestos que tenga que hacer con respecto a las rutas de los archivos, los comandos externos disponibles (si los necesita), los permisos de archivos necesarios y otros factores externos que realmente no se incluyen en la "Java" dominio del problema. A menos que esté planeando utilizar ampliamente el código nativo (a través de JNI), Java no será su problema, su entorno sí lo será. Lo que nos devuelve al viejo adagio: "escribe una vez, prueba en todas partes".
Una de las cosas a considerar es la priorización de los hilos. Otro sistema operativo como Solaris, por ejemplo, tiene más prioridades de subprocesos que Windows. Por lo tanto, si trabaja mucho en subprocesos múltiples, el sistema operativo es algo que puede afectar el comportamiento del programa.