2011-07-12 27 views
12

Digamos que el dinero no era un factor limitante, y quería escribir un programa Java que funcionara en una sola máquina poderosa.¿Limitaciones prácticas de la memoria JVM y el uso de la CPU?

El objetivo sería hacer que el programa Java se ejecute lo más rápido posible sin tener que intercambiar o ir al disco para nada.

Digamos que este equipo tiene:

  • 1 TB de RAM (64 de 16 GB DIMMs)
  • 64 núcleos de procesador (8 procesadores de 8 núcleos)
  • ejecutan 64 bits Ubuntu

¿Podría una sola instancia de un programa Java que se ejecuta en una JVM aprovechar esta cantidad de RAM y procesadores?

¿Existen consideraciones prácticas que puedan limitar el uso y la eficiencia?

  • Proceso del sistema operativo (memoria & hilos) limitaciones?
  • Limitaciones de memoria/pila JVM?
  • Limitaciones de hilos de JVM?

Gracias, Galen

+0

Mi sospecha es que las últimas JVM de servidor de Sun para Linux podrían explotar esto bastante bien (siempre que no hubiera cuellos de botella a nivel de aplicación); sin embargo, no estoy seguro. – antlersoft

Respuesta

8

Un solo caso se puede tratar de acces toda la memoria, sin embargo regiones NUMA significa que las cosas tales como un mal rendimiento GC acceder a la memoria en otra región. Esto se está volviendo más rápido y JVM tiene cierta compatibilidad con NUMA, pero debe mejorar si desea la escalabilidad. Aun así, puede obtener 256 MB de almacenamiento dinámico y usar 700 de memoria nativa/directa sin este problema. ;)

La mayor limitación si tiene mucha memoria es que las matrices, las colecciones y ByteBuffer (para los archivos asignados de memoria) están todas limitadas a un tamaño de 2 mil millones. (2^31-1)

Puede solucionar estos problemas con colecciones personalizadas, pero es realmente algo que Java debería soportar en mi humilde opinión.

BTW: Usted puede comprar un Dell R910 con 1 TB de memoria y 24 núcleos/48 hilos con Ubuntu por £ 40K.

BTW: Solo tengo experiencia en JVM de hasta 40 GB de tamaño.

1

En primer lugar, el programa Java en sí: un código mal diseñado no usaría tanta potencia de la computadora. Los hilos mal implementados, por ejemplo, podrían hacer que tu rendimiento sea lento.

El sistema operativo también es un factor limitante: no todos los sistemas operativos pueden manejar bien esa cantidad de memoria.

Creo que la JVM puede manejar esa cantidad de memoria, ya que el sistema operativo lo admite.

Cuestiones relacionadas