Currently the mempool isn't persisted across restarts. The historical argument against doing this is that it would make transactions immortal. Expiration now addresses that issue.

Without preserving the mempool node behavior changes drastically across restarts which complicates production use (e.g. mining overly small/low fee blocks) as well as development testing. The lack of retention also causes the loss of txn priority modifications made with prioritisetransaction which makes the API less reliable.

void operator() (CTxMemPoolEntry &e) { e.UpdateFeeDelta(feeDelta); }
private:
    int64_t feeDelta;
};
struct update_lock_points
{
    update_lock_points(const LockPoints& _lp) : lp(_lp) { }
    void operator() (CTxMemPoolEntry &e) { e.UpdateLockPoints(lp); }
private:
    const LockPoints& lp;
};
struct mempoolentry_txid
{
    typedef uint256 result_type;
    result_type operator() (const CTxMemPoolEntry &entry) const
    {
        return entry.GetTx().GetHash();
    }
};
/** \class CompareTxMemPoolEntryByDescendantScore
 *
 *  Sort an entry by max(score/size of entry's tx, score/size with all descendants).
 */
class CompareTxMemPoolEntryByDescendantScore
{
public:
    bool operator()(const CTxMemPoolEntry& a, const CTxMemPoolEntry& b)