anwlro0212   1년 전

벙쪄서...왜그런지 이유를 잘모르겠네요.

스택을 너무많이해서 메모리초과가 나는걸까요...?

djm03178   1년 전

Java의 String은 immutable한 객체이기 때문에, 17, 25번째 줄과 같은 문장은 기존의 문자열을 복사해서 새로운 문자열을 만든 뒤 뒤에 내용을 덧붙이는 과정을 거치게 됩니다.

또한 Java는 객체가 메모리에서 소멸하는 시점이 명확하지 않기 때문에, 이와 같이 새로운 객체를 계속 만들게 되면 그 객체들이 계속해서 메모리에 쌓이게 되고, 언제 해제가 될지 정확히 알기 어렵습니다.

따라서 word1에 1, 2, 3, ...과 같이 계속하여 문자열을 더해나가게 되면, 이 과정에서 "1", "12", "123", ... 과 같은 문자열이 전부 새로 만들어지고, 이는 최대 "12345678910111213...9999899999100000"과 같이 엄청나게 긴 문자열들이 총 10만 개 만들어질 것입니다. 이 길이를 전부 합하면 수백 억에 달하므로 주어진 메모리 제한 내로 저장할 수 없게 됩니다.

anwlro0212   1년 전

감사합니다. 덕분에 문제 잘 해결했습니다.

이번에 새로운 사실 또 알아가요!

댓글을 작성하려면 로그인해야 합니다.