Java 由 Sun 公司在 1995 首次发布,既是一门编程语言,也是一个计算平台。

Java 运行时版本 Java Runtime Edition

当你下载 Java 完时候,你会得到一个 Java Runtime Time(JRE)。JRE 由三部分组成 : JVM,Java 平台的核心类,支持 Java 平台的库。这三部分是执行 Java 应用运行的基础。

Java 编程语言

Java 是一门面向对象的编程语言,包括以下特性:

平台独立 - Java 应用被编译成字节码存储在 .class 文件中,运行在 JVM 里面。由 Java 应用运作在 JVM 里面,所以可以跑在不同的机器、设备上面。

面向对象 - 略

自动垃圾回收 - Java 自动地分配、回收内存空间,应用程序不会被这个问题捆绑。

丰富的标准库 - 略

Java Development Kit

JDK 是一个工具集合,用于开发 Java 应用。利用 JDK,可以编译用 Java 语言编写的程序,并使其运行在 JVM 上。JDK 还提供了打包、分发 Java 应用的工具。

JDK 和 JRE 共享同一个 Java Application Programming Interfaces(Java API)。

Java API 是一个预打包好的库的集合,用于创建 Java 应用。Java API 通过提供许多通用的工具,使得开发变得更容易些。提供的工具可用于处理:字符串操作、时间日期处理、网络编程、数据结构的实现(例如, list, map, stack 和 queue)

Java Virtual Machine

Java Virtual Machine(JVM),是一个抽象的计算机器。JVM 是一个程序,但是对于运行在里面的程序来说,JVM 相似一个机器。Java 程序使用同一套接口和库,各个操作系统的 JVM 实现把 Java 语言指令翻译成当前操作系统的指令命令。这样,Java 程序编可以达到平台无关的目的。

JVM 完全不知道 Java 编程语言,只知道一个特殊的库格式,.class 文件格式。一个 .class 文件包含 JVM 指令或者字节码,一张符号表,以及其他的辅助信息。

JVM 架构

Java 商标归 Oracle 所有,Oracle 在发布的 JRE 包含一个Oracle 的 JVM,名为 HotSpot。下面介绍的是 HotSpot 的架构。

HotSpot 的关键组件

上图中高亮出来三个部分的是 JVM 性能相关的三个关键组件。在进行性能优化时,关注点也在这三个组件上面。

Heap,堆,用于存储对象的数据。

Garbage Collector, 垃圾回收器,用于管理 Heap 区域的内存。JVM 在启动时选择哪一个垃圾回收器。大多数的优化选项,和 Heap 的大小、垃圾回收器的选择有关。

JIT Compiler, 即时编译器,和性能有很大的关系,不过对于新版本的 JVM 很少需要调优。

性能优化基础

通常,对一个 Java 应用进行性能调优时,主要关注两个关键目标中的一个:响应速度或者吞吐量。

响应速度(Responsiveness)

响应速度,是指一个应用或者系统响应一个请求,并提供被请求的数据,需要多久。

例如:

一个桌面程序的 UI 响应一个事件需要多久

一个网站返回一个页面需要多久

返回一个数据库查询需要多久

对于一个关注响应速度的应用来说,长时间的暂停是不可以接受的。这里的焦点在于响应时间应当很短暂。

吞吐量(Throughput)

吞吐量,关注的是在指定一段时间内,让一个应用处理任务的的量尽可能地多。

例如:

在给定时间内,可以完成的交易次数

在一个小时内,可以完成的批处理程序有多少

在一个小时内,可以完成的数据库查询次数有多少。

关注吞吐量的应用,一般可以接受长时间的暂停。由于高吞吐量的应用更关注长时间内的性能变化,所以响应速度不是重点。

参考资料

Java Technology and the JVM, Java Garbage Collection Basics, Oracle

[Java] Java 技术和 JVM 基础的更多相关文章

  1. java虚拟机入门(一)-jvm基础

    转行学java之前,总是听着大佬们说着java像个渣男一样可以跨平台,一次编译到处运行,瞬间,我就坚定了学java的信念,哎呀妈呀,得劲.真的学java之后,好像渣男也不是那么好学的,尤其这货的必杀技 ...

  2. JVM基础系列第6讲:Java 虚拟机内存结构

    看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,J ...

  3. JVM基础系列第2讲:Java 虚拟机的历史

    说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...

  4. JVM基础系列第1讲:Java 语言的前世今生

    Java 语言是一门存在了 20 多年的语言,其年纪比我自己还大.虽然存在了这么长时间,但 Java 至今都是最大的工业级语言,许多大型互联网公司均采用 Java 来实现其业务系统.大到国际电商巨头阿 ...

  5. JVM基础系列第13讲:JVM参数之追踪类信息

    我们都知道 JVM 在启动的时候会去加载类信息,那么我们怎么得知他加载了哪些类,又卸载了哪些类呢?我们这一节就来介绍四个 JVM 参数,使用它们我们就可以清晰地知道 JVM 的类加载信息. 为了方便演 ...

  6. JVM基础系列第11讲:JVM参数之堆栈空间配置

    JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError.因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要. tips ...

  7. JVM基础系列第10讲:垃圾回收的几种类型

    我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...

  8. JVM基础系列第9讲:JVM垃圾回收器

    前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收 ...

  9. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

随机推荐

  1. Android中强大的Matrix操作

    简介: Matrix翻译字面意思时矩阵,在Android的API中提供了两种Matrix,分别是android.graphics.Matrix 和 android.opengl.Matrix . 后者 ...

  2. Android四大图片缓存(Imageloader,Picasso,Glide,Fresco)原理、特性对比

    四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用. Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所 ...

  3. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  4. cxf客户端代码wsdlLocation设置相对路径

    利用工生成的cxf客户端代码,wsdlLocation都是绝对路径,为了便于项目更加灵活管理,我们可以将该路径设置为相对路径: 1.下面图片是我的项目路径图片及wsdl地址存放路径: 2.下面图片是我 ...

  5. 【USACO 1.3.2】修理牛棚

    [描述] 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...

  6. Bootstrap_排版_文字样式

    一.段落 段落是排版中另一个重要元素之一.在Bootstrap中为文本设置了一个全局的文本样式(这里所说的文本是指正文文本): 1.全局文本字号为14px(font-size). 2.行高为1.428 ...

  7. socket本地模拟TCP 服务器+客户端(二)

    建立两个py文件,分别打开两个cmd界面,即可进行通信.服务器端运用多进程,连续不断的处理从客户端接收到的数据:客户端通过一个list不断给客户端发送数据. (每个连接都必须创建新线程(或进程)来处理 ...

  8. Lucene查询条数限制

    运用Lucene进行索引,在查询的时候是有条数限制的 public virtual TopFieldDocs Search(Query query, Filter filter, int n, Sor ...

  9. GitHub 入门

    1. CentOS 安装 Github. # sudo yum install skynet 安装之后查看一下版本. # git --version 2. 注册 Github 账号,登录后阅读 Git ...

  10. facebook分块加载,页面优化,BigPipe,简单实例

    <!DOCTYPE html><html><head><meta charset=”utf-8″><title>BigPipe Demo 3 ...