La respuesta general es que el patrón de uso de memoria de Java difiere de otras aplicaciones, ya que utiliza la recolección de basura en una memoria de tamaño fijo, obteniendo así toda la memoria que podría utilizar por adelantado en lugar de obtenerla cuando se necesita..
El inicio es la JVM asignando la memoria, entonces creo que su recolección de basura tiende a acceder a la memoria con frecuencia o bien ha asignado el gran conjunto de datos de Java y sólo acceder a parte de ella. Por lo tanto, se accede a los 11G de memoria pero no con la suficiente frecuencia como para marcarlos como activos. Un programa basado en C no tendrá un hilo de fondo mirando 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 se ralentiza mucho si se intercambia parte de su memoria y se ajusta el tamaño de su VM para que no lo haga. Si necesita más memoria, entonces consiga más RAM o altere el algoritmo para usar menos.