JDK
1.请问JDK、JRE、JVM的区别是什么?
答:区别如下
- jdk是java运行和编译的环境完整的Java软件开发包(包含jre编译器和其他的工具(比如:JavaDoc,Java调试器))可以让开发者开发、编译、执行Java应用程序。
- jre是java运行时环境它同时也包含了执行applet需要的浏览器插件。也就是说如果你只是想运行一个java程序,那么你只需要有jre就行了
- jvm是java虚拟机,是java运行的平台在各个操作系统上都会有java虚拟机。它是整个Java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
2.Java中的LongAdder和AtomicLong有什么区别?
答:从更新方式、原子性读写、并发程度进行分析。
- AtomicLong 是基于 CAS 方式自旋更新的;LongAdder 是把 value 分成若干cell,并发量低的时候,直接 CAS 更新值,成功即结束。并发量高的情况,CAS更新某个cell值和需要时对cell数据扩容,成功结束;更新失败自旋 CAS 更新 cell值。取值的时候,调用 sum() 方法进行每个cell累加。
- AtomicLong 包含有原子性的读、写结合的api;LongAdder 没有原子性的读、写结合的api,能保证结果最终一致性。
- 低并发场景AtomicLong 和 LongAdder 性能相似,高并发场景 LongAdder 性能优于 AtomicLong。