मैं यहां आया क्योंकि मैं चाड फाउलर द्वारा The Passionate Programmer में इस प्रश्न में भी भाग गया था। जिन लोगों के पास प्रतिलिपि नहीं है, उनके लिए प्रश्न "वास्तव में अच्छे जावा प्रोग्रामर" की आवश्यकता वाले पद के लिए साक्षात्कार करने वाले उम्मीदवारों के लिए फ़िल्टर/परीक्षण के रूप में तैयार किया गया है।
विशेष रूप से, वह पूछता है:
How would you write a program, in pure Java, that would cause the Java Virtual Machine to crash?
मैं 15 साल के लिए जावा में प्रोग्राम है, और मैं इस सवाल का पाया दोनों पेचीदा और अनुचित होने के लिए। जैसा कि अन्य ने इंगित किया है, जावा, एक प्रबंधित भाषा के रूप में, विशेष रूप से को को क्रैश नहीं करने के लिए डिज़ाइन किया गया है। बेशक हमेशा JVM बग होते हैं, लेकिन:
- उत्पादन-स्तर जेआरई के 15+ वर्षों के बाद, यह दुर्लभ है।
- ऐसी किसी भी बग को अगली रिलीज में पैच करने की संभावना है, तो आप जेआरई शो-स्टॉपर्स के वर्तमान सेट के विवरण को चलाने और याद करने के लिए प्रोग्रामर के रूप में कितने संभावित हैं?
जैसा कि अन्य ने उल्लेख किया है, जेएनआई के माध्यम से कुछ मूल कोड जेआरई को तोड़ने का एक निश्चित तरीका है। लेकिन लेखक ने विशेष रूप से शुद्ध जावा में उल्लेख किया है, तो यह बाहर है।
एक और विकल्प जेआरई बोगस बाइट कोड को खिलाना होगा;
$ echo 'crap crap crap' > crap.class
$ java crap
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1668440432 in class file crap
कि गिनती करता है: यह एक .class फाइल करने के लिए कुछ कचरा बाइनरी डेटा डंप करने के लिए, और JRE पूछना इसे चलाने के लिए बहुत आसान है? मेरा मतलब है कि जेआरई खुद दुर्घटनाग्रस्त नहीं हुआ है; यह ठीक से बोगस कोड का पता चला, इसकी सूचना दी, और बाहर निकला।
यह हमें सबसे स्पष्ट प्रकार के समाधानों के साथ छोड़ देता है जैसे रिकर्सन के माध्यम से ढेर उड़ाना, ऑब्जेक्ट आवंटन के माध्यम से ढेर मेमोरी से बाहर चलना, या बस RuntimeException
फेंकना। लेकिन यह सिर्फ जेआरई को StackOverflowError
या इसी तरह के अपवाद के साथ बाहर निकलने का कारण बनता है, जो कि फिर से वास्तव में क्रैश नहीं है।
तो क्या बचा है? मुझे वास्तव में यह सुनना अच्छा लगेगा कि लेखक को वास्तव में उचित समाधान के रूप में क्या दिमाग में था।
अद्यतन: चाड फाउलर responded here।
पुनश्च: यह एक अन्यथा महान पुस्तक है। रुबी सीखते समय मैंने इसे नैतिक समर्थन के लिए उठाया।
आवेशपूर्ण प्रोग्रामर, हाँ, महान पुस्तक; की – dolzenko
संभव superset): http://stackoverflow.com/questions/6470651/बनाने एक स्मृति-रिसाव के साथ-जावा –
https://stackoverflow.com/questions/30072883/java-swing-jwindow-application-crash "अगर मैं का उपयोग JDK1.8_40 या नए (Oracle या OpenJDK करना एक ही), एक संवाद आकार बदलने के साथ कोड एक साथ निम्न अनुप्रयोग (कोशिश की विंडोज 7, 64, 64 बिट JDK दुर्घटना होगा) "- कोड केवल 40 लाइनों है, और यह JVM के एक * उचित दुर्घटना * कारण बनता है। –