2012-03-27 7 views
5

Chicos he iniciado recientemente la programación multhreaded con Java en el caso de hilos de Linux, sé que el kernel los programa (ya que son las unidades de unidades que están programadas) pero los programas de Java se ejecutan en JVM que en mi sistema (RHEL 6.1) se implementa como un programa que se ejecuta como una instancia de espacio de usuario. Así que, sin que el kernel tenga conocimiento de los hilos java, ¿cómo es posible que la multitarea preventiva se realice en JVM? será útil si todo el mecanismo de interacción JVM y el núcleo al hacer esto se da del PLZ citar las posibles fuentes de información¿Cómo están programados los hilos java?

+1

No estoy seguro, pero cada subproceso Java es manejado por una secuencia de sistema operativo dedicada. Por lo tanto, su sistema operativo no necesita conocer JVM, etc. –

Respuesta

2

Leer Distinguish Java threads and OS threads? Como dije en los hilos de comentarios de Java son hebras de SO ordinarios simplemente ejecutar código JVM

+0

Sí, lo entiendo, pero por favor dígame cómo se hace la interpretación del código Java por el intérprete JVM en este entorno multiproceso – Tanay

+0

Excepto por las acciones de sincronización, cada hilo interpreta el código Java de forma independiente si fue el único hilo. Cuando se crea un nuevo hilo, se le dice qué código de Java interpretar. –

1

El jvm es solo un proceso normal que comienza con un hilo y puede engendrar tantos hilos como quiera después. La programación se realiza en dos niveles: entre procesos y entre subprocesos dentro de procesos. Todo esto lo hace el SO (a través de libs): el jvm simplemente se conecta. Google posix threads para más detalles: eso está expuesto (API) al jvm.

Esto va un poco más en detalles: http://www.ibm.com/developerworks/java/library/j-rtj3/

3

Temas en los mapas de procesos java/JVM a un hilo nativa y se puede ver tanto el ID del tema Java y el ID del tema nativo en un vertedero de seguimiento de la pila hilo. Obtener la pila de subprocesos de todos los hilos de Java utilizando su herramienta favorita:

señal de línea
  • comando como CTRL + INTER (Windows) o ctrl + \ Linux) en la consola donde el programa Java se ejecuta
  • herramienta de línea de comandos (matar -QUIT o jstack de la JDK)
  • vm visual en el JDK y/o jmx etc

Ejemplo extracto de la primera línea de un vertedero de tal hilo: ... tid = 0x0000002adaba9c00 nid = 0x754c ...

  • tid = java hilo Identificación

  • nid = id nativo (el ID del tema OS)

Usar las herramientas del sistema operativo para obtener más información sobre el hilo con el id nativa (se está en hexadecimal).

Dentro del código de Java que tiene ThreadMXBean para recuperar más información hilo programáticamente si quieres http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

0

", pero los programas de Java se ejecutan en la JVM que en mi sistema (RHEL 6.1) es implementado como un programa que se ejecuta como un espacio de usuario instance.So, sin el kernel siendo conscientes de las hebras Java ..."

Esta afirmación es incorrecta para todos los modernos JVM que utilizan subprocesos nativos. Creo que ese ha sido el valor predeterminado desde Java 1.2. La implementación nativa de subprocesos mediante una JVM significa que cada vez que un subproceso crea una instancia/ejecuta un subproceso en el código de Java, la JVM solicita al SO que cree el subproceso. Como estos son hilos nativos, el kernel los conoce y los trata en consecuencia.Además, Linux admite/implementa subprocesos POSIX y, como tal, en sistemas basados ​​en Linux obtendrá un comportamiento pthread para los subprocesos de sus aplicaciones Java

Cuestiones relacionadas