程序计数器,虚拟机栈,本地方法栈,堆,方法区
1、程序计数器
线程私有
,即每个线程都会有一个,线程之间互不影响,独立存储。
代表着当前线程所执行字节码的行号指示器。
2、虚拟机栈
线程私有
, 它的 生命周期和线程相同
。
描述的是 java 方法执行的内存模型
:每个方法在执行的同时多会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程。
3、本地方法栈
同虚拟机栈,只不过本地方法栈位虚拟机使用到的 native 方法服务。
4、 java 堆
线程共享
主要用于分配对象实例和数组
5、方法区
线程共享
用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译后的代码等数据。
Java
认为 Checked 异常
都是可以被处理的异常,所以 Java 程序必须显示处
理 Checked 异常。如果程序没有处理 Checked 异常,该程序在编译时就会
发生错误无法编译。我们比较熟悉的 Checked 异常有
Java.lang.ClassNotFoundException
NoSuchMetodException
IOException
Runtime
异常如除数是 0 和数组下标越界等,其产生频繁,处理麻烦,若显
示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动
检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示
捕获它们。我们比较熟悉的 RumtimeException 类的子类有
Java.lang.ArithmeticException
ArrayStoreExcetpion
ClassCastException
IndexOutOfBoundsException
NullPointerException
Error 是 throwable 的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。当程序发生 不可控的错误时
,通常做法是通知用户并中止程序的执行。与异常不同的是, Error
及其子类的对象不应被抛出。 Error 由 Java 虚拟机生成并抛出
,包括动态链接失败,虚拟机错误等。程序对其不做处理。