Как я понимаю, для CLR это один на время выполнения, а не на домен приложения. Из Джеффри Рихтера "CLR Via C #"
Обратите внимание, что сборщик мусора не может освободить строки, на которые ссылается внутренняя хеш-таблица, потому что хеш-таблица содержит ссылку на эти объекты String. Строковые объекты, на которые ссылается внутренняя хеш-таблица, не могут быть освобождены до тех пор, пока домен приложения не будет выгружен или процесс не завершится.
Это говорит о том, что таблица отделена от AppDomain.
JVM не имеет этой концепции, поэтому нет двусмысленности. У вас могут быть разные загрузчики классов, но трудно представить, что у вас будут разные загрузчики классов для String.