雪花算法(07)雪花算法最终版

雪花算法初步完成后,我们讨论了几个位运算的写法,大家知道雪花算法一旦确定后,很多数字都是定死的,比如机器占多少位,或者时间向左位移多少,这些在算法具体逻辑确定后就不会变了。那么写成最后的数字和用位运算计算出来有什么区别呢?

其实没有区别,我们的程序分为编译期和运行期,我们直接把程序编译好,然后查看class文件,就会发现,两种写法编译结果是一样的。用位运算计算出来只是更加灵活而已,定义很多死的数字也容易写错,后期维护混乱。所以,下面我们来一个最终版,首先看基本的几个常量定义:

然后看时间部分的常量:

再看机器信息的常量:

最后看毫秒内序列的常量定义:

上面的常量中,只要修改最开始的四个部分的长度,下面的所有常量都会自动修改。






再来看一下主程序:

注意上面判断统一毫秒内序列的变化。其它辅助方法都没有什么变化,不再讨论。现在我们再看看编译完后生成的class文件:

可以看到编译后的文件其实就是最终定义了死的常数。包括主程序也是一样:

上面就是雪花算法的最终版!!!





最后来测试一下效率,我们来生成300万个id看看花费的时间:



代码地址:https://gitee.com/blueses/snowflake-demo  07

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 10,427评论 1 32
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 14,730评论 3 83
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,040评论 1 51
  • 学习C语言程序设计都会用到高等数学知识和计算机基础理论知识。 使用可变参数应该有以下步骤: 1)首先在函数里定义一...
    皓小天阅读 4,954评论 0 2
  • •1 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语...
    CONLYOUC阅读 8,217评论 9 66
  • 在作主题阅读时的要求 要知道对一个特定的主题来说,所涉及的绝对不是一本书而已。 要知道就总的来说,应该读的是哪些书...
    YYece阅读 180评论 0 0
  • 第一段路 凡梵——尼泊尔行走 凡|梵 01:神国的贪痴——最后的王朝凡|梵 02:应是“南朝四百八十寺”凡|梵 ...
    山榛隰苓阅读 490评论 0 0
  • 昨天下午办房产过户发生了一件事。 事件经过是中介人员,对于流程的马虎遗漏,未通知我带全相关证件和内容,在办理之前的...
    皮儿米阅读 287评论 4 0
  • 我有个好友周周,住在南山某小区,有天晚上下班,她到小区楼下的百果园买水果,在结账的时候,身边有个男生说自己的会员卡...
    达达令阅读 29,413评论 15 107