검색결과 리스트
글
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 (참고)
java.lang.StackOverflowError while using a RegEx to Parse big strings: https://stackoverflow.com/questions/7509905/java-lang-stackoverflowerror-while-using-a-regex-to-parse-big-strings
java.lang.StackOverflowError – How to solve StackOverflowError: https://examples.javacodegeeks.com/java-basics/exceptions/java-lang-stackoverflowerror-how-to-solve-stackoverflowerror/
How to increase Heap size of JVM [duplicate]: https://stackoverflow.com/questions/6452765/how-to-increase-heap-size-of-jvm