No.
Primary Data Assets will not all be instantiated at start up.
Only C++ classes get their CDOs (class default object) instantiated at engine startup by default, but they don’t really contain any data. They are typically used as parent classes for Data Assets or Blueprints.
Data Assets usually have a C++ class as their parent class, but Data Assets themselves are just normal assets (like Blueprints) that need to be loaded through Unreal’s loading system. They are not C++ classes. They and their CDOs don’t get automatically loaded or instantiated.
Blueprints are also normal assets which have either another parent blueprint or C++ class as the parent, but if you follow a BP’s hierarchy it will always eventually end up with a C++ class as the last parent.
Data Assets and Blueprints are both assets that need to be loaded and Unreal doesn’t make a big difference between them. They are both loaded when:
A: Something else is being loaded that references them (hard/direct reference).
B: Something explicitly loads it, like feeding a soft reference (or Primary Asset ID for Primary Assets) to a loading function.
The biggest difference between Data Assets and Blueprints is that you usually create instances of Blueprints but with Data Assets you load them, read the properties of its class default object (CDO), but never change them or create instances of them at runtime. You basically only use them to contain and read data from (hence the name).
So that’s Data Assets and Blueprints, but you mentioned Primary Data Assets. Let’s dive a bit into that terminology:
A Primary Asset is simply any asset that can be loaded using its PrimaryAssetID. Any asset can be a Primary Asset as long as they override the GetPrimaryAssetId function.
Primary Data Assets are just normal Data Assets that have UPrimaryDataAsset as their parent class (well, a C++ class that has that class as the parent). That base class overrides GetPrimaryAssetId for you and makes the ID the same as the asset name, along with providing asset bundle support.
If your data asset extends a C++ class that has UPrimaryDataAsset as the parent class, but you’re not using it as a Primary Asset (setting its cook rules in the project setting, dynamically loading or instantiating it via its PrimaryAssetId) or using its Asset Bundles feature, then you’re basically using it as a normal UDataAsset.
Primary Assets, including Primary Data Assets, don’t all get loaded at startup. Only when you specifically load them, whether that’s from a hard reference or calling a loading function on it.