Best practice: projectile destroy or allocate a list?

How does Unity handle "garbage" collection for old objects? Lets say I make a railgun, pumping 2000 rounds per minute.

Each projectile is fired, with own angle and has its own collision upon impact with "stuff". Every time the project hits something, I trigger "something" and remove the projectile.

Now...

Should I make my own "ProjectileListManager" or is the buildin Unity "destroy/instantiate" features doing exactly this sort of thing automatically?

Which is best practice?

Doing the garbage collection and reallocation myself or is this done "optimal" already?

im pretty sure unity does it fine with Destroy, once you get into networking it gets more complicated