Obter a JVM para aumentar a demanda de memória, conforme necessário, até o tamanho do limite da VM?

Nós enviamos uma aplicação Java cuja demanda de memória pode variar bastante dependendo do tamanho dos dados que está processando. Se você não definir o tamanho máximo da VM (memória virtual), muitas vezes a JVM é encerrada com uma falha do GC em grandes volumes de dados.

O que gostaríamos de ver é que a JVM está solicitando mais memória, já que o GC não fornece o suficiente, até que a VM total disponível esteja esgotada. por exemplo, comece com 128Mb e aumente geometricamente (ou alguma outra etapa) sempre que o GC falhar.

A linha de comando da JVM ("Java") permite a configuração explícita de tamanhos máximos de VM (vários comandos -Xm *) e você acha que isso seria projetado para ser adequado. Tentamos fazer isso em um arquivo .cmd que enviamos com o aplicativo. Mas se você escolher um número específico, você terá um dos dois comportamentos ruins: 1) se seu número for pequeno o suficiente para funcionar na maioria dos sistemas alvo (por exemplo, 1Gb), não é grande o suficiente para grandes dados ou 2) você o torna muito grande, a JVM se recusa a executar nos sistemas cuja VM real é menor que a especificada.

Como alguém configura o Java para usar a VM disponível quando necessário, sem saber esse número antecipadamente e sem pegar tudo na inicialização?