转载

【逆流而上】[Java]Java内存结构、异常详解

Java 内存结构

java 内存主要分为 5 部分,分别是 程序计数器,虚拟机栈,本地方法栈,堆,方法区

【逆流而上】[Java]Java内存结构、异常详解

1、程序计数器

线程私有 ,即每个线程都会有一个,线程之间互不影响,独立存储。

代表着当前线程所执行字节码的行号指示器。

2、虚拟机栈

线程私有 , 它的 生命周期和线程相同

描述的是 java 方法执行的内存模型 :每个方法在执行的同时多会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程。

3、本地方法栈

同虚拟机栈,只不过本地方法栈位虚拟机使用到的 native 方法服务。

4、 java 堆

线程共享 主要用于分配对象实例和数组

5、方法区

线程共享 用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译后的代码等数据。

Java异常

【逆流而上】[Java]Java内存结构、异常详解

Java 认为 Checked 异常 都是可以被处理的异常,所以 Java 程序必须显示处

理 Checked 异常。如果程序没有处理 Checked 异常,该程序在编译时就会

发生错误无法编译。我们比较熟悉的 Checked 异常有

Java.lang. ClassNotFoundException
Java.lang. NoSuchMetodException
java.io. IOException

Runtime 异常如除数是 0 和数组下标越界等,其产生频繁,处理麻烦,若显

示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动

检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示

捕获它们。我们比较熟悉的 RumtimeException 类的子类有

Java.lang. ArithmeticException
Java.lang. ArrayStoreExcetpion
Java.lang. ClassCastException
Java.lang. IndexOutOfBoundsException
Java.lang. NullPointerException

Error 是 throwable 的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。当程序发生 不可控的错误时 ,通常做法是通知用户并中止程序的执行。与异常不同的是, Error 及其子类的对象不应被抛出。 Error 由 Java 虚拟机生成并抛出 ,包括动态链接失败,虚拟机错误等。程序对其不做处理。

原文  https://segmentfault.com/a/1190000022638779
正文到此结束
Loading...