Acabo de comenzar a aprender Java y estoy confundido sobre el tema de la independencia de la plataforma.
¿No implica "independiente" que el código Java debe ejecutarse en cualquier máquina y no necesita ningún software especial para ser instalado? Sin embargo, la JVM debe estar presente en la máquina.
Por ejemplo, necesitamos tener el compilador Turbo C para compilar el código fuente C / C ++ y luego ejecutarlo. La máquina debe tener el compilador C.
¿Alguien podría complacer lo que se quiere decir cuando se describe a Java como "independiente de la plataforma"?
java
cross-platform
Serenidad
fuente
fuente
.exe
archivo. como mucho, requiere una biblioteca en tiempo de ejecución (en un.dll
archivo), no todo el compiladorRespuestas:
Normalmente, el código compilado es el conjunto exacto de instrucciones que la CPU requiere para "ejecutar" el programa. En Java, el código compilado es un conjunto exacto de instrucciones para una "CPU virtual" que debe funcionar de la misma manera en cada máquina física.
Entonces, en cierto sentido, los diseñadores del lenguaje Java decidieron que el lenguaje y el código compilado iban a ser independientes de la plataforma, pero como el código finalmente tiene que ejecutarse en una plataforma física, optaron por poner todo el código dependiente de la plataforma en la JVM.
Este requisito para una JVM contrasta con el ejemplo de Turbo C. Con Turbo C, el compilador producirá código dependiente de la plataforma, y no hay necesidad de que una JVM funcione igual porque el programa Turbo C compilado puede ser ejecutado directamente por la CPU.
Con Java, la CPU ejecuta la JVM, que depende de la plataforma. Esta JVM en ejecución luego ejecuta el código de bytes de Java, que es independiente de la plataforma, siempre que tenga una JVM disponible para que se ejecute. Podría decir que al escribir código Java, no programa para que el código se ejecute en la máquina física, escribe el código para que se ejecute en la Máquina Virtual Java.
La única forma en que todo este código de bytes de Java funciona en todas las máquinas virtuales de Java es que se ha escrito un estándar bastante estricto sobre cómo funcionan las máquinas virtuales de Java. Esto significa que no importa qué plataforma física esté utilizando, se garantiza que la parte en la que el código de bytes de Java interactúa con la JVM funcionará de una sola manera. Dado que todas las JVM funcionan exactamente igual, el mismo código funciona exactamente igual en todas partes sin volver a compilar. Si no puede pasar las pruebas para asegurarse de que sea igual, no puede llamar a su máquina virtual "máquina virtual Java".
Por supuesto, hay formas de romper la portabilidad de un programa Java. Puede escribir un programa que busque archivos que solo se encuentran en un sistema operativo (cmd.exe, por ejemplo). Puede usar JNI, que efectivamente le permite poner código C o C ++ compilado en una clase. Puede utilizar convenciones que solo funcionen para un determinado sistema operativo (como suponer que ":" separa directorios). Pero está garantizado que nunca tendrá que volver a compilar su programa para una máquina diferente a menos que esté haciendo algo realmente especial (como JNI).
fuente
Antes de entrar en detalles, primero debe comprender cuál es el significado de plataforma. La plataforma consta del hardware de la computadora (principalmente la arquitectura del microprocesador) y el sistema operativo. Plataforma = hardware + sistema operativo
Todo lo que sea independiente de la plataforma se puede ejecutar en cualquier sistema operativo y hardware.
Java es independiente de la plataforma, por lo que Java se puede ejecutar en cualquier sistema operativo y hardware. Ahora la pregunta es ¿cómo es independiente de la plataforma?
Esto se debe a la magia de Byte Code, que es independiente del sistema operativo. Cuando el compilador de Java compila cualquier código, genera el código de bytes, no el código nativo de la máquina (a diferencia del compilador de C). Ahora, este código de bytes necesita un intérprete para ejecutarse en una máquina. Este intérprete es JVM. Entonces, JVM lee ese código de bytes (que es independiente de la máquina) y lo ejecuta. Diferentes JVM están diseñadas para diferentes sistemas operativos y el código de bytes puede ejecutarse en diferentes sistemas operativos.
En el caso de C o C ++ (lenguaje que no es independiente de la plataforma), el compilador genera el archivo .exe que depende del sistema operativo, por lo que cuando ejecutamos este archivo .exe en otro sistema operativo, no se ejecutará porque este archivo depende del sistema operativo, por lo que no es compatible con el otro sistema operativo.
Finalmente, un código Byte independiente del SO intermedio hace que la plataforma Java sea independiente.
fuente
Significa que el programador de Java no necesita (en teoría) conocer los detalles de la máquina o del sistema operativo. Estos detalles existen y la JVM y las bibliotecas de clases los manejan. Además, en marcado contraste con C, los binarios de Java (código de bytes) a menudo se pueden mover a sistemas completamente diferentes sin modificarlos ni volver a compilarlos.
fuente
No, es al revés. Es porque usa la máquina virtual que el programa Java se vuelve independiente.
La máquina virtual no es independiente, debe instalar una que esté hecha específicamente para su tipo de sistema. La máquina virtual crea una plataforma independiente sobre el sistema operativo.
fuente
La JVM es una "máquina simulada" que se puede instalar en diferentes sistemas. De esta manera, el mismo código Java se puede ejecutar en diferentes sistemas, porque se basa en la JVM, no en el sistema operativo en sí.
Es decir, esto permite al programador comunicarse con el sistema virtual (JVM) y utilizar sus funciones, en lugar de las funciones específicas de la máquina y el sistema operativo. Dado que Java solo se basa en JVM, es independiente de la plataforma (si la plataforma tiene JVM instalada).
En resumen, Java no es independiente de la plataforma como tal, requiere una instalación de JVM para todos los sistemas en los que debería ejecutarse. Sin embargo, se ejecutará en todos los sistemas que tengan instalada la JVM.
fuente
Java es independiente de la plataforma, ya que tiene JVM (máquina virtual Java). Ilustremos esto con un ejemplo de la vida real. Supongamos que eres libre para los miembros de tu familia. ¿Pero por qué?
Porque los conoces bien y ellos también te conocen a ti. Pero no eres libre para los miembros de mi familia. Porque no los conoces y ellos tampoco te conocen a ti. Pero, si soy tu amigo y puedo presentarte a los miembros de mi familia, podrás hablar con ellos libremente.
De manera similar, si eres un código y yo soy una JVM. Además, su familia es la plataforma Windows y la mía es la plataforma Linux. En el caso de que fuera un C u otros lenguajes dependientes de la plataforma, solo conoce a los miembros de su familia y viceversa. Es por eso que solo la plataforma en la que fue escrito conoce ese Código y lo admitirá. Pero si eres un código JAVA y cuando vienes a mi familia a saber. la plataforma Linux y si ahí me encuentras, JVM, entonces puedo presentarte a mi familia, la plataforma Linux y podrás interactuar con ella.
Para los lenguajes dependientes de la plataforma, no hay ningún amigo como JVM disponible para que se presenten a ninguna familia de plataformas. Así es como Java es independiente de la plataforma. :)
fuente
La JVM se abstrae de la plataforma de hormigón. Su programa se basa solo en la JVM y, dado que la JVM está disponible para diferentes plataformas como Windows y Linux, su programa es independiente de la plataforma (pero depende de jvm).
fuente
En c / c ++, el código fuente (archivo de programa c) después de la compilación usando un compilador se convierte directamente en código de máquina nativo (que es comprensible para la máquina en particular en la que está compilando el código). Y, por lo tanto, el código compilado de c / c ++ no se puede ejecutar en diferentes sistemas operativos.
Pero en el caso de Java: el archivo fuente de java (.java) se compilará utilizando el compilador JAVAC (presente en JDK) que proporciona el código Byte (archivo .class) que es comprensible para cualquier JVM instalado en cualquier SO (sistema físico) .
Aquí necesitamos tener diferentes JVM (que dependen de la plataforma) para diferentes sistemas operativos donde queremos ejecutar el código, pero el archivo .class (código compilado / código intermedio) sigue siendo el mismo, porque es comprensible para cualquiera de las JVM instaladas. en cualquier sistema operativo.
En c / c ++: solo el código fuente es independiente de la máquina. En Java: tanto el código fuente como el código compilado son independientes de la plataforma.
Esto hace que la plataforma Java (máquina) sea independiente.
fuente
Java no es una plataforma Independiente, en sí misma es una plataforma, basada en esa plataforma que se ejecutan las aplicaciones de Java, pero la plataforma de Java en sí depende de la plataforma
fuente
1:jvm
(es decir, la máquina virtual java) es una colección de programas que contiene muchos archivos que proporcionan varias funciones presentes en una carpeta (es decir, colecciones de programas en formato de nivel medio) como se llamapackages
.jvm
ayuda a no sobrecargarseo/s
donde ayuda a ejecutar solo los.class
archivos o aplicaciones java solo por sí mismo.Ayuda a hacer que su formato de nivel medio de igualdad después de la compilación por parte del compilador java, luego proporcione la representación del código de bytes (archivo .class) que no es específico deo/s
yprocessor
.2: jvm convierte el código de bytes en el
.exe
archivo para que el procesador sea comprensible y presenta la asignación de memoria para cada función después de recibir el código de bytes frm.3: jvm también libera la ubicación de memoria de la RAM después de que el control finaliza su ejecución.
fuente
JVM depende del sistema operativo. para cada sistema operativo JVM diferente.
".class" es el mismo para todas las JVM. por lo tanto, cada JVM entiende los datos del archivo ".class".
La JVM dependiente de Windows da instrucciones dependientes de Windows a Windows La JVM dependiente de Linux proporciona instrucciones dependientes de Linux a Linux.
eso es lo mismo para otros sistemas operativos. entonces, java se ejecuta en cualquier sistema operativo.
es por eso que Java es independiente del sistema operativo.
fuente
En lenguaje sencillo:
El lenguaje de programación Java es independiente de la plataforma.
JVM depende de la plataforma
fuente
Java no es independiente de la plataforma, ya que se ejecuta en la JVM. Dicho esto, obtiene independencia de la plataforma a través de la programación contra una sola máquina abstracta que tiene realizaciones concretas en las plataformas de sistemas operativos más comunes (y algunos dispositivos integrados).
Una idea relacionada es la capa de abstracción de hardware presente en muchos sistemas operativos que permite que el mismo sistema operativo se ejecute en hardware diferente.
En su pregunta original, Turbo C es análogo al programa javac, y la JVM es el OS / HAL.
fuente
Con Java, puede compilar código fuente en Windows y el código compilado ( código de bytes para ser precisos) se puede ejecutar (interpretar) en cualquier plataforma que ejecute una JVM. Entonces, sí, necesita una JVM, pero la JVM puede ejecutar cualquier código compilado, el código compilado es independiente de la plataforma .
En otras palabras, tiene tanto la portabilidad del código fuente como la portabilidad del código compilado.
La máquina no tiene que tener un compilador de C, la máquina tiene que usar un binario específico de la plataforma. Con C o C ++, el código compilado es específico para cada arquitectura, es independiente de la plataforma .
En otras palabras, con C / C ++ tiene portabilidad del código fuente (con cierta disciplina) pero no portabilidad del código compilado: necesita recompilar para cada arquitectura en binarios específicos de la plataforma.
fuente
JVM dependerá de la plataforma.
Pero cualquier cosa que genere será independiente de la plataforma. [que llamamos como bytecode o simplemente puede decir ... el archivo de clase]. por eso Java se llama independiente de la plataforma.
también puede ejecutar el mismo archivo de clase en Mac en Windows, pero requerirá JRE.
fuente
bytecode no es independiente de la plataforma, sino su JVM que hace que el bytecode sea independiente. Bytecode no es el código de coincidencia. Los códigos de bytes son códigos numéricos compactos, constantes y referencias (normalmente direcciones numéricas) que codifican el resultado del análisis sintáctico y semántico de cosas como el tipo, el alcance y las profundidades de anidación de los objetos del programa. Por lo tanto, permiten un rendimiento mucho mejor que la interpretación directa del código fuente. El código de bytes debe interpretarse antes de la ejecución, lo que siempre lo realiza el intérprete de JVM.
fuente
Solo una nota al margen de la discusión sobre JVM y JIT Compilation. Este es el mismo principio que con C # y CLR y, hasta cierto punto, en Python, y cuando alguien dice que el código se ejecuta "directamente en el hardware", en realidad es cierto que las instrucciones que ya están compiladas podrán aprovechar la optimización. en la máquina / CPU en la que se está ejecutando. Entonces, incluso si la compilación inicial de un módulo es bastante lenta, la próxima vez que se ejecute este módulo, el código que se ejecuta se ejecutará a velocidad nativa y, por lo tanto, se ejecutará directamente en el hardware, por así decirlo.
fuente
Java es independiente de la plataforma en el aspecto del desarrollador de Java, pero este no es el caso del usuario final, que necesita tener una JVM dependiente de la plataforma para ejecutar código Java. Básicamente, cuando se compila el código Java, se genera un código de bytes que normalmente es independiente de la plataforma. Por lo tanto, el desarrollador debe escribir un código único para toda la serie de plataformas. Pero este beneficio viene con un dolor de cabeza para el usuario final que necesita instalar JVM para ejecutar este código compilado. Esta JVM es diferente para cada plataforma. Por lo tanto, la dependencia entra en vigor solo para el usuario final.
fuente
Javac : compilador que convierte el código fuente en código de bytes. JVM : intérprete que convierte código de bytes en código de lenguaje de máquina.
Como sabemos, Java es un lenguaje compilado ** r & ** basado en intérpretes . Una vez que se compila el código Java, también conocido como código fuente, se convierte a código nativo conocido como BYTE CODE, que es portátil y se puede ejecutar fácilmente en todos los sistemas operativos. El código de bytes generado se representa básicamente en formato decimal hexadecimal . Este formato es el mismo en todas las plataformas, ya sea una estación de trabajo Solaris o Macintosh, Windows o Linux. Después de la compilación, el intérprete lee el código de bytes generado y lo traduce de acuerdo con la máquina host. . El código de bytes es interpretado por Java Virtual Machine, que está disponible con todos los sistemas operativos que instalamos. así que para portar programas Java a una nueva plataforma, todo lo que se requiere es portar el intérprete y algunas de las rutinas de la biblioteca.
¡¡¡Espero eso ayude!!!
fuente
Cuando compilamos datos fuente en C, genera código nativo que puede ser entendido por el sistema operativo actual. Cuando trasladamos este código fuente al otro sistema operativo, el sistema operativo no puede entenderlo debido al código nativo, lo que significa que la representación cambia de un sistema operativo a otro. Por lo tanto, C o C ++ dependen de la plataforma.
Ahora, en el caso de Java, después de la compilación obtenemos código de bytes en lugar de código nativo. Cuando ejecutamos el código de bytes, se convierte en código nativo con la ayuda de JVM y luego se ejecutará.
Así que Java es independiente de la plataforma y C o C ++ no es independiente de la plataforma.
fuente
bueno, buena pregunta, pero cuando el código fuente se cambia a código de bytes nativo intermedio por un compilador en el que convierte el programa en el código de bytes dando los errores después de la comprobación completa de una vez (si se encuentra) y luego el programa necesita un intérprete que Verificaría el programa línea por línea y lo cambiaría directamente a código de máquina o código de objeto y cada sistema operativo por defecto no puede tener un intérprete de Java debido a algunas razones de seguridad, por lo que debe tener jvm a cualquier costo para ejecutarlo en esa plataforma de sistema operativo diferente independencia, como dijiste aquí, significa que el programa se puede ejecutar en cualquier sistema operativo como Unix, Mac, Linux, Windows, etc., pero esto no significa que todos y cada uno de los sistemas operativos podrán ejecutar los códigos sin un jvm que dice especificación, implementación, e instancia,si avanzo, entonces cambiando la configuración de su PC para que pueda tener un cargador de clases que pueda abrir incluso el código de bytes, entonces también puede ejecutar código de bytes de Java, applets, etc. -por nimish :) la mejor de las suertes
fuente
Como esta pasando esto
Respuesta: JVM tiene capacidad para leer
ByteCode
y responder de acuerdo con el sistema operativo subyacente, ya que la JVM está sincronizada con el sistema operativo.Entonces encontramos que necesitamos JVM con Sync with Platform.
Pero lo principal es que el programador no tiene que tener conocimientos específicos de la Plataforma y programar su aplicación teniendo en cuenta una plataforma específica.
Esta flexibilidad del programa de escritura en Java --- compilar
ByteCode
y ejecutar en cualquier máquina (Sí, es necesario tener JVM DEPENDIENTE de la plataforma para ejecutarlo) hace que la plataforma Java sea independiente.fuente
cuando compilamos el archivo java, se genera el archivo .class de ese programa, ese archivo .class contiene el código de bytes. Ese código de bytes es independiente de la plataforma, el código de bytes puede ejecutarse en cualquier sistema operativo que utilice una máquina virtual Java. independencia de la plataforma no solo del sistema operativo, sino también del hardware. Cuando ejecuta su aplicación Java en una máquina de 16 bits que creó en 32 bits, no tiene que preocuparse por convertir los tipos de datos de acuerdo con el sistema de destino. Puede ejecutar su aplicación en cualquier arquitectura y obtendrá el mismo resultado en cada una.
fuente
Editar: No del todo. Vea los comentarios a continuación.
Java no se ejecuta directamente en nada. Debe convertirse a código de bytes mediante una JVM.
Debido a que las JVM existen para todas las plataformas principales, esto hace que Java sea independiente de la plataforma A TRAVÉS de la JVM.
fuente