Ver Mensaje Individual
  #5  
Viejo 22/08/10, 11:09:02
Avatar de javierpc
javierpc javierpc no está en línea
Usuario muy activo
Mensajes: 1,302
Compra y venta: (2)
 
Fecha de registro: ago 2009
Localización: Valencia
Mensajes: 1,302
Modelo de smartphone: Hoy éste, mañana aquél ...
Versión de ROM: pffffffff ... ya he perdido la cuenta
Versión de Radio: Máxima FM
Tu operador: Movistar
Mencionado: 6 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por thorazine74 Ver Mensaje
Quiza lo mejor seria que alguien explicara que hace exactamente el JIT y el compcache para que todos los novatos nos hagamos una idea...
pues allá vamos ...

compache y swap
los mecanismos de swap y compcache tienen la misma base: tomar partes de la memoria RAM que están actualmente en uso pero por programas (o servicios) que no están en ejecución y "guardarlas" en algún sitio. que quede esto claro: se trata de áreas de memoria que no se pueden liberar, ya que contienen datos en uso, pero que no son de utilidad inmediata porque el proceso propietario no está en ejecución actualmente. pero si hay poca memoria libre y algún proceso que sí esté en ejecución necesita memoria, entonces se puede tomar alguna de las áreas de memoria "dormidas" y apartarlas momentáneamente. la diferencia entre swap y compcache es dónde se guardan estas áreas de memoria: swap utiliza el disco (la tarjeta SD en móviles Android) mientras que compcache utiliza un área de la propia memoria RAM, donde va almacenando comprimidas las páginas de memoria no utilizadas en ese momento. puede parecer paradójico, pero si por ejemplo utilizamos 1 MB de compcache (me invento las cifras, es solo para clarificar), podemos almacenar comprimido en este mega el contenido de otros, digamos, 3 o 4 MB, con lo que la ganacia real de memoria es de 2 o 3 MB.
por este motivo, compcache y swap son incompatibles entre sí.

JIT
esto es un poco más complicado ...
los programas Android están desarrollados en Java. Java es un lenguaje de programación interpretado, esto es, un programa Java no está almacenado en lenguaje máquina, que es el único que entiende el procesador (la CPU). en vez de esto, el compilador de Java almacena el código en una codificación especial denominada bytecode, que es algo intermedio entre el lenguaje Java escrito y el código máquina. en teoría, este bytecode es válido para cualquier CPU, ya que como hemos dicho no es lenguaje máquina, que sí es específico para cada CPU.
posteriormente, la máquina virtual Java, que no es otra cosa que un programa que entiende el bytecode, se encarga de traducir el bytecode a código máquina y pasarlo para su ejecución a la CPU. cada sistema necesita tener una máquina virtual Java específica, porque aunque parten de un bytecode genérico necesitan traducirlo al código máquina específico para cada CPU.
esta es la razón de que los programas en Java se ejecuten de forma más lenta que programas escritos en C, C++ u otros lenguajes compilados, ya que en cada ejecución hay que traducir el bytecode a código máquina antes de que se pueda ejecutar. por pequeña que pueda ser la transformación necesaria, siempre supone un retraso, además de un mayor consumo de recursos.
y aquí es donde interviene el JIT. ¿qué es lo que hace? fácil (y simplifico), precompila el bytecode a código máquina ANTES de que sea necesario, bien utilizando tiempos muertos del procesador, bien almacenándolo una vez generado para un uso posterior ... hay que tener en cuenta que, en funcionamiento normal, la máquina virtual traduce el bytecode, éste se pasa a la CPU y, una vez ejecutado, se descarta. con el uso de JIT, nos encontramos que cuando hay que ejecutar una porción de código, normalmente estará ya traducido a código máquina, por lo que la ejecución debería ser más rápida.

en fin, espero no haberme enrollado mucho y que haya quedado (poco más o menos) claro.

Última edición por javierpc Día 22/08/10 a las 11:39:31
Responder Con Cita
Gracias de parte de: