ตามที่ได้รับคำตอบไปแล้วมันเป็นไปได้ที่จะรันโค้ดและโดยเฉพาะอย่างยิ่งในการเรียกใช้ฟังก์ชันหลังจากที่จับได้StackOverflowErrorเนื่องจากขั้นตอนการจัดการข้อยกเว้นตามปกติของ JVM จะคลายสแต็กระหว่างจุดthrowและcatchจุดโดยเพิ่มพื้นที่สแต็กเพื่อให้คุณใช้งานได้ และการทดสอบของคุณยืนยันว่าเป็นเช่นนั้น
อย่างไรก็ตามนั่นไม่เหมือนกับการบอกว่าโดยทั่วไปแล้วเป็นไปได้ที่จะกู้คืนจากไฟล์StackOverflowError.
StackOverflowErrorIS-A ซึ่งเป็น-AnVirtualMachineError Errorดังที่คุณชี้ให้เห็น Java ให้คำแนะนำที่คลุมเครือสำหรับError:
แสดงถึงปัญหาร้ายแรงที่ไม่ควรพยายามจับแอปพลิเคชันที่สมเหตุสมผล
และคุณมีเหตุผลสรุปได้ว่าควรจะดูเหมือนการจับErrorได้ในบางสถานการณ์ โปรดทราบว่าการทำการทดลองหนึ่งครั้งไม่ได้แสดงให้เห็นว่าโดยทั่วไปมีความปลอดภัยที่จะทำ เฉพาะกฎของภาษา Java และข้อกำหนดของคลาสที่คุณใช้เท่านั้นที่ทำได้ A VirtualMachineErrorเป็นคลาสพิเศษของข้อยกเว้นเนื่องจากJava Language SpecificationและJava Virtual Machine Specificationให้ข้อมูลเกี่ยวกับความหมายของข้อยกเว้นนี้ โดยเฉพาะอย่างยิ่งหลังพูดว่า :
การใช้งาน Java Virtual Machine จะพ่นอ็อบเจ็กต์ที่เป็นอินสแตนซ์ของคลาสย่อยของคลาสVirtualMethodErrorเมื่อข้อผิดพลาดภายในหรือข้อ จำกัด ของทรัพยากรป้องกันไม่ให้นำความหมายที่อธิบายไว้ในบทนี้ไปใช้ ข้อกำหนดนี้ไม่สามารถคาดเดาได้ว่าอาจพบข้อผิดพลาดภายในหรือข้อ จำกัด ของทรัพยากรและไม่ได้รับคำสั่งอย่างแม่นยำเมื่อสามารถรายงานได้ ดังนั้นVirtualMethodErrorคลาสย่อยใด ๆ ที่กำหนดไว้ด้านล่างนี้อาจถูกโยนทิ้งได้ตลอดเวลาระหว่างการทำงานของ Java Virtual Machine:
...
StackOverflowError: การใช้งาน Java Virtual Machine ไม่มีพื้นที่สแต็กสำหรับเธรดโดยทั่วไปเนื่องจากเธรดกำลังดำเนินการเรียกใช้ซ้ำจำนวนที่ไม่ถูกผูกไว้อันเป็นผลมาจากข้อบกพร่องในโปรแกรมที่เรียกใช้งาน
ปัญหาที่สำคัญคือคุณ "ไม่สามารถคาดเดา" ได้ว่าStackOverflowErrorจะโยนไปที่ใดหรือเมื่อใด มีการค้ำประกันไม่เกี่ยวกับการที่จะไม่ถูกโยน คุณไม่สามารถวางใจได้ว่ามันถูกโยนเข้าสู่เมธอดตัวอย่างเช่น มันอาจถูกโยนไปที่จุดหนึ่งภายในวิธีการ
ความไม่สามารถคาดเดาได้นี้อาจเป็นหายนะ เนื่องจากสามารถโยนลงในวิธีการหนึ่งมันอาจถูกโยนบางส่วนผ่านลำดับของการดำเนินการที่คลาสถือว่าเป็นการดำเนินการแบบ "อะตอม" โดยปล่อยให้อ็อบเจ็กต์อยู่ในสถานะที่แก้ไขบางส่วนไม่สอดคล้องกัน เมื่อวัตถุอยู่ในสถานะที่ไม่สอดคล้องกันความพยายามใด ๆที่จะใช้วัตถุนั้นอาจส่งผลให้เกิดพฤติกรรมที่ผิดพลาด ในกรณีที่การปฏิบัติทั้งหมดที่คุณไม่สามารถรู้ซึ่งวัตถุอยู่ในสถานะที่ไม่สอดคล้องกันดังนั้นคุณต้องคิดว่าไม่มีวัตถุเป็นที่น่าเชื่อถือ ใด ๆ ที่ดำเนินการกู้คืนหรือความพยายามที่จะดำเนินการต่อหลังจากข้อยกเว้นที่ถูกจับได้จึงอาจมีลักษณะการทำงานที่ผิดพลาด สิ่งเดียวที่ปลอดภัยที่ต้องทำคืออย่าจับไฟล์StackOverflowErrorแต่เป็นการอนุญาตให้โปรแกรมยุติ (ในทางปฏิบัติคุณอาจพยายามบันทึกข้อผิดพลาดบางอย่างเพื่อช่วยในการแก้ไขปัญหา แต่คุณไม่สามารถพึ่งพาการบันทึกนั้นได้อย่างถูกต้อง) นั่นคือคุณไม่สามารถกู้คืนไฟล์StackOverflowError .