Simple example:
Scene consists of a mesh(character) and it's skinned rig.
When you duplicate a lot of the same objects using Shift+D, blender creates new mesh-data for every instance. All of these mesh-data has to be load into the memory before rendereing, but if you do not change anything on a dupli-mesh, the mesh-data dupli is unnecessary.
To 'fix' this, you can manually change the mesh data in the properties panel:
Or you can use the shortcut Alt+D (instead of Shift+D)! This way will also 'link' your meshes: if you move a vertex in one, it will change in every linked mesh.
Also when rendering a lot of objects in Cycles, a good way to handle memory is to use the 'Adaptive-subdivisions' option:
This feature is currently still under 'experimental' though.