While(true) parando sem motivo

Olá pessoal! estou com um problema muito estranho que não encontro a causa e gostaria de ver se alguém já viu algo parecido.

O Método abaixo é uma função que retorna uma lista de mensagens.
Vejam que não há condição de saída uma vez que preciso que este loop rode enquanto meu aplicativo estiver sendo executado.

O que ele faz basicamente é buscar uma lista de mensagens e verificar se já existe uma conversa para o numero, se já existir ele captura a conversa e da continuidade ao fluxo. Se não existir instancia um novo objeto Conversa e adiciona na lista de conversas.

O que ocorre é que este loop para de rodar sem mais nem menos e não imprime nenhuma das mensagens que coloquei no código. É como se “true” começasse a valer “false” no while.

private static void msgListener() {
	while (true) {
		ArrayList<MensagemJSON> lm = Listener.getMensagensEntrada();
		System.out.println("Chamou listener em  " + sdf.format(new Date()) + " - " + lm.size() + " mensagens...");
		if (lm.size() > 0 && lm != null) {
			try {

				lm.forEach(msgs -> {
					Optional<Conversas> lc = getListadeconversas().stream().filter(f -> f.getCelular().getNumCompleto().equals(msgs.getNumero())).findFirst();
					if (lc.isPresent()) {
						Conversas c = lc.get();
						c.setMensagen(msgs.getMsg());
						Menus.gerentedemenus(c);
					} else {
						Conversas c = new Conversas(new Celular(msgs.getNumero()), "inicio", msgs.getNomePush());
						getListadeconversas().add(c);
						Menus.gerentedemenus(c);
					}
				});

			} catch (Exception e) {
				System.out.println("Erro no listener de mensagens");
			}

		} else {
			System.out.println("Entrou no else");
		}

	}
}

Alguém tem ideia do que pode estar ocorrendo?

uma observação é que tenho este aplicativo rodando em duas VMs dentro do Hyper-v, e o problema não ocorre com frequência por isso não consigo pegar ele em um debug. Hora o código roda horas sem travar e hora em poucos segundos ele para.

Se alguém já passou por algo parecido por favor me dê uma luz.

Obrigado desde já.

Alguma exceção está sendo lançada e matando a máquina virtual. Não tem absolutamente nada a ver com o true virar false. Se isso fosse verdade, teríamos um problema sério no universo…
Vc precisa fazer o log da exceção para depois poder consultar e ver o que aconteceu.

Imagino que seja isso mesmo, mas não faço ideia do porquê não imprime nada e não entra no catch.
(kkk essa do true virar false ia destruir o mundo mesmo! :rofl::rofl::rofl:)
Como pego esse log da exceção que você sugere?

Vc pode configurar algum mecanismo de log ou então salvar um arquivo com os dados da exceção (stack trace) quando ela ocorrer, ali dentro do seu catch.