LANGUAGE/!$%!% ERROR NOTE 2017. 11. 3. 15:03

Java

1. Error (에러)

java.lang.StackOverflowError
    at java.util.regex.Pattern$Branch.match(Pattern.java:4110)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
    at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
    at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
    at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
    at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
    at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
    at java.util.regex.Pattern$Branch.match(Pattern.java:4114)

2. Problem (문제)

보통 StackOverFlow 에러는 무한 루프가 발생할 경우의 수를 간과했을 때 발생한다.

하지만, 복잡한 정규식큰 문자열로도 일어날 수 있다.

정말 무수히 많은 경우의 수를 파악하려면 많은 검증 로직이 실행되어야 하기 때문일 것 같다.

3. Solved (해결)

기본적으로 JVM에 Stack의 메모리크기가 512KB 또는 1MB로 할당되어 있다.

부족하다면?

좋은 해결책인지는 모르겠으나, Xss이라는 JVM옵션으로 StackOverFlow가 발생하는 제한 수치를 늘릴 수 있다.

  • 20MB 할당 예)
-Xss20m

4. ETC (기타)

  • set initial Java heap size 
-Xms<size> 
  • set maximum Java heap size 
-Xmx<size>
  • set java thread stack size
-Xss<size> 

4. Reference (참고)