When you create your very first tween, that tween is instantiated as usual, but after that DOTween starts using a pooling system to recycle unused tweens (if recycling is active).
Each time a tween is killed, that tween is not truly destroyed, but is instead reset, despawned and put in a pool, where it waits for you to need a similar tween again. When you do, DOTween checks its pool and sees if there's a suitable tween already. If there is, it despawns it and gives it back to you as if new but without instantiation and thus no GC allocations. If there isn't it instantiates a new one.
DOTween requires a different type of tween for each type of value tweened and for Sequences. So for example a Tweener that animates a Vector3 can be recycled for another Vector3 but not for a float. A Sequence can instead be recycled for any other Sequence.
Let's say we set the max tweens capacity to 10 Tweeners.
At startup, we create 5 Vector3 tweens and 5 Quaternion tweens. Since the pool is empty they will all be instantiated. When they finish playing, our pool will contain 10 "empty" tweens.
Now we create 5 new Vector3 tweens. Since the pool has them, they're spawned instead than instantiated. Again, we let them play and autokill.
Now we create 5 float tweens. The pool doesn't contain float tweens, so instantiation will happen. Since the max number of pooled tweens has already been reached (it's the same as the tweens capacity, except that while active tween size is automatically incremented when needed, pool size always stays the same as the max active tweens) DOTween will destroy the oldest 5 tweens and instantiate the new ones.
If you just need the same tween over and over but with different values, it's even better to just store a reference to it and change its start/end value or duration directly.