I couldn't get PVs to work initially, but decompiling LSL3 did help me work through it. I tested three different scenarios, with 19 different views for each test:
1) Creating a new View instance on-the-fly (no instance reuse). This was the worst scenario, with 18,862 bytes of heap remaining.
2) Creating a new PV instance on-the-fly (no instance reuse). Better, with 19,414 bytes of heap remaining.
3) Created a single PV instance & reused it. Best, with 20,062 bytes of heap remaining
So there we have it. Looks like I'll be sticking with #3.