A heap dump taken of a large server under write load shows one PersistentSearch instance using a significant amount (2GB) of heap space (total heap size is 32GB.)
Analysis with Eclipse MAT shows that psearch operation has a attachment key "reactive.out". The value for that key is a FlowableCreate.SerializedEmitter, and that has a consumerBuffer that is 2GB in size. The buffer contains an array of (many) SearchResultEntryImpl objects.
It is unclear at present why the consumerBuffer is so large. A theory is that the psearch client has stopped reading, or is slow reading.