JAVA, 81 79 78 байт
JAVA (HotSpot) 71 70 байт
Коротше, ніж інші відповіді Java на час публікації (81, пізніше 79 байт):
class A{public static void main(String[]a){String x="1";for(;;)x+=x.intern();}}
Як запропонував @Olivier Grégoire, подальший байт можна зберегти:
class A{public static void main(String[]a){for(String x="1";;)x+=x.intern();}}
Розміщення x+=x.intern()як збільшення для циклу не допоможе нічого, тому що крапка з комою все ще потрібна для завершення оператора for.
Як запропонував @ETHproductions, просто використання x+=xтворів також:
class A{public static void main(String[]a){String x="1";for(;;)x+=x;}}
Що також може отримати користь від поради @Olivier Grégoire:
class A{public static void main(String[]a){for(String x="1";;)x+=x;}}
Моя єдина побоювання з цього приводу полягає в тому, що не гарантується розподіл даних по купі , оскільки ефективний JVM може легко зрозуміти, що xніколи не уникає локальної функції. Використання intern()дозволяє уникнути цього занепокоєння, оскільки інтерновані рядки в кінцевому підсумку зберігаються в статичному полі. Однак HotSpot дійсно генеруєOutOfMemoryError для цього коду, так що я думаю, що це добре.
Оновлення: @Olivier Gregoire також зазначив, що x+=xкод може працювати, StringIndexOutOfBoundsExceptionа не OOMколи багато пам'яті. Це тому, що Java використовує 32-розрядний intтип для індексації масивів (а Strings - це просто масиви char). Це не впливає на x+=x.intern()рішення, оскільки пам'ять, необхідна для останнього, є квадратичною по довжині рядка, і, таким чином, повинна масштабуватися до порядку 2 ^ 62 виділених байтів.