Java의 String은 immutable한 객체이기 때문에, 17, 25번째 줄과 같은 문장은 기존의 문자열을 복사해서 새로운 문자열을 만든 뒤 뒤에 내용을 덧붙이는 과정을 거치게 됩니다.
또한 Java는 객체가 메모리에서 소멸하는 시점이 명확하지 않기 때문에, 이와 같이 새로운 객체를 계속 만들게 되면 그 객체들이 계속해서 메모리에 쌓이게 되고, 언제 해제가 될지 정확히 알기 어렵습니다.
따라서 word1에 1, 2, 3, ...과 같이 계속하여 문자열을 더해나가게 되면, 이 과정에서 "1", "12", "123", ... 과 같은 문자열이 전부 새로 만들어지고, 이는 최대 "12345678910111213...9999899999100000"과 같이 엄청나게 긴 문자열들이 총 10만 개 만들어질 것입니다. 이 길이를 전부 합하면 수백 억에 달하므로 주어진 메모리 제한 내로 저장할 수 없게 됩니다.
anwlro0212 1년 전
벙쪄서...왜그런지 이유를 잘모르겠네요.
스택을 너무많이해서 메모리초과가 나는걸까요...?