深入浅出JVM

虚拟机:

  指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

有哪些虚拟机:

  VMWare

  Visual Box

  JVM:使用软件模拟Java字节码的指令集

JDK的发展历程:

  •1996年 SUN JDK 1.0 Classic VM

    –纯解释运行,使用外挂进行JIT

  •1997年 JDK1.1 发布

    –AWT、内部类、JDBC、RMI、反射

  •1998年 JDK1.2 Solaris Exact VM

    –JIT 解释器混合

    –Accurate Memory Management 精确内存管理,数据类型敏感

    –提升的GC性能

  •2000年 JDK 1.3 Hotspot 作为默认虚拟机发布

  •2002年 JDK 1.4 Classic VM退出历史舞台

  •2004年发布 JDK1.5 即 JDK5 、J2SE 5 、Java 5

    –泛型

    –注解

    –装箱

    –枚举

    –可变长的参数

    –Foreach循环

  •JDK1.6 JDK6

    –脚本语言支持

    –JDBC 4.0

    –Java编译器 API

  •2011年 JDK7发布

    –延误项目推出到JDK8

    –G1(垃圾回收器)

    –动态语言增强

    –64位系统中的压缩指针

    –NIO 2.0

  •2014年 JDK8发布

    –Lambda表达式

    –语法增强  Java类型注解

  •2016年JDK9

    –模块化

Java历史中的大事件

  •使用最为广泛的JVM为HotSpot

  •HotSpot 为Longview Technologies开发 被SUN收购

  •2006年 Java开源 并建立OpenJDK

    –HotSpot  成为Sun JDK和OpenJDK中所带的虚拟机

  •2008 年 Oracle收购BEA

    –得到JRockit VM

  •2010年Oracle 收购 Sun

    –得到Hotspot

  •Oracle宣布在JDK8时整合JRockit和Hotspot,优势互补

    –在Hotspot基础上,移植JRockit优秀特性

JVM的种类

  •KVM

    –SUN发布

    –IOS Android前,广泛用于手机系统

  •CDC/CLDC HotSpot

    –手机、电子书、PDA等设备上建立统一的Java编程接口

    –J2ME的重要组成部分

  •JRockit

    –BEA

  •IBM J9 VM

    –IBM内部

  •Apache Harmony

    –兼容于JDK 1.5和JDK 1.6的Java程序运行平台

    –与Oracle关系恶劣 退出JCP ,Java社区的分裂

    –OpenJDK出现后,受到挑战 2011年 退役

    –没有大规模商用经历

    –对Android的发展有积极作用

Java语言规范定义了什么是Java语言

  •Java语言和JVM相对独立

    –Groovy

    –Jython

    –JRuby

    –Clojure

    –Scala

  •JVM主要定义二进制class文件和JVM指令集等

  

时间: 2024-10-06 19:17:58

深入浅出JVM的相关文章

深入浅出 JVM GC(3)

# 前言 在 深入浅出 JVM GC(2) 中,我们介绍了一些 GC 算法,GC 名词,同时也留下了一个问题,就是每个 GC 收集器的具体作用.有哪些 GC 收集器呢? Serial 串行收集器(只适用于堆内存 256M 以下的 JVM ) ParNew 并行收集器(Serial 收集器的多线程版本) Parallel Scavenge (PS 收集器,该收集器以吞吐量为主要目的,是1.8的默认 GC) CMS 收集器(该收集器全称 Concurrent Mark Sweep,是一种关注最短停顿

深入浅出 JVM GC(2)

# 前言 在 深入浅出 JVM GC(1) 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题. 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲解.在此,我将大纲复制过来. 垃圾回收算法 标记清除算法 复制算法 标记整理算法 分代收集算法(堆如何分代) 有哪些垃圾收集器 Serial 串行收集器(只适用于堆内存256m 以下的 JVM ) ParNew 并行收集器(Serial 收集器的多线程版本) Parallel Scavenge (P

阿里架构师带你深入浅出jvm

本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine) + 运行时数据区域(runtime data area) 下面这幅图展示了一个典型的JVM(符合JVM Specification Java SE 7 Edition)所具备的关键内部组件. 组件中的多线程处理 多线程处理"或"自由线程处理"指的是一个程序同时执行多个操作线程

深入浅出 JVM GC(1)

# 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段------GC(Garbage Collection).作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着内存,就像网上有句名言------生活从来都不容易,只不过是有人替你负重前行!是的,GC 在替我们做这些脏活累活,GC 像让我们把精力都放在业务上,而不用每时每刻都在想着内存.现在,GC 也是每个语言的标准配置了.不然谁会去使用这个语言呢? 然而,作为一个合格的程序员,对底层的好奇是进步的动力,如果

深入浅出 JVM GC(4)常用 GC 参数介绍

# 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我们的那些参数或者说选项,这些参数将会改变 GC 的运行方式.因此,他们显得极为重要. 我们将每一个垃圾收集器相关的参数一个一个娓娓道来,注意,楼主推荐一个小程序:前阿里 JVM 大神寒泉子的公众号里面有个小程序------JVM Pocket,这个小程序介绍了所有的 JVM 参数的作用,你可以在里面

深入浅出 JVM ClassLoader

# 前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎).我们也说,我们大部分情况下只关注前2个.在前面的文章中,我们已经分析了内存关系相关的,包括运行时数据区,GC 相关.今天我们要讲的就是类加载器. 在 JVM 综述 里,我们已经大致分析了一些概念.而今天的文章将详细的阐述类加载器. 首先,我们要了解类加载器,当然,了解的目的是为了更好的开发,通过对类加载器的

【深入浅出-JVM】(7):栈上分配

概念 对那些作用于不会逃逸出方法的对象,在分配内存时,不在将对象分配在堆内存中,而是将对象属性打散后分配在线程私有栈内存上,这样随着方法调用结束,栈上分配打散的对象也被回收掉,不在增加 GC 额外压力. Java 对象分配流程 示例 循环创建1000000000一个对象,阻止栈上分配 栈上分配条件:开启逃逸分析 & 开启标量替换 JVM 参数: 弃用逃逸分析(不允许判断对象是否可以逃逸出函数体) -server -Xmx10m -Xms10m -XX:-DoEscapeAnalysis -XX:

【深入浅出-JVM】(序)

本系列主要是让一个刚入门的 java 开发者,也能愉快的从零开始成为一个真正的 jvm 大神. 大纲 java 虚拟机的定义.总体架构.常用配置 垃圾回收算法.各类垃圾回收器 java 虚拟机对多线程的支持 java 虚拟机的 class 文件结构 java 虚拟机的执行系统 待定 原文地址:https://blog.51cto.com/10154395/2419047

【深入浅出-JVM】(8):TLAB

概念 TLAB(Thread Local Allocation Buffer)线程本地分配缓冲区(线程私有分配区,私有分配,公共查看),占用 Eden 区(缺省 Eden 的1%),默认开启,JVM 会为每一个线程分配一块 TLAB 区域,避免堆对象共享造成的多线程线程同步. 背景 优化多线程堆空间分配对象指针碰撞问题 局限性 TLAB空间一般不会太大,大对象直接进堆 TLAB允许空间浪费,导致Eden区不连续,触发 GC 分配策略 一个 100KB 的 TLAB 区域,如果已经使用了 80KB