A full GC is will be triggered when your objects become long lived (ie. are promoted from the young generations to the old). And then it will be triggered only if there is a need to because of memory pressure.
So what you would need to do is store a lot of objects in a long lived structure like a HashMap. A huge HashMap. Then let it sit for a long time and then attempt to allocate large objects.
Also, most GC algorithms try to avoid Full GC as much as possible. So using an older algorithm like ConcurrentMarkAndSweep may make it easier to trigger. Getting it to happen with the G1 collector is in theory possible but won't be easy.
For the G1 collector allocating many objects that survive collections and then trying to allocate very large objects may trigger it. But it isn't going to be easy.
I've seen them in the wild with a huge heap. It's probably easier to reproduce with 16+ GB of RAM than with a small heap (I see you are using 20 GB which is good).