Does it simply check if divisor is different from zero every time there is division done (even in JIT-ed code)?

I mean how VM manages to throw an exception without being previously killed by the OS?

解决方案

In an Unix environment, in which division-by-zero is signalled via SIGFPE, the JVM will have installed a signal handler which traps the SIGFPE and in turn throws an ArithmeticException. If you're interested in the internals, see e.g. man signal

What I believe the OP is asking is based on the fact that, until/unless a SIGFPE handler is in place, most processes will take the default action on receiving this signal, which is to terminate. Thus, e.g. a C program

int main (int argc, char** argv) { int n = 5 / 0; }

… if it even compiles, will be killed by the default SIGFPE → SIG_DFL action. The JVM's handler instead issues the (catchable) RuntimeException so that these exceptions can be handled in a native-seeming way.

As several others pointed out, and just for completeness, in point of fact the SIGFPE generated from the kernel is generally mapped from a special interrupt from the processor itself; thus, the “pipeline” is something like

CPU error trap interrupt → kernel interrupt handler → SIGFPE SIG_DFL → process death

or

CPU error trap interrupt → kernel interrupt handler → SIGFPE handler in JVM → RuntimeException ArithmeticException in user code

On non-Unix platforms the handling is analogous.

java去0,Java如何处理除零?相关推荐

  1. 全网最全的JAVA所有版本特性【JAVA 1.0 - JAVA 20】

    闲来想了解下各版本之间的特性,搜索没有最新的特性说明,故想写一份.废话不多说. PS:绝对全网最全最齐,若不是,请私聊我补充,哈哈哈哈! JDK Version 1.0 1996-01-23 Oak( ...

  2. java 左边补0_java补充0 java数字左侧补零补0 NumberFormat实现数字左侧补0

    java补充0 java数字左侧补零补0 NumberFormat实现数字左侧补0 一.提出需求 1.在做一个编号生成规则中,有个规则如下: 编码序号为 5 位数,不足部分左侧补0. 二.代码实现 1 ...

  3. 【刷题记录①】Java从0到1入门|基础知识巩固练习

    JAVA从0到1入门刷题记录 目录 一.类型转换 二.简单运算 三.四舍五入 四.交换变量值 五.计算商场折扣 六.判断体重指数 总结 我几乎每天都会刷题训练来使自己对各种算法随时保持一个清晰的状态. ...

  4. java calendar去掉时分秒_java 8:只取年月日的java.util.Date(时分秒清零)对象

    废弃的方法(@Deprecated) 如果不想要java.util.Date中的时分秒数据,希望将它清零,只保留年月日,最简单的办法是 调用setHours,setMinutes,setSeconds ...

  5. 用 for/in 在 Java 5.0 中增强循环

    http://www.ibm.com/developerworks/cn/java/j-forin.html 简介: for/in 循环通常叫作 增强的 for 或者 foreach,它是 Java ...

  6. 零基础怎么自学Java?自学Java有什么误区?

    目前在中国众多行业中,极具发展潜力的就是Java软件开发工程师.学Java的人也是越来越多.实际上在学习Java编程之前需要先学习一些编程基础.新手往往无非进行系统的学习,主要原因是自己搜集信息较为零 ...

  7. Java去除掉HTML里面所有标签的两种方法——开源jar包和自己写正则表达式

    Java去除掉HTML里面所有标签,主要就两种,要么用开源的jar处理,要么就自己写正则表达式.自己写的话,可能处理不全一些自定义的标签.企业应用基本都是能找开源就找开源,实在不行才自己写-- 1,开 ...

  8. java oauth2.0_OAuth 2.0 Java指南:5分钟保护您的应用程序安全

    java oauth2.0 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. 现代应用程序依赖于 ...

  9. 学java 的要点_零基础学Java,掌握Java的基础要点

    对于程序员群体来说,了解一定的技巧会对学习专业技能更有帮助,也更有助于在自己的职业发展中处于有利地位,无限互联Java培训专家今天就为大家总结Java程序员入门时需要掌握的基础要点: 掌握静态方法和属 ...

  10. 【Java从0到架构师】SpringCloud - Sleuth、Zipkin、Config

    SpringCloud 链路追踪组件 Sleuth Zipkin 分布式配置中心 - Config Git + Config 分布式配置中心 Java 从 0 到架构师目录:[Java从0到架构师]学 ...

最新文章

  1. r语言siggenes包_初探R语言可视化交互式包plotly——旭日图(Sunburst Chart)
  2. Linux下如何查看系统启动时间和运行时间(转)
  3. python中1010的二进制_如何用python把任意文件转换为“1010”样子的文本
  4. 架构设计:Vue+nginx+jwt+zuul+eureka+ribbon+hystrix+rabbitmq+mysql集群+redis集群+elsticsearch集群
  5. OpenResty 反向代理的用法与技巧
  6. Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建
  7. 解决笔记本重装问题(VISTA系统改为XP系统)
  8. 心学 禅宗_禅宗宣言,用于有效的代码审查
  9. 【JAVA中级篇】线程池
  10. 【cogs2711】jump,二分答案+倍增套ST表
  11. SpringBoot开发案例之异常处理并邮件通知
  12. 计算机网络学习(四)网络层
  13. linux下opendir的使用
  14. 每天10道Crypto Day3
  15. 浅析大数据给我们带来的便利和好处
  16. 微信公众号开发:素材管理(临时、永久)
  17. QGraphicsView 如何实现百度地图按照鼠标点进行放大缩小效果
  18. ROI Pooling和ROI Align、ROI Warp解析
  19. 如何使用 Java 将 PDF 转换为文本 (TXT)
  20. CVX约束中需要使用一些中间变量该怎么办

热门文章

  1. java求实数的整数部分和小数部分_输入一个浮点数,并输出该数的整数部分和小数部分...
  2. 2021高考河北省艺术类成绩查询,2021河北省艺术类高考专业考试成绩有关规定
  3. Spring Boot + Spring-Kafka 异步配置
  4. Spark、Strom、Flink和Beam的技术选型
  5. 零拷贝的基本原理及使用Java通过零拷贝实现数据传输
  6. 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现
  7. CHKJ3000E错误解决
  8. H3C 帧中继地址映射
  9. 关于click事件在苹果手机上的阴影的解决方法和关于在安卓手机上的select的灰色背景色的解决...
  10. hdu 4723 How Long Do You Have to Draw(贪心)