JVM学习笔记

  1. 历史

    1. Sun Classic VM,Sun公司的产品,第一款商用Java虚拟机,只用解释器执行java代码
    2. Exact VM,编译器和解释器混合工作。出现时间短,被后来的HotSpot VM替代
    3. HotSpot VM,2007开源,一直用到现在的SDK中
    4. KVM,Sun产品,简单、轻量级,高度可移植。嵌入式设备中使用,如手机。
    5. JRockit VM,2008,BEA开发(被Oracle收购),专注服务端应用
    6. J9 VM,IBM产品
    7. Dalvik,没按JVM规范实现,基于寄存器架构。google产品,Android手机专用
    8. 微软JVM,97年被Sun公司告了之后就退出舞台
    9. Taobao VM,阿里服务器专用。基于HotSpot深度定制,放弃兼容性,拥抱高性能。
  2. 内存结构

    1. 线程独占区

      • 程序计数器

        记录着当前线程所执行的字节码的行号
      1. 虚拟机栈

        • 基本元素是栈帧。
        • 栈帧包含:局部变量表、操作数栈、动态链接、方法出口
        • 程序中的每一次方法调用都会有一个栈帧存储到虚拟机栈中
      2. 本地方法栈

        • 同上,是用于native方法的
        • HotSpot将虚拟机栈和本地方法栈合并实现
    2. 线程共享区

        1. 存放对象。根据生命周期不同,可分为下列两种区域
        2. 新生代:Eden、Survivor
        3. 老年代:Tenured
      1. 方法区

        1. 编译代码的存储区域,存储每个类的结构
        2. 类信息
        3. 运行时常量池
        4. 字段、方法数据
        5. 方法和构造函数的代码
    3. 特殊的内存:直接内存

      1. 它不是jvm管理的一部分

      2. 由native方法即C/C++方法申请的
  3. 垃圾回收机制
  4. class文件结构
  5. 类加载机制
  6. 字节码执行引擎
  7. 性能监控工具
  8. 性能调优
  9. 虚拟机编译及运行时优化
  10. Java高级线程
上一篇:记Android关于Unix abstract socket的连接问题


下一篇:pandas基础——索引