La respuesta general es que el patrón de uso de la memoria de Java difiere de otras aplicaciones, ya que utiliza la recolección de basura en una memoria de tamaño fijo, por lo que obtiene toda la memoria que podría usar por adelantado en lugar de obtenerla cuando sea necesaria.
El inicio es la JVM que asigna la memoria, entonces creo que su recolección de basura tiende a acceder a la memoria a menudo o, de lo contrario, ha asignado el gran conjunto de datos Java y solo accede a una parte. Por lo tanto, se accede al 11G de memoria pero no lo suficiente como para marcarlo como activo. Un programa basado en C no tendrá un hilo de fondo en todas las páginas de la memoria, por lo que las páginas pueden estar inactivas el tiempo suficiente para ser intercambiadas.
Por experiencia, aunque en otros sistemas operativos, Java realmente se ralentiza si se intercambia alguna de su memoria y ajusta el tamaño de su VM para que no lo haga. Si necesita más memoria, obtenga más RAM o modifique el algoritmo para usar menos.