자바, 81 79 78 바이트
자바 (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 문을 끝내려면 세미콜론이 여전히 필요하므로 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코드가 실행될 수 있다고 지적했습니다 . Java는 32 비트 유형을 사용하여 배열을 인덱싱하고 문자열은의 배열 일뿐입니다 . 후자에 필요한 메모리가 문자열 길이의 2 차이므로 솔루션에 영향을 미치지 않으므로 2 ^ 62 할당 바이트 정도까지 확장해야합니다.StringIndexOutOfBoundsExceptionOOMintcharx+=x.intern()