《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及以后)上的计算结果也可能不一致。

浙公网安备 33010602011771号