All messages are loaded into the JVM memory as they are processed. In the case of an FTP receiver, the message is loaded into memory by the receiver, and then it is placed into the inbound queue. When the processor picks it up the memory is effectively doubled to keep a copy as the source, and a copy as the message. The general rule of thumb is that if you need to process a 1GB file, you should have at least 4x that allocated to QIE, so at least 4GB of ram allocated to the QIE service.
In the case of a 9GB file, you would need at least 36GB, but probably closer to 40GB of memory allocated to the QIE service to process it. You also have to take into account if other channels are processing at the same time as the large file they would need memory as well.
The better option for handling large files is to use the "Large File Handling Options" on the FTP receiver. This will stream the file directly to disk preventing the need for the engine to load the whole message into memory. Once the file is locally on disk, it adds a message to the inbound with information about where the large file exists and it's name. You can then send the large file to another location using streaming options, or you can process the file by reading it up a portion at a time.
More information can be found on the large file handling here: How to use "Large File Handling" options.