After startup the node will display the estimated max memory usage but not everything is accounted for and some block processing / some fast sync temporary caches may go above these values.
You can use the config option --Init.MemoryHint to suggest the amount of memory to be used by the database and some network operations. During the sync process there will be more memory used for caches.
Suggested requirements can be found below.
You can try much lower setups with smaller networks. You can also downgrade the VM after initial sync (if you have used 16GB RAM for sync then 4GB RAM should be enough to run a synced mainnet node with --Init.MemoryHint 1500000000
Goerli Fast Sync
Mainnet Fast Sync
Rinkeby Fast Sync
Ropsten Fast Sync
Mainnet Full Archive
Disk space requirements:
A freshly fast synced mainnet disk space usage (as of July 2020):