Java String.toLowerCase中的StackOverflower错误

Java String.toLowerCase中的StackOverflower错误,java,string,htmlunit,stack-overflow,Java,String,Htmlunit,Stack Overflow,该字符串看起来太长,导致以下异常: Caused by: java.lang.StackOverflowError at java.lang.String.toLowerCase(String.java:2496) at com.gargoylesoftware.htmlunit.html.NamedAttrNodeMapImpl.fixName(DomElement.java:489) at com.gargoylesoftware.htmlunit.html.Name

该字符串看起来太长,导致以下异常:

Caused by: java.lang.StackOverflowError
    at java.lang.String.toLowerCase(String.java:2496)
    at com.gargoylesoftware.htmlunit.html.NamedAttrNodeMapImpl.fixName(DomElement.java:489)
    at com.gargoylesoftware.htmlunit.html.NamedAttrNodeMapImpl.get(DomElement.java:602)
    at com.gargoylesoftware.htmlunit.html.DomElement.getAttribute(DomElement.java:215)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.getStyleMap(CSSStyleDeclaration.java:634)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getStyleMap(ComputedCSSStyleDeclaration.java:243)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.getStyleAttribute(CSSStyleDeclaration.java:472)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getStyleAttribute(ComputedCSSStyleDeclaration.java:162)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.jsxGet_position(CSSStyleDeclaration.java:4008)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.jsxGet_position(ComputedCSSStyleDeclaration.java:1304)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getPositionWithInheritance(ComputedCSSStyleDeclaration.java:1883)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1737)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
我猜是
computedcsstyledeclaration
中的循环导致了这个问题

字符串的物理极限是多少?
我可以限制
ComputedCSSSStyleDeclaration
的循环检测器吗?

原因是代码中存在递归调用。请查收

更深入地了解JVM来解释这个问题:java虚拟机规范规定了java堆栈的两种异常情况:

  • Java堆栈允许自动扩展,它将抛出
    OOM(OutOfMemory)
    当它无法应用足够的内存时出错。
  • Java堆栈由堆栈框架构成,每个Java 方法推送一个帧,当 当前线程的堆栈深度大于jvm允许的堆栈深度

  • 也许可以帮你:)

    这方面已经有漏洞了吗

    当然,这可能是由于太深的html结构和使用递归而不是迭代的实现造成的。字符串的长度受数组长度的限制,即2^31-1这方面是否已经存在漏洞@翡翠爪哇砰,就是这样。请回答这个问题,好吗?你来对地方了
    OutOfMemory
    是一个错误,不是一个例外。你不可能捕捉到来自记忆错误的
    OutOfMemoryError
    嗯,你可以捕捉到它,这只是一个非常糟糕的主意。