Actually you seldom notice this. But, lazarus libraries are noticable slow on graphics and I suspect that this is one factor.
Sadly, that is the only part that actually uses objects. (see graphtype). Afaik nothing is an class in Lazarus that is otherwise in Delphi, so if there
are huge differences, I don't think it is that simple.
There are ways around this - memory pools is a common trick. But, I am not sure if I can do this in FPC by overloading the memory allocation like I can in C++?
No you can't that way, you can install a custom memory manager that pools that allocation size, or use your own factories. The required filling with zeroes of new classes is also in the way.
It is also possible to mass instantiate and destroy instances (iirc fcl-xml's dom unit used to, but it could be that it is removed) by allocating a large block, zeroing it, dividing it up into class.instancesize, setting the vmt and then calling the constructor on it.
In any way it is a good thing to understand how the delphi class construction works (including mem safety in case of exceptions in construction), this because there are hooks you can (ab)use.