JVM 简介

前言

为了达到给所有硬件提供一致的虚拟机平台的目的,jvm牺牲了一些与硬件相关的性能特性。

第一章 走进java

2006年,Sun公式宣布最终会将java开源,并建立了OpenJDK组织源码进行独立管理。
除了极少数产权代码(Sun本身也无权进行开源处理)外,OpenJDK几乎包括了Sun JDK的全部代码。
所以OpenJDK 7 与 Sun JDK 1.7本质史昂就是同一套代码库开发的产品

历史

  1. 1996年,sun发布jdk1.0,该jdk中所带的虚拟机就是Classic VM. 这款虚拟机采用纯解释权方式来执行java代码,若用jit编译器,就必须外挂。使用外挂jit编译器后,解释器便不再工作。
    若用解释器,解释器的性能本来就比较慢。
    若用编译器,编译器需要对每一行代码都进行编译,由于程序相应时间的压力,不敢应用编译耗时较高的优化技术。
    由此,“java语言很慢”的形象产生

  2. jdk 1.2时,在Solaris平台发布了Exact VM.
    使用了准确式内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型)。
    之前Class VM基于handler(句柄)的对象查找方式,每次定位对象多了一次查找开销

  3. HotSpot VM:准确式内存管理,热点代码探测技术
    Sun JDK,Open JDK都是使用HotSpot VM

  4. Dalvik VM,即android上使用的jvm。
    严格来说,Dalvik VM不是一个java虚拟机;
    它没有遵循java虚拟机规范,不能直接执行java的class文件;
    使用的是寄存器架构而不是jvm中常用的栈架构

  5. Microsoft JVM
    微软曾是java技术铁杆支持者,与sun争夺java控制权,令java从跨平台技术变为绑定在windows上的技术是ms的主要目的。
    sun起诉微软,微软最终败诉,赔偿sun公司2000万,承诺终止其jvm发展。
    有趣的是,xp sp3完全抹去了jvm,sun又登报希望微软不要这么做

未来

  • 模块化
  • 混合语言(java平台上多语言很合编程正成为主流)
  • 多核并行(函数式)
  • 进一步丰富语法
  • 64位虚拟机

Read More

思考的乐趣-读书笔记

1. 概率论教你说谎

贝叶斯定理

直观意义:当你获知了一个新的信息后,你对原事件的看法所做的改变

贝叶斯应用

  • P(A) : M同学在外通宵修炼概率
  • P(B) : M同学手中有电影票概率
  • P(A|B) : 当M同学手中的电影票被发现后,他在外通宵概率
  • P(B|A) : 若昨晚M在外通宵,他手中有电影票概率
    若要降低P(A|B)的概率
  1. 增加P(B) : 养成保存电影票习惯
  2. 减小P(A) : 少在外通宵修炼
  3. 减小P(B|A) : 不轻易拿出电影票据

Read More

HashMap工作原理

最近参与公司的实习生招聘工作,面试了几位实习生,我有一道每次面试都必问的题目【HasmMap的工作原理】,但很遗憾,至今还没遇到令我完全满意的回答。今天这篇文章就来回答下HashMap相关的面试题。

1. 什么是HashMap?

java.util.HashMap是Java语言标准库中的一个容器类,主要用来存储键值对。是数据结构中哈希表在Java语言的一个实现。

哈希表是数据结构中的一个概念,可以存储n个元素,取元素的时间复杂度为O(1).

一般情况下,从n个元素中查找一个元素,时间复杂度为O(n). 为何哈希表能有O(1)的时间复杂度?

因为元素在存储时已经大致确定了位置,查找的时候可以定位到对应的位置,因此时间复杂度为O(1).

Read More