Lets say I'm restarting my bitcoin node after a few days being offline. Since mempool is in RAM, my mempool is empty. Do I ask my peers for transactions I missed to fill my mempool or do I just normally receive transactions and when validating a block asking for missing transactions and put them directly into the UTXO? And Is the UTXO set also in RAM or stored on the HD?
The mempool is dumped onto the disk at shutdown. It's contained within mempool.dat within the data directory.
CMIIW, the reference client synchronizes first before repopulating the mempool again. It would make sense for them to catch up with the best tip so that any transactions spending the same UTXO within the mempool can be removed more efficiently.
My take on the issue is that discrepancies between mempool size should be a result of the user's configuration more than the nature of the propagation of the transaction. I've previously ran a node and a pruned Bitcoin Core node. When I did arbitrary comparisons, the difference between the two was fairly small, think less than a MB. It's no indication of the bigger picture but I'm inclined to believe that the difference should not be excessively big.