When I press alt + D, I create an instance of an object. My triangle count don't change though.
Incorrect! You don't create an instance, though you have the right to mean something different by the word instance - still, AltD is an operator that creates a new object wrapper for the mesh (in your case). It is a linked copy, everything is linked to the same data as the original object, including its mesh (so it makes some sense to call it an instance of the mesh, but not the object). The triangle count of all your meshes doesn't increase, because you didn't create a new mesh, but the displayed triangle count of course does increase.
When I press shift + D, I create a duplicate of an object. Triangle count goes up.
Correct! You Duplicate the object, which also duplicates a mesh associated with this object.
When I create an array modifier, are the cloned objects instances, or duplicates?
Neither. The Array Modifier doesn't duplicate your object as if you pressed AltD or ShiftD in Object Mode. Instead, it duplicates it as if you pressed ShiftD in Edit Mode. You don't produce new meshes or objects this way, you also don't modify the Mesh data until you apply the modifier.
If so, how do I use the array modifier to produce duplicates without producing additional geometry?
You can't. You can use Geometry Nodes instead, or Instancing (first link) - basically, instead of using an array on your object, use it on a single vertex or a plane, and then set that vertex/plane object to be an instancer, and parent your object to that instancer. If you don't want to actually use instances, you can then (even without applying the Array modifier) select the instancer, F3
Make Instances Real. This will produces deep-linked objects using a single mesh (as if you used AltD)