Vector objects are for convenience, readability, and maintainability. For optimal performance, use scalar primitives like float/int/double. But then you wind up with verbose code full of variables like positionX, velocityY and so on.
Obsession with performance leads to coding miracles like this one:
Yes, it works, but before modifying it in any way, one would probably completely rewrite it.
Performance only matters when it’s visible to the end user. In a real-time Java game, that typically means stutters caused by garbage collection. And there’s a solution for that, namely -XX:+UseConcMarkSweepGC.