JVM 简介
前言
为了达到给所有硬件提供一致的虚拟机平台的目的,jvm牺牲了一些与硬件相关的性能特性。
第一章 走进java
2006年,Sun公式宣布最终会将java开源,并建立了OpenJDK组织源码进行独立管理。
除了极少数产权代码(Sun本身也无权进行开源处理)外,OpenJDK几乎包括了Sun JDK的全部代码。
所以OpenJDK 7 与 Sun JDK 1.7本质史昂就是同一套代码库开发的产品
历史
1996年,sun发布jdk1.0,该jdk中所带的虚拟机就是Classic VM. 这款虚拟机采用纯解释权方式来执行java代码,若用jit编译器,就必须外挂。使用外挂jit编译器后,解释器便不再工作。
若用解释器,解释器的性能本来就比较慢。
若用编译器,编译器需要对每一行代码都进行编译,由于程序相应时间的压力,不敢应用编译耗时较高的优化技术。
由此,“java语言很慢”的形象产生jdk 1.2时,在Solaris平台发布了Exact VM.
使用了准确式内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型)。
之前Class VM基于handler(句柄)的对象查找方式,每次定位对象多了一次查找开销HotSpot VM:准确式内存管理,热点代码探测技术
Sun JDK,Open JDK都是使用HotSpot VMDalvik VM,即android上使用的jvm。
严格来说,Dalvik VM不是一个java虚拟机;
它没有遵循java虚拟机规范,不能直接执行java的class文件;
使用的是寄存器架构而不是jvm中常用的栈架构Microsoft JVM
微软曾是java技术铁杆支持者,与sun争夺java控制权,令java从跨平台技术变为绑定在windows上的技术是ms的主要目的。
sun起诉微软,微软最终败诉,赔偿sun公司2000万,承诺终止其jvm发展。
有趣的是,xp sp3完全抹去了jvm,sun又登报希望微软不要这么做
未来
- 模块化
- 混合语言(java平台上多语言很合编程正成为主流)
- 多核并行(函数式)
- 进一步丰富语法
- 64位虚拟机
思考的乐趣-读书笔记
HashMap工作原理
最近参与公司的实习生招聘工作,面试了几位实习生,我有一道每次面试都必问的题目【HasmMap的工作原理】,但很遗憾,至今还没遇到令我完全满意的回答。今天这篇文章就来回答下HashMap相关的面试题。
1. 什么是HashMap?
java.util.HashMap是Java语言标准库中的一个容器类,主要用来存储键值对。是数据结构中哈希表在Java语言的一个实现。
哈希表是数据结构中的一个概念,可以存储n个元素,取元素的时间复杂度为O(1).
一般情况下,从n个元素中查找一个元素,时间复杂度为O(n). 为何哈希表能有O(1)的时间复杂度?
因为元素在存储时已经大致确定了位置,查找的时候可以定位到对应的位置,因此时间复杂度为O(1).