Java obter memória disponível

Existe alguma boa maneira de obter a memória restante disponível para a JVM em tempo de execução? O caso de uso disso seria ter serviços da Web que falham normalmente quando estão se aproximando de seus limites de memória recusando novas conexões com uma boa mensagem de erro "muitas pessoas usando isso, tente novamente mais tarde", em vez de morrer abruptamente com um erro OutOfMemory .

Observe que isso não tem nada a ver com o cálculo / estimativa do custo de cada objeto antecipadamente. Em princípio, eu poderia estimar a quantidade de memória que meus objetos recebem e recusar novas conexões com base nessa estimativa, mas isso parece meio hacky / frágil.

questionAnswers(8)

yourAnswerToTheQuestion