How can I save memory in cycles when I have a lot of duplicates?
Instancing
Use instanced geometry (and objects) - instanced duplicates won't consume memory.

Alt+D will link the mesh data and save memory (Shift+D will not). You can have different materials applied to objects with the same mesh (link the material to object not to mesh)
Use Dupliverts/Duplifaces or Group Instances - this links whole objects (groups). This will save the most memory.
Use linked object (groups) from another .blend (Ctrl+Alt+O) multiple times - same memory savings as previous.

Multiple Renderlayers
Divide your scene objects into multiple render layers and combine them into a single image in the compositor. This way you can defer the memory load across multiple rendering sessions.
Texture optimization
For Blender 2.78 and up: Bindless Textures are now supported on GPU, which means only limit is now VRAM and a CUDA limit of 256 textures. Cycles now has support for single-channel textures - therefore no need to pack textures.
For older Blender versions: pack your black &amp; white textures (masks, influences, specular maps, etc.) into channels of color textures (1 color texture with alpha - tga/png - can store 4 BW textures or 1 RGB and a mask). This can save the GPU memory in texture heavy scenes significantly. Old Cycles does not use single-channel for BW.