《The Java Virtual Machine Specification, Java SE 8 Edition》读书笔记

specification地址:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

 

notes:

1. 浮点类型的值空间包括INFINITE,-INFINITE,NaN。其中NaN对所有比较运算都返回false,包括NaN == NaN的值也为false。

 

2. 从java1.2到java16,strictfp修饰符(对应jvm的ACC_STRICT flag)默认为false,允许运算中间结果在不同的处理器上有不同的精度。(牺牲跨平台一致性,保证性能)

从java17(及对应版本的jvm)开始,考虑到未来处理器在这方面的性能问题已解决,strictfp修饰符废弃,强制使用统一的浮点精度。

推演一下,老版本未加strictfp修饰的代码,在不同平台上的计算结果可能不一致;同时在特定平台上,老版本的class在老版jvm和新版jvm(17及以后)上的计算结果也可能不一致。

posted @ 2022-01-04 12:03  rainforwind  阅读(83)  评论(0)    收藏  举报