Está en la página 1de 7

MEMORIA VIRTUAL

La memoria virtual es una tcnica para proporcionar la simulacin de un espacio de memoria mucho mayor que la memoria fsica de una mquina. Esta "ilusin" permite que los programas se hagan sin tener en cuenta el tamao exacto de la memoria fsica. La ilusin de la memoria virtual est soportada por el mecanismo de traduccin de memoria, junto con una gran cantidad de almacenamiento rpido en disco duro. As en cualquier momento el espacio de direcciones virtual hace un seguimiento de tal forma que una pequea parte de l, est en memoria real y el resto almacenado en el disco, y puede ser referenciado fcilmente. Debido a que slo la parte de memoria virtual que est almacenada en la memoria principal, es accesible a la CPU, segn un programa va ejecutndose, la proximidad de referencias a memoria cambia, necesitando que algunas partes de la memoria virtual se traigan a la memoria principal desde el disco, mientras que otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de paginacin). La memoria virtual ha llegado a ser un componente esencial de la mayora de los S.O actuales. Y como en un instante dado, en la memoria slo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener ms procesos en la memoria. Es ms, se ahorra tiempo, porque los fragmentos que no se usan no se cargan ni se descargan de la memoria. Sin embargo, el S.O debe saber cmo gestionar este esquema. La memoria virtual tambin simplifica la carga del programa para su ejecucin llamado reubicacin, este procedimiento permite que el mismo programa se ejecute en cualquier posicin de la memoria fsica. En un estado estable, prcticamente toda la memoria principal estar ocupada con fragmentos de procesos, por lo que el procesador y el S.O tendrn acceso directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la memoria un fragmento, deber expulsar otro. Si expulsa un fragmento justo antes de ser usado, tendr que traer de nuevo el fragmento de manera casi inmediata. Demasiados intercambios de fragmentos conducen a lo que se conoce como hiperpaginacin: donde el procesador consume ms tiempo intercambiando fragmentos que ejecutando instrucciones de usuario. Para evitarlo el S.O intenta adivinar, en funcin de la historia reciente, qu fragmentos se usarn con menor probabilidad en un futuro prximo.

Los argumentos anteriores se basan en el principio de cercana o principio de localidad que afirma que las referencias a los datos y el programa dentro de un proceso tienden a agruparse. Por lo tanto, es vlida la suposicin de que, durante cortos perodos de tiempo, se necesitarn slo unos pocos fragmentos de un proceso. Una manera de confirmar el principio de cercana es considerar el rendimiento de un proceso en un entorno de memoria virtual. El principio de cercana sugiere que los esquemas de memoria virtual pueden funcionar. Para que la memoria virtual sea prctica y efectiva, se necesitan dos ingredientes. Primero, tiene que existir un soporte de hardware y, en segundo lugar, el S.O debe incluir un software para gestionar el movimiento de pginas o segmentos entre memoria secundaria y memoria principal.

Justo despus de obtener la direccin fsica y antes de consultar el dato en memoria principal se busca en memoria-cache, si esta entre los datos recientemente usados la bsqueda tendr xito, pero si falla, la memoria virtual consulta memoria principal , , en el peor de los casos se consulta de disco (swapping).

Memoria Virtual = Memoria Fsica + Area de Swapping en Disco

PAGINACION

El trmino memoria virtual se asocia normalmente con sistemas que emplean paginacin, aunque tambin se puede usar memoria virtual basada en la segmentacin. El uso de la paginacin en la memoria virtual fue presentado por primera vez en el computador Atlas. Cada proceso tiene su propia tabla de pginas y cuando carga todas sus pginas en la memoria principal, se crea y carga en la memoria principal una tabla de pginas. Cada entrada de la tabla de pginas contiene el nmero de marco de la pgina correspondiente en la memoria principal. Puesto que slo algunas de las pginas de un proceso pueden estar en la memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la pgina correspondiente est presente (P) en la memoria principal o no. Si el bit indica que la pgina est en la memoria, la entrada incluye tambin el nmero de marco para esa pgina.

Otro bit de control necesario en la entrada de la tabla de pginas es el bit de modificacin (M), para indicar si el contenido de la pgina correspondiente se ha alterado desde que la pgina se carg en la memoria principal. Si no ha habido cambios, no es necesario escribir la pgina cuando sea sustituida en el marco que ocupa actualmente.

La memoria virtual es una tcnica de administracin de la memoria real que permite al sistema operativo brindarle al software de usuario y a s mismo un espacio de direcciones mayor que la memoria real o fsica.

La mayora de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria cach (tanto dentro como fuera del CPU), la memoria fsica (generalmente en forma de RAM, donde la CPU puede escribir y leer directa y razonablemente rpido) y el disco duro que es mucho ms lento, pero tambin ms grande y barato. Muchas aplicaciones requieren el acceso a ms informacin (cdigo y datos) que la que se puede mantener en memoria fsica. Esto es as sobre todo cuando el sistema operativo permite mltiples procesos y aplicaciones ejecutndose simultneamente. Una solucin al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su informacin en disco, movindola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto. Una opcin es que la aplicacin misma sea responsable de decidir qu informacin ser guardada en cada sitio (segmentacin), y de traerla y llevarla. La desventaja de esto, adems de la dificultad en el diseo e implementacin del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre s: cada programador podra realizar su diseo teniendo en cuenta que es el nico programa ejecutndose en el sistema. La alternativa es usar memoria virtual, donde la combinacin entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha ms memoria principal (RAM) que la que realmente posee. Este mtodo es invisible a los procesos. La cantidad de memoria mxima que se puede hacer ver que hay tiene que ver con las caractersticas del procesador. Por ejemplo, en un sistema de 32 bits, el mximo es 232, lo que da 4096 Megabytes (4 Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho ms fcil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria. Aunque la memoria virtual podra estar implementada por el software del sistema operativo, en la prctica casi siempre se usa una combinacin de hardware y software, dado el esfuerzo extra que implicara para el procesador.

Tutorial. Clases en Java Sentencias de Control de Flujo en Java

Aumentar el tamao de memoria de la mquina virtual en Java


En Java, hay varios parmetros para controlar el tamao inicial y el tamao mximo que puede tomar la mquina virtual. Adems, hay que tener en cuenta el tipo de memoria sobre el que se quiere actuar: heap, non-heap (PermGen). Los valores por defecto que se dan corresponden a mquina virtuales de Sun, y son orientativos, porque pueden cambiar entre versiones de la mquina virtual. Los parmetros son los siguientes, fijndose a 128Mb.

-Xms128m: Tamao de inicio de la mquina virtual de Java a 128Mb. El valor por defecto son 64Mb. Si se aumenta este valor, se elimina el tiempo que se tardara en aumentar el tamao en memoria de la mquina virtual si se llegara el caso de que se necesitara ms memoria, por lo que aumentara el rendimiento en los casos que la aplicacin haga uso intensivo de la memoria. -Xmx128m: Tamao mximo de la mquina virtual de Java a 128Mb. El valor por defecto son 128Mb. Si la aplicacin supera el tamao mximo de memoria que marca este parmetro, se lanza la excepcin java.lang.OutOfMemoryError. No conviene asignar a este parmetro el mximo de la memoria de la mquina porque si ya no queda memoria fsica disponible (por la que usa el sistema operativo u otras aplicaciones) se pueden producir escrituras en memoria asignada a otros programas y provocar un autntico lo. -XX:PermSize=128m: Tamao de inicio de la memoria de tipo PermGen a 128Mb. Arrancar la mquina virtual con un valor superior al por defecto agiliza la carga de aplicaciones, sobre todo en el caso de aplicaciones que hagan uso intensivo de este tipo de memoria (Spring, Hibernate) -XX:MaxPermSize=128m: Tamao mximo de la memoria de tipo PermGen a 128Mb. El valor por defecto son 64Mb. Si la aplicacin supera el tamao mximo de memoria para este tipo que marca este parmetro, se lanza la excepcin java.lang.OutOfMemoryError: PermGen space. El valor necesario para este parmetro siempre suele ser menor que el de la memoria de tipo heap.

Si se quiere especificar un valor distinto de 128Mb, que se utiliza para todos los parmetros como ejemplo para simplificar, bastara con sustituir el valor 128 del parmetro con el que se desee, siempre que sean mltiplos de 2 (64, 128, 256, 512, 768, 1024, 2048) Conocidos los tipos de memoria y los parmetros que los controlan, ahora viene la pregunta, cmo especifico estos valores para mi aplicacin? La respuesta es la misma para todos los casos: Los valores se especifican como parmetros en el arranque de la

mquina virtual que ejecutar la aplicacin. La diferencia estribar en cmo se arranca la aplicacin: con un script, desde lnea de comandos, mediante ant A continuacin se dan distintos ejemplos de modificacin de la memoria de distinta forma. No es necesario especificar todos los parmetros, se pueden especificar todos o ninguno (y se tomaran los valores por defecto) Lnea de comandos

Ejecucin de un jar: java -Xms128m -Xmx1024m -XX:PermSize=128m XX:MaxPermSize=256m -jar example.jar Ejecucin de una clase: java -Xms128m -Xmx1024m -XX:PermSize=128m XX:MaxPermSize=256m com.programacionenjava.examples.MemoryExample

Ant <java classname=com.programacionenjava.examples.MemoryExample fork=yes spawn=true> <jvmarg value=-Xms128m/> <jvmarg value=-Xmx512m/> <jvmarg value=-XX:PermSize=128m/> <jvmarg value=-XX:MaxPermSize=128m/> <classpath refid=execution.classpath/> </java> Script Si el arranque de la mquina virtual se produce en un script, hay que editar el script y aadir estos parmetros en la sentencia de arranque. El siguiente ejemplo muestra cmo aadir estos parmetros en el script de arranque de un Tomcat.

En Windows: set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m XX:PermSize=128m -XX:MaxPermSize=256m En Linux: JAVA_OPTS=$JAVA_OPTS -Xms128m -Xmx512m XX:PermSize=128m -XX:MaxPermSize=256m

Por ltimo, recordamos que resolver el problema de una excepcin de tipo java.lang.OutOfMemoryError simplemente aumentando el tamao de la memoria virtual puede retrasar el problema pero no evitarlo si el problema es una fuga de memoria. Puedes encontrar ms informacin aqu.

También podría gustarte