Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况
Java语言把异常当做对象来处理,并定义了一个基类(java.util.Throwable)作为所有异常的父类。异常分为Error和Exception两大类。
- Error
不可恢复的异常。
程序中不推荐去捕获Error类型的异常,主要原因是:运行时异常多是由于逻辑错误导致的,属于应该解决的错误。也就是说,一个正确的程序中是不应该存在Error的。当这些异常发生时,JVM一般会选择将线程终止。
- Exception
可恢复的异常。
(1) 检查异常
所有继承Exception并且不是运行时异常的异常都是检查异常。
这种异常发生在编译阶段,Java编译器强制程序去捕获此类异常。
(2) 运行时异常
编译器没有强制对其进行捕获并处理。当出现这种异常时,会由JVM来处理,eg. NullPointerException、ClassCastException、ArrayIndexOutOfBoundsException,ArithmeticException等。
出现运行时异常后,系统会把异常一直往上层抛出,直到遇到处理代码为止。若没有处理块,则跑到最上层。
如果不对运行时的异常进行处理,后果是非常严重的,一旦发生,要么是线程中止,要么是主程序终止。
在使用异常处理时,要注意以下几个问题:
(1) 先捕获子类,再捕获基类的异常信息。
(2) 尽早抛出异常。
(3) 异常能处理就处理,不能处理就抛出。
(4) 可以根据实际的需求自定义异常类,只要继承自Exception类即可。
- OOM(OutOfMemoryError)
除了PC外,其他几个运行时区域都有发生OOM异常的可能性。
(1) Java堆
如果堆中没有内存完成实例分配,且堆无法扩展,抛出OOM。
(2) Java栈和本地方法栈
若线程请求的栈深度大于虚拟机所允许的最大深度,将抛出SOF;
如虚拟机在扩展栈时,仍无法申请到足够的内存空间,则抛出OOM。
(3) 方法区
如果方法区无法满足内存分配需求时,将抛出OOM。
(4) 运行时常量池
如果要向运行时常量池中添加内容,最简单的做法就是使用String.intern()这个Native方法。该方法的作用是:如果池中已经包含一个等于此String的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize和-XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。
- SOF(StackOverFlowError)
程序中一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过默认大小而导致溢出。
栈溢出的原因:
(1) 递归调用
(2) 大量循环或死循环
(3) 全局变量是否过多
(4) 数组、List、Map数据过多
Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况的更多相关文章
- Exception 和 Error 包结构
- 文档:网络通讯包结构(crc校验,加解密)
一直想把这个流程整理一下. 包结构: 包 对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到 对(数据内容)进行crc计算而得到 协议号 数据内容的字节长度 ...
- jdk1.7.0_80源码包结构
解压源码src.zip,jdk源码结构如下所示: src |--com.sun sun公司对jdk的实现,Oracle官方不支持,不保证跨平台(可能一些类linux有而windows没有),甚至 ...
- Node.js入门:包结构
JavaScript缺少包结构.CommonJS致力于改变这种现状,于是定义了包的结构规范(http://wiki.commonjs.org/wiki/Packages/1.0 ).而NPM的 ...
- JDK源码包结构分类
最近查看JDK源码时,无意间发现几个类在陌生包里:com.sun.*.sun.*.org.*,google了一把总结了下以备他人搜索,如内容有误欢迎指正! Jre库包含的jar文件(jdk1.6) ...
- TCP/IP数据包结构具体解释
[关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...
- 【Java基础】Jar包结构结构分析和操作具体解释
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 一 ...
- UDP包结构
UDP包结构 // 参考: http://www.2cto.com/net/201307/224715.html UDP数据包由首部和数据组成,每行4个字节(32位),首部固定长度为8个字节(2行) ...
- USB的包结构及包分类
USB的传输总是低位在前,高位在后. USB的传输方向:从设备到主机的数据为输入:从主机到设备的数据叫做输出. 1. 包结构 以同步域开始,紧跟着一个包标识符PID(Packet Identifier ...
随机推荐
- Jmeter参数化控件意见收集
1.可以读取EXCEL,可以自定义SHEET,行和列: 2.数据可以加密传输,加密方式如下: 1)SHA1 2)SHA224 3)SHA256 4)SHA384 5)SHA512 6)MD5 7)Hm ...
- oracle sql查询表外键关系
SELECT F.TABLE_NAME, F.CONSTRAINT_NAME, F.COLUMN_NAME, F.POSITION, P.TABLE_NAME, P.COLUMN_NAME, P.PO ...
- 用redlock实现redis的分布式锁
本文是一个demo,利用多进程,来模拟使用redis分布式锁的使用场景.本机需要安装redis,python3.7下运行代码.分布式锁用redlock这个包实现,实现步骤分三步: 实例化锁:rlock ...
- win7系统开机启动出现蓝屏,提示BAD_SYSTEM_CONFIG_INFO
因为我在msconfig->引导->高级选项中将最大内存勾选,最大内存勾选后是4096MB,但是在点击确定按钮后,会自动变成0MB(点击确定按钮后再点击高级选项),导致系统无法识别内存,开 ...
- POJ 1753 Flip Game (状压+暴力)
题目链接:http://poj.org/problem?id=1753 题意: 给你一个4*4的棋盘,上面有两种颜色的棋子(一种黑色,一种白色),你一次可以选择一个棋子翻转它(黑色变成白色,同理反之) ...
- noi.ac #227 random
分析 我们发现实际只要计算a[i]>b[j]和a[i]<b[j]哪种多即可 代码 #include<bits/stdc++.h> using namespace std; ], ...
- Python 有哪些优雅的代码实现让自己的代码更pythonic?
https://www.zhihu.com/question/37751951/answer/73425339 https://www.cnblogs.com/geaozhang/p/7111961. ...
- Oracle--索引视图序列等对象
---恢复内容开始--- 索引 与表类似,不仅需要在DD中保存索引的定义,还需要在表空间为它分配实际的存储空间. 将索引和对应的表分别存放在不同硬盘的不同表空间中能够提高查询的速度,因为Oracle能 ...
- 夜雨惊风 Linux下卸载openjdk,安装jdk
1.查看java版本 1 2 3 4 [root@CFDB2 ~]# java -version openjdk version "1.8.0_171" OpenJDK Runti ...
- SqlServer 2012 AlwaysOn
第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.com/lyhabc/p/4682028.html第三篇htt ...