I guarantee the following statements.
- With Perl 5.8.2 running on Linux 2.4, I saw no such behaviour.
- Perl's documentation is readily available, and clearly documents that Perl does reference counting.
- Perl has reliable destructor behaviour, which no efficient true GC algorithm that I have seen offers.
- Parrot does use true GC, and there have been more than a few debates about what to do about reliable destructor behaviour with that switch.
- Perl's source-code is readily available, the SV struct has a field known as sv_refcnt, with macros like SvREFCNT_inc and SvREFCNT_dec to manipulate it. This is the reference counting mechanism.
- Perl has support to actually try to return unused memory to the OS where the OS supports that. I don't know the details of that support, but I've seen chip point it out, and I trust that he knows what he is talking about.
- I do not know how reliable Windows profiling tools are, or how the above-mentioned support for returning memory to the OS actually works. It is not impossible that what you describe has something to do with how Windows handles that interaction, or with how the profiling tools track stuff. I venture no guesses on how likely that is.
As a result of them I maintain my stated position. For good or bad, Perl 5 does NOT have a garbage collector that stops the program in the middle of running and proceeds to detect garbage.