java常见知识点

java源程序先经过javac编译器编译成二进制的.class字节码文件(跨平台指的是.class字节码文件的跨平台,.class字节码文件是与平台无关的),class文件运行在jvm上,java解释器(jvm的一部分)会将其解释成对应平台的机器码执行。不同平台上的jvm不同,而在不同平台上生成的class文件都是一样的,而class文件再由对应平台的jvm解释成对应平台的机器码执行。

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

HashMap最多只允许一条记录的键为null,允许多条记录的值为null,HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据不一致。

在hashmap 做put 操作的时候,假如A线程和B线程同时对同一个数组位置调用addEntry,两个线程会同时得到现在的头结点,然后A写入新的头结点之后,B也写入新的头结点,那B的写入操作就会覆盖A的写入操作造成A的写入操作丢失。同理,当多线程对同一数组位置进行remove操作时也会产生覆盖。

CHM适用于读者数量超过写者时,当写者数量大于等于读者时,CHM的性能是低于Hashtable和synchronized Map的。这是因为当锁住了整个Map时,读操作要等待对同一部分执行写操作的线程结束。CHM适用于做cache,在程序启动时初始化,之后可以被多个请求线程访问。正如Javadoc说明的那样,CHM是HashTable一个很好的替代,但要记住,CHM的比HashTable的同步性稍弱。

总结:

• CHM允许并发的读和线程安全的更新操作

• 在执行写操作时,CHM只锁住部分的Map

• 并发的更新是通过内部根据并发级别将Map分割成小部分实现的

• 高的并发级别会造成时间和空间的浪费,低的并发级别在写线程多时会引起线程间的竞争

• CHM的所有操作都是线程安全

• CHM返回的迭代器是弱一致性,fail-safe并且不会抛出ConcurrentModificationException异常

• CHM不允许null的键值

• 可以使用CHM代替HashTable,但要记住CHM不会锁住整个Map

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,908评论 0 11
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,576评论 1 14
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,842评论 11 349
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,573评论 0 4
  • 1.回归中的异常值 考虑异常值,假设线性回归将最小化误差的平方和,那么哪个是最佳的线性回归 2. 产生异常值的原因...
    esskeetit阅读 2,107评论 0 1

友情链接更多精彩内容