Modificación del modelo de memoria (JVM de 32 bits)

Hay tres modelos de memoria disponibles en la JVM de 32 bits.

Encontrará más detalles sobre los modelos de memoria de AIX® en la documentación del release de AIX. Por ejemplo: Soporte de programa grande.

Modelo de memoria pequeña

Con el modelo de memoria pequeño predeterminado para una aplicación, la aplicación sólo tiene un segmento, el segmento 2, en el que puede malloc() datos y asignar pilas de hebras adicionales. Sin embargo, tiene 11 segmentos de memoria compartida en los que puede mmap() o shmat() datos.

Modelo de memoria grande

Es posible que este único segmento para los datos que se asignan mediante malloc() no sea suficiente, por lo que es posible mover el límite entre la memoria privada y la compartida, proporcionando más memoria privada a la aplicación, pero reduciendo la cantidad de memoria compartida. Puede mover el límite modificando el valor de o_maxdata en la cabecera XCOFF (Executable Common Object File Format) de la aplicación.

Puede modificar el valor de o_maxdata haciendo lo siguiente:
  • Estableciendo el valor de o_maxdata durante la compilación utilizando el distintivo -bmaxdata con el mandato ld.
  • Estableciendo el valor de o_maxdata utilizando la variable de entorno LDR_CNTRL=MAXDATA=0xn0000000 (n segmentos).

Modelo de memoria muy grande

Active el modelo de memoria muy grande añadiendo "@DSA" al final del valor de MAXDATA. Proporciona dos funciones adicionales:
  • El movimiento dinámico del límite de memoria privada y memoria compartida entre un único segmento y el segmento especificado por el valor de MAXDATA. Este movimiento dinámico se logra asignando la memoria privada hacia arriba desde el segmento 3 y la memoria compartida hacia abajo desde el segmento C. El área de memoria privada puede expandirse hacia arriba a un nuevo segmento si el segmento no está siendo utilizado por las rutinas shmat o mmap.
  • La capacidad de cargar bibliotecas compartidas en el área privada de proceso. Si especifica un valor MAXDATA de 0 o superior a 0xAFFFFFFF, el proceso no utilizará bibliotecas compartidas globales, sino que las cargará de forma privada. Por lo tanto, los procedimientos shmat y mmap empiezan a asignar en segmentos más altos porque ya no están reservados para bibliotecas compartidas. De esta forma, el proceso tiene más memoria contigua.
La modificación del valor de MAXDATA se aplica sólo a un proceso de 32 bits y no a la JVM de 64 bits.