Two methods of instancing- which is better?

Until recently, I’ve always created copies of an object by creating one object (in this case lets say its a tree) adding it to a group, moving it to a far off layer, and than adding several group instances of it. (Add - group instance: tree) This way, if I modify the original, all of the instances of it will also be modified.
But… The other day I was playing around and discovered that I could instead spawn a cube and change the actual mesh (the icon on the object view that shows three edges and vertices connected) to the object I want to create duplicates of. Unlike spawning a group instance, this only creates the mesh (group instances create an empty as well as a mesh) so I assume it’s cheaper.
My question is, is one of these methods better than the other for creating instances? Is there another method that I do not know about that is even better?

There wasn’t a keyboard shortcut to do exactly that? Alt+D I think. Using group instances seems more cleaner, though I never use it.

What would you do if you had to design something like a forest than? Making each tree unique seems pretty messy.

Are you talking about geometry instancing?

BGE doesn’t really support that, however UPBGE does, you can have thousands of the same object but the performance impact will be highly reduced (according to the UPBGE notes around 75% faster), you can have some variation too.

Its perfect for things like grass, trees, rocks etc.

Well the fact that I not usually use group instancing doesn’t mean that I would never use it (its not like SCA ;)), but probably in such case I would use UPBGE to start with, and if the forest really needs to be huge I would have to make my own addon to implement open worlds in blender (+ terrain editor) so it would take months.

Group instances are great when you need more than just another instance of a mesh (e.g. logic, several object of the group). Keep in mind you always get an additional empty (the instantiating object).

When you just want to replicate the mesh, <alt-d> is a better choice as you share the mesh.

They are both useful in different cases. If I had to pick one, I’d say that I find duplicating groups to be useful slightly more often. (It works nicely across multiple blend files, can have multiple objects, includes game properties, modifiers etc.)