Correct, but usually losing a single message is not a critical issue.
Why jvm would die?
Why not? It's a usal process in your OS, which can be killed. Or you can get OOM or any other problems like DB connection problems. And you loose your data, if you need a delivery guarantee this way to handle message is incorrect.
As i looked through some protocols (Wialon, Galileo), when you receive message you immediatly reposnse that you've received message (ExtendedObjectDecoder.decode). Consequently if jvm dies after this repsone, we didn't save any message to database and device will not send it us again, so the message is lost. Correct me if I'm wrong.