আমি প্রোগ্রামিং দক্ষতার উপর একটি বই পড়ছিলাম যেখানে লেখক ইন্টারভিউওয়াকে জিজ্ঞাসা করেছিলেন, "আপনি কীভাবে জেভিএমকে বিধ্বস্ত করেন?" আমি ভেবেছিলাম যে আপনি এমন একটি অসীম লুপ লিখে শেষ পর্যন্ত সমস্ত স্মৃতি ব্যবহার করতে পারেন।
কারও কোন ধারণা আছে?
আমি প্রোগ্রামিং দক্ষতার উপর একটি বই পড়ছিলাম যেখানে লেখক ইন্টারভিউওয়াকে জিজ্ঞাসা করেছিলেন, "আপনি কীভাবে জেভিএমকে বিধ্বস্ত করেন?" আমি ভেবেছিলাম যে আপনি এমন একটি অসীম লুপ লিখে শেষ পর্যন্ত সমস্ত স্মৃতি ব্যবহার করতে পারেন।
কারও কোন ধারণা আছে?
উত্তর:
একটি একক "উত্তর" এর নিকটতম জিনিসটি System.exit()
যা সঠিকভাবে পরিষ্কার ছাড়াই JVM অবিলম্বে সমাপ্ত করে। তবে সেগুলি বাদে, নেটিভ কোড এবং সংস্থানসমূহের ক্লান্তি সবচেয়ে সম্ভবত উত্তর। বিকল্পভাবে আপনি জেভিএম এর আপনার সংস্করণে বাগগুলির জন্য সূর্যের বাগ ট্র্যাকারটির সন্ধান করতে পারেন, যার মধ্যে কয়েকটি পুনরায় পুনরুক্তযোগ্য ক্র্যাশ পরিস্থিতির জন্য অনুমতি দেয়। আমরা 32-বিট সংস্করণগুলির অধীনে 4 গিগাবাইট মেমরির সীমা অতিক্রম করার সময় আধা-নিয়মিত ক্র্যাশগুলি ব্যবহার করতাম (আমরা এখন সাধারণভাবে 64-বিট ব্যবহার করি)।
আমি কোনও আউটআফমিউরিওর বা স্ট্যাকওভারফ্লোএরর ক্র্যাশকে কল করব না। এগুলি কেবলমাত্র সাধারণ ব্যতিক্রম। সত্যিই কোনও ভিএম ক্র্যাশ করার জন্য 3 টি উপায় রয়েছে:
শেষ পদ্ধতির জন্য আমার একটি সংক্ষিপ্ত উদাহরণ রয়েছে, যা একটি সান হটস্পট ভিএম শান্তভাবে ক্র্যাশ করবে:
public class Crash {
public static void main(String[] args) {
Object[] o = null;
while (true) {
o = new Object[] {o};
}
}
}
এটি জিসিতে স্ট্যাকের ওভারফ্লোতে বাড়ে তাই আপনি কোনও স্ট্যাকওভারফ্লো এরিয়ার পাবেন না তবে একটি hs_err * ফাইল সহ একটি আসল ক্রাশ পাবেন।
java.lang.OutOfMemoryError: GC overhead limit exceeded
জেএনআই । আসলে, জেএনআই-এর সাথে ক্রাশ করা অপারেশনের ডিফল্ট মোড। এটি ক্রাশ না হওয়ার জন্য আপনাকে অতিরিক্ত কঠোর পরিশ্রম করতে হবে।
এটা ব্যবহার কর:
import sun.misc.Unsafe;
public class Crash {
private static final Unsafe unsafe = Unsafe.getUnsafe();
public static void crash() {
unsafe.putAddress(0, 0);
}
public static void main(String[] args) {
crash();
}
}
এই শ্রেণিটি অবশ্যই বুট শ্রেণিপথে থাকতে হবে কারণ এটি বিশ্বস্ত কোড ব্যবহার করছে, সুতরাং এটির মতো চালান:
java -Xbootclasspath / p :. ক্র্যাশ
Field f = Unsafe.class.getDeclaredField( "theUnsafe" ); f.setAccessible( true ); unsafe = (Unsafe) f.get( null );
আমার জন্য দুর্দান্ত কাজ করেছেন।
Unsafe
সংজ্ঞা অনুসারে, "অনিরাপদ"। এটি কিছুটা ধোঁকাবাজি।
getDeclaredField
লিনাক্স x64 উপর JDK 8u131 মধ্যে কৌতুক, উৎপাদন সহ hs_err_pid*.log
A থেকে SIGSEGV
।
Unsafe
করা প্রতারণা নয়। ওপি প্রোগ্রামিং সমস্যার কোনও 'ক্লিন' সমাধান খুঁজছে না। কুৎসিত সম্ভাব্য উপায়ে ক্র্যাশ করতে তার jvm দরকার। দুষ্টু নেটিভ জিনিসগুলি করা যা ঘটতে পারে তা হ'ল এবং ঠিক এটিই ঘটে Unsafe
।
আমি এখানে এসেছি কারণ আমিও দ্য প্যাশনেট প্রোগ্রামার-এ এই প্রশ্নটি নিয়েছিলাম চ্যাড ফাউলারের লেখা নিয়েছিলাম। যাদের অনুলিপি অ্যাক্সেস নেই তাদের ক্ষেত্রে, প্রশ্নটি "সত্যই ভাল জাভা প্রোগ্রামারস" দরকার এমন একটি পদের জন্য সাক্ষাত্কার প্রার্থীদের জন্য এক ধরণের ফিল্টার / পরীক্ষা হিসাবে তৈরি করা হয়েছে।
বিশেষত, তিনি জিজ্ঞাসা করেছেন:
খাঁটি জাভাতে আপনি কীভাবে কোনও প্রোগ্রাম লিখবেন, যার ফলে জাভা ভার্চুয়াল মেশিন ক্র্যাশ হবে?
আমি জাভাতে 15 বছরেরও বেশি সময় ধরে প্রোগ্রাম করেছি এবং এই প্রশ্নটি আমি দুশ্চরিত্র এবং অন্যায় উভয়ই বলে মনে করেছি। অন্যরা যেমন উল্লেখ করেছে, জাভা, একটি পরিচালিত ভাষা হিসাবে, বিশেষত ক্র্যাশ না করার জন্য তৈরি করা হয়েছে । অবশ্যই সবসময় জেভিএম বাগ রয়েছে তবে:
অন্যরা যেমন উল্লেখ করেছে, জেএনআই এর মাধ্যমে কিছু নেটিভ কোড হ'ল একটি জেআরই ক্র্যাশ করার একটি নিশ্চিত উপায়। তবে লেখক বিশুদ্ধ জাভাতে বিশেষভাবে উল্লেখ করেছেন , তাই এটি বাইরে।
আর একটি বিকল্প জেআরই বোগাস বাইট কোডগুলি খাওয়ানো হবে; একটি ক্লাস ফাইলে কিছু জঞ্জাল বাইনারি ডেটা ফেলে দেওয়া এবং জেআরই কে এটি চালিয়ে যেতে বলার পক্ষে যথেষ্ট সহজ:
$ echo 'crap crap crap' > crap.class
$ java crap
Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1668440432 in class file crap
সেটা কি হিসাবের মধ্যে আসে? মানে জেআরই নিজেই ক্র্যাশ হয়নি; এটি সঠিকভাবে বোগাস কোড সনাক্ত করেছে, এটি প্রতিবেদন করেছে এবং প্রস্থান করেছে।
এটি আমাদের সুনির্দিষ্ট ধরণের সমাধানগুলির সাথে ফেলেছে যেমন পুনরাবৃত্তির মাধ্যমে স্ট্যাকটি ফুঁ দেওয়া, বস্তুর বরাদ্দের মাধ্যমে গাদা স্মৃতি থেকে বেরিয়ে আসা বা কেবল নিক্ষেপ করা RuntimeException
। তবে এটি কেবল জেআরইকে একটি StackOverflowError
বা অনুরূপ ব্যতিক্রম সহ প্রস্থান করতে পারে , যা সত্যই আবার কোনও ক্রাশ নয় ।
তাহলে কি বাকি আছে? আমি যথাযথ সমাধান হিসাবে লেখকের মনে কী ছিল তা শুনতে সত্যিই আমি পছন্দ করব।
আপডেট : চাদ ফোলার এখানে প্রতিক্রিয়া জানিয়েছেন ।
পিএস: এটি অন্যথায় দুর্দান্ত বই। আমি রুবি শেখার সময় এটি নৈতিক সহায়তার জন্য তুলেছি।
এই কোডটি জেভিএমকে বাজে উপায়ে ক্রাশ করবে
import sun.dc.pr.PathDasher;
public class Crash
{
public static void main(String[] args)
{
PathDasher dasher = new PathDasher(null) ;
}
}
InternalError
JDK 1.8 এ একটি ছুড়ে ফেলে । জেভিএম আর ব্যর্থ হয় না।
শেষবার আমি চেষ্টা করেছিলাম এটি করবে:
public class Recur {
public static void main(String[] argv) {
try {
recur();
}
catch (Error e) {
System.out.println(e.toString());
}
System.out.println("Ended normally");
}
static void recur() {
Object[] o = null;
try {
while(true) {
Object[] newO = new Object[1];
newO[0] = o;
o = newO;
}
}
finally {
recur();
}
}
}
উত্পন্ন লগ ফাইলের প্রথম অংশ:
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x000000006dad5c3d, pid=6752, tid=1996
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.2-b01 mixed mode windows-amd64)
# Problematic frame:
# V [jvm.dll+0x2e5c3d]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x00000000014c6000): VMThread [stack: 0x0000000049810000,0x0000000049910000] [id=1996]
siginfo: ExceptionCode=0xc00000fd, ExceptionInformation=0x0000000000000001 0x0000000049813fe8
Registers:
EAX=0x000000006dc83090, EBX=0x000000003680f400, ECX=0x0000000005d40ce8, EDX=0x000000003680f400
ESP=0x0000000049813ff0, EBP=0x00000000013f2df0, ESI=0x00000000013f0e40, EDI=0x000000003680f400
EIP=0x000000006dad5c3d, EFLAGS=0x0000000000010206
একটি নিখুঁত জেভিএম বাস্তবায়ন কখনই ক্রাশ হবে না।
একটি জেভিএম ক্র্যাশ করতে, জেএনআইকে বাদ দিয়ে, আপনাকে নিজেই ভিএম-তে একটি বাগ খুঁজে পাওয়া দরকার। একটি অসীম লুপটি কেবলমাত্র সিপিইউ গ্রহণ করে। অসীমভাবে মেমরি বরাদ্দ করা কেবল একটি ভাল নির্মিত জেভিএম-এ আউটআফমিউরিওর এর কারণ হওয়া উচিত। এটি সম্ভবত অন্যান্য থ্রেডের জন্য সমস্যা তৈরি করতে পারে তবে একটি ভাল জেভিএম এখনও ক্র্যাশ হওয়া উচিত নয়।
আপনি যদি ভিএম এর উত্স কোডটিতে একটি বাগ খুঁজে পেতে পারেন এবং উদাহরণস্বরূপ ভিএম প্রয়োগের মেমরির ব্যবহারে একটি সেগমেন্টেশন ত্রুটি সৃষ্টি করে, তবে আপনি আসলে এটি ক্রাশ করতে পারেন।
আপনি যদি জেভিএম ক্র্যাশ করতে চান - সান জেডিকে 1.6_23 বা নীচে নিম্নলিখিতটি ব্যবহার করুন:
Double.parseDouble("2.2250738585072012e-308");
এটি সান জেডিকে-র একটি বাগের কারণে - ওপেনজেডিকেও পাওয়া গেছে। এটি ওরাকল জেডিকে 1.6_24 এর পরে স্থির করা হয়েছে।
ক্র্যাশ দ্বারা আপনি কী বোঝাতে চান তার উপর নির্ভর করে।
এটিকে স্ট্যাকের জায়গা থেকে সরিয়ে দেওয়ার জন্য আপনি একটি অসীম পুনরাবৃত্তি করতে পারেন, তবে এটি "করুণভাবে" ক্র্যাশ হয়ে যাবে। আপনি একটি ব্যতিক্রম পাবেন, কিন্তু জেভিএম নিজেই সমস্ত কিছু পরিচালনা করবে।
নেটিভ কোডটি কল করতে আপনি জেএনআই ব্যবহার করতে পারেন। আপনি যদি ঠিক এটি না করেন তবে আপনি এটিকে শক্ত করে ক্রাশ করতে পারেন। এই ক্র্যাশগুলির ডিবাগ করা "মজাদার" (বিশ্বাস করুন, আমাকে একটি বড় সি ++ ডিএলএল লিখতে হয়েছিল যা আমরা স্বাক্ষরিত জাভা অ্যাপলেট থেকে কল করি)। :)
জোন মেয়ারের জাভা ভার্চুয়াল মেশিন বইয়ের একটি ধারাবাহিক বাইটকোড নির্দেশনার উদাহরণ রয়েছে যা জেভিএমকে মূল ডাম্পের কারণ করে। আমি এই বইয়ের আমার অনুলিপিটি খুঁজে পাচ্ছি না। যদি কারও কারও কাছে থাকে তবে দয়া করে এটি দেখুন এবং উত্তরটি পোস্ট করুন।
winxpsp2 w / wmp10 jre6.0_7 এ
Desktop.open (uriToAviOrMpgFile)
এটি একটি স্পাড থ্রেডের জন্য একটি অচিরত থ্রোয়েবল নিক্ষেপ করে এবং হটস্পট ক্র্যাশ করে
YMMV
ভাঙা হার্ডওয়্যার যে কোনও প্রোগ্রাম ক্রাশ করতে পারে। ঠিক একই সেটআপ সহ অন্যান্য মেশিনগুলিতে জরিমানা চালানোর সময় আমি একবারে একটি নির্দিষ্ট মেশিনে প্রজননযোগ্যভাবে একটি অ্যাপ ক্রাশ করেছি। দেখা যাচ্ছে যে মেশিনটিতে ত্রুটিযুক্ত র্যাম রয়েছে।
ক্র্যাশ নয়, ব্যবহারের স্বীকৃত উত্তরের চেয়ে ক্রাশের কাছাকাছি System.exit
আপনি কল করে জেভিএম থামাতে পারেন
Runtime.getRuntime().halt( status )
ডক্স অনুসারে: -
"এই পদ্ধতির ফলে শাটডাউন হুকগুলি শুরু হওয়ার কারণ হবে না এবং চূড়ান্তকরণ অন-প্রস্থান সক্ষম করা থাকলে ইনভোকড ফাইনালাইজারগুলি চালায় না"।
এখানে কী কী কারণে জেভিএমকে মূল ডাম্পের (অর্থাৎ ক্র্যাশ করতে হবে) বিস্তারিত বিশদ দেওয়া হয়েছে: http://kb.adobe.com/selfservice/viewContent.do?externId=tn_17534
আপনি যদি ভান করতে চান তবে আপনার স্মৃতি শেষ হয়ে গেছে আপনি করতে পারেন
public static void main(String[] args) {
throw new OutOfmemoryError();
}
আমি জেভিএমকে স্থানীয় পদ্ধতিতে (যা অন্তর্নির্মিত রয়েছে) কল করে একটি ত্রুটি ফাইল ডাম্প করার কয়েকটি উপায় জানি, তবে এটি সম্ভবত আপনি কীভাবে করবেন তা জানেন না। ;)
যদি আপনি কোনও নিয়ন্ত্রণহীন পরিস্থিতিতে (যেমন কোনও জাভা ব্যতিক্রম বা ত্রুটি নেই) কোনও প্রক্রিয়া বাতিল হিসাবে ক্র্যাশটিকে সংজ্ঞায়িত করেন তবে জাভা থেকে এটি করা যাবে না (যদি আপনি sun.misc.Unsafe বর্গ ব্যবহার করার অনুমতি না পান)। এটি পরিচালিত কোডের পুরো পয়েন্ট।
স্থানীয় কোডে সাধারণ ক্র্যাশগুলি ভুল মেমরি অঞ্চলে (নাল ঠিকানা বা মিসলাইনযুক্ত) ডি-রেফারেন্সিংয়ের মাধ্যমে ঘটে। অন্য উত্স হ'ল অবৈধ মেশিনের নির্দেশাবলী (অপকডস) বা গ্রন্থাগার বা কার্নেল কলগুলি থেকে আনহ্যান্ডেল সংকেত হতে পারে। JVM বা সিস্টেম লাইব্রেরিতে বাগ থাকলে উভয়ই ট্রিগার করতে পারে।
উদাহরণস্বরূপ, জেআইটিড (উত্পন্ন) কোড, নেটিভ পদ্ধতি বা সিস্টেম কল (গ্রাফিক্স ড্রাইভার) এর সমস্যার ফলে রিয়েল ক্র্যাশ হতে পারে (আপনি জিপ ফাংশন ব্যবহার করার সময় ক্রাশ হওয়া খুব সাধারণ বিষয় ছিল এবং এগুলির স্মৃতিশক্তি শেষ হয়ে যায়)। এই ক্ষেত্রে জেভিএমের ক্র্যাশ হ্যান্ডলারের সাথে রাজ্যে লাথি মেরে ফেলা হয়। এটি একটি ওএস কোর ফাইলও তৈরি করতে পারে (ড। ওয়াটসন উইন্ডোজ এবং কোর ডাম্প * নিক্স)।
লিনাক্স / ইউনিক্সে আপনি কোনও চলমান প্রক্রিয়াতে সিগন্যাল প্রেরণ করে খুব সহজেই একটি জেভিএম ক্রাশ করতে পারবেন। দ্রষ্টব্য: আপনার SIGSEGV
জন্য এটি ব্যবহার করা উচিত নয় , যেহেতু হটস্পট এই সংকেতটি ধরেছে এবং বেশিরভাগ জায়গায় এটি একটি নালপয়েন্টার এক্সসেপশন হিসাবে আবার ছুঁড়ে দেয়। সুতরাং SIGBUS
উদাহরণ হিসাবে একটি প্রেরণ করা ভাল ।
যদি আপনি এমন একটি থ্রেড প্রক্রিয়া তৈরি করেন যা অসীমভাবে আরও বেশি থ্রেড তৈরি করে (যা আরও থ্রেড উত্পন্ন করে, যা ...) আপনি শেষ পর্যন্ত জেভিএম নিজেই একটি স্ট্যাক ওভারফ্লো ত্রুটির কারণ হবেন।
public class Crash {
public static void main(String[] args) {
Runnable[] arr = new Runnable[1];
arr[0] = () -> {
while (true) {
new Thread(arr[0]).start();
}
};
arr[0].run();
}
}
এটি আমাকে আউটপুট দিয়েছে (5 মিনিটের পরে, আপনার ম্যাম দেখুন)
An unrecoverable stack overflow has occurred.
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x0000000070e53ed7, pid=12840, tid=0x0000000000101078
#
# JRE version: Java(TM) SE Runtime Environment (8.0_144-b01) (build 1.8.0_144-b01)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
#
যদি "ক্র্যাশ" বলতে বোঝায় আপনি জেভিএম এর হঠাৎ বন্ধ হওয়া বোঝা গেছেন , যেমন জেভিএম এর hs_err_pid% p.log এ লিখতে বাধ্য করে , আপনি এটি এইভাবে করতে পারেন।
এক্স-এক্সএএমএক্স আরগটিকে একটি ছোট মানতে সেট করুন এবং জেভিএমকে আউটফেমোমরিতে ক্র্যাশ করার জন্য বলুন:
-Xmx10m -XX:+CrashOnOutOfMemoryError
পরিষ্কার করার জন্য, উপরের দ্বিতীয়টি আর্গুমেন্ট ব্যতীত এটি jvm এর ফলাফল কেবল একটি আউটআফমিউরিইরির দিয়ে শেষ হবে তবে এটি "ক্র্যাশ" বা হঠাৎ করে জেভিএমকে বাতিল করতে পারে না।
আমি যখন জেভিএম-এক্সএক্স: ত্রুটি-ফাইল আর্গ পরীক্ষা করার চেষ্টা করছিলাম তখন এই কৌশলটি সহায়ক হিসাবে প্রমাণিত হয়েছিল, যেখানে এই জাতীয় hs_err_pid লগ লিখতে হবে তা নিয়ন্ত্রণ করে। এ জাতীয় ক্রাশ জোর করার উপায়গুলি খুঁজতে গিয়ে আমি এই পোস্টটি এখানে পেয়েছি। পরে যখন আমি আমার প্রয়োজনের জন্য উপরের কাজটি সবচেয়ে সহজ হিসাবে কাজ করেছিলাম তখন আমি এটিকে এখানে তালিকায় যুক্ত করতে চেয়েছিলাম।
অবশেষে, এফডব্লিউআইডাব্লু, কেউ যদি এটি পরীক্ষা করতে পারে যখন তারা ইতিমধ্যে আপনার আরগস-এ একটি এক্স-এক্স মান নির্ধারণ করেছে (উপরের চেয়ে কিছু বড় মানের কাছে), আপনি এটিও সরাতে বা পরিবর্তন করতে চান, বা আপনি ক্র্যাশ পাবেন না তবে কেবল jvm আরম্ভ করতে ব্যর্থ হয়েছে, "প্রাথমিক স্তূপ আকার সর্বাধিক গাদা আকারের চেয়ে বড় মান সেট" রিপোর্ট করে reporting (এটি যদি জেভিএমকে পরিষেবা হিসাবে যেমন কিছু অ্যাপ্লিকেশন সার্ভারের সাথে চালিত হয় তবে তা স্পষ্ট হবে না bit আবার, এটি আমাকে বিট দেয়, তাই আমি এটি ভাগ করে নিতে চেয়েছিলাম))
আপনি যদি লুপের জন্য সেই অসীমটিকে একই ক্রিয়াকলাপে পুনরাবৃত্ত কলগুলিতে পরিবর্তন করেন তবে আপনি একটি স্ট্যাক ওভারফ্লো ব্যতিক্রম পাবেন:
public static void main(String[] args) {
causeStackOverflow();
}
public void causeStackOverflow() {
causeStackOverflow();
}
আমি এখন এটি করছি, তবে কীভাবে ... :-) জেভিএম (এবং আমার অ্যাপ্লিকেশন) পুরোপুরি অদৃশ্য হয়ে যায় তা পুরোপুরি নিশ্চিত নয় not কোনও ত্রুটি নিক্ষেপ করা হয়নি, কিছু লগড হয়নি। কোনও সতর্কতা ছাড়াই তাত্ক্ষণিকভাবে চলমান না থেকে কাজ করা পর্যন্ত চলে।
সংক্ষিপ্ততম? CTRL + BREAK ট্রিগার করতে রোবট ক্লাস ব্যবহার করুন। আমি যখন কনসোলটি বন্ধ না করেই আমার প্রোগ্রামটি বন্ধ করার চেষ্টা করছিলাম তখন আমি এটি স্পট করেছিলাম (এটির কোনও 'প্রস্থান' কার্যকারিতা ছিল না)।
এই কি গণনা?
long pid = ProcessHandle.current().pid();
try { Runtime.getRuntime().exec("kill -9 "+pid); } catch (Exception e) {}
এটি শুধুমাত্র লিনাক্স এবং জাভা 9 থেকে কাজ করে।
কিছু কারণে আমি পাচ্ছি না, ProcessHandle.current().destroyForcibly();
জেভিএমকে হত্যা করবে না এবং java.lang.IllegalStateException
মেসেজ সহ নিক্ষেপ করবে যাতে বর্তমান প্রক্রিয়া নষ্ট না হয় ।
JVM ক্র্যাশটির প্রতিলিপি দেওয়ার চেষ্টা করার সময় এই সমস্যাটিতে চলছে।
জনি কাজ করে তবে বিভিন্ন প্ল্যাটফর্মের জন্য এটি টুইট করা দরকার। শেষ পর্যন্ত, আমি জেভিএম ক্রাশ করতে এই সংমিশ্রণটি ব্যবহার করি
-XX:+CrashOnOutOfMemoryError
long[] l = new long[Integer.MAX_VALUE];
OOM কে ট্রিগার করতে একটি ব্যবহার করুনতারপরে জেভিএম ক্র্যাশ করে লগ তৈরি করবে and
যদি 'ক্র্যাশ' এমন কিছু হয় যা জেভিএম / প্রোগ্রামকে সাধারণ অবসান থেকে বাধা দেয়, তবে একটি আন-হ্যান্ডেল ব্যতিক্রম এটি করতে পারে।
public static void main(String args[]){
int i = 1/0;
System.out.print(i); // This part will not be executed due to above unhandled exception
}
সুতরাং, এটি ক্র্যাশ কি ধরণের উপর নির্ভর করে ?!
ArithmeticException
এটি