There are currently three ways in Blender to procedurally instantiate (or duplicate) objects directly from other objects. These options are located in thepanel.
There are other ways to indirectly instantiate objects, e.g. from a particle system…
This creates an instance of all children of this object on each vertex (for mesh objects only).
This creates an instance of all children of this object on each face (for mesh objects only).
This creates an instance of the collection with the transformation of the object. Collection instancers can be animated using actions, or can get a Proxy.