Pregunta

¿Cómo código de bytes obtener una verificación en la JVM?

¿Fue útil?

Solución

Oracle sí mismos tienen un pequeño fragmento de la página sobre cómo funciona aquí .

Básicamente, el JRE no confía en el JDK. Esto se debe a que no tiene conocimiento de lo que JDK compilador creó el archivo de clase. Se trata del archivo de clase como hostil hasta que sea confirmada.

La expansión de eso, la verificación de código de bytes es un paso necesario para proteger del sol lo que llamamos un "compilador hostil". propio compilador de Java de Sun asegura que el código fuente de Java no viola las reglas de seguridad, pero, cuando una aplicación importa un fragmento de código, que en realidad no saber si el fragmento de código sigue las reglas del lenguaje Java para la seguridad. En otras palabras, el código puede no haber sido producido por un compilador de Java de confianza.

En ese caso, el sistema de tiempo de ejecución de Java en su máquina tiene que asumir el fragmento es malo y lo somete a la verificación de código de bytes.

La máquina virtual Java no incluso ver el código de bytes hasta que ha pasado por este proceso de verificación. Hacer esto como el código de bytes se carga también tiene la ventaja de que no es necesario llevar a cabo cada vez que se ejecuta el código de una gran cantidad de controles en tiempo de ejecución. Porque se ha verificado como correcto, se puede, una vez que empieza a correr, correr más rápido que de otro modo sería posible.

Una interpretación del diagrama vinculado es a continuación:

                    <<<=== Unsafe / Safe ===>>>
                                  \
+---------------+        +-------------------+
|  Java source  |   +--> |   Class loader    | --+
+---------------+   |    | Bytecode verifier |   |
        |           |    +-------------------+   |
        V           |             /              |
+---------------+   |             \              V
| Java compiler |  Network        /    +-------------------+
+---------------+   |             \    |      JVM/JIT      |
        |           |             /    +-------------------+
        V           |             \              |
+---------------+   |             /              V
| Java bytecode | --+             \    +-------------------+
+---------------+                 /    | Operating system  |
                                  \    +-------------------+
                                  /              |
                                  \              V
                                  /    +-------------------+
                                  \    |     Hardware      |
                                  /    +-------------------+
                                  \
                    <<<=== Unsafe / Safe ===>>>

Otros consejos

La mejor fuente de información es, probablemente, la sección correspondiente en la especificación JVM, 4.10 Verificación de la clase de archivos .

Vea el enlace para más detalles, pero en términos generales:

  

verificación de enlaces de tiempo mejora el rendimiento del intérprete. cheques caros que de otra manera tendrían que llevar a cabo para verificar las limitaciones en tiempo de ejecución para cada uno interpreta la instrucción puede ser eliminado. La Máquina Virtual de Java puede asumir que estos controles se han realizado ya. Por ejemplo, la máquina virtual de Java ya sabrá lo siguiente:

     
      
  • No hay desbordamientos de pila de operando o underflow.
  •   
  • Todos los usos y las tiendas de variables locales son válidos.
  •   
  • Los argumentos a todas las instrucciones de Java Virtual Machine son de tipos válidos.
  •   
     

El verificador también lleva a cabo la verificación de que se puede hacer sin mirar a la matriz de código del atributo de código (§4.7.3). Los controles realizados son los siguientes:

     
      
  • Asegurar que las clases finales no son subclases y que los métodos finales no son anulados (§5.4.5).
  •   
  • Comprobación de que cada clase (excepto Object) tiene una superclase directa.
  •   
  • Asegurar que el conjunto de constantes satisface las restricciones estáticas documentados; por ejemplo, que cada estructura CONSTANT_Class_info en la piscina constante contiene en su artículo name_index un índice de agrupación de constantes válidas para una estructura CONSTANT_Utf8_info.
  •   
  • Comprobación de que todas las referencias de campo y referencias de métodos en el conjunto de constantes tienen nombres válidos, clases válidas, y un descriptor de tipo válido.
  •   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top