For smaller content parts (up top a few GB) content transfers may also be done using CRX packages. However, that's usually not the optimal way for large amounts of assets.
If your AEM topology is running at Adobe Managed Services (AMS), your CSE can assist as well. AMS has automated ways for content synchronization available.
There is no one-size-fits-all solution. The right methodology and tool has to be selected based on the specific use case.
There are some important points to be considered when transferring assets between instances:
If you have custom metadata namespaces, make sure that these are transferred as well. Trying to import assets that have metadata with custom namespaces may fail if the namespace is not available on the target instance depending on the methodology used.
Are transferring only original assets or does your transfer already include required renditions? If renditions are already included, make sure to deactivate the workflow launchers for the DAM Update Asset workflow to avoid costly re-generation of renditions.
Are you using Dynamic Media? If yes, there are instance-specific details in the metadata of your assets that point to the Dynamic Media instance connected to the source instance. Make sure to handle that case properly and (re-) synchronize your assets with/to Dynamic Media on the target instance.