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. Java基础知识强化之IO流笔记14:递归之输出指定目录下所有java文件绝对路径的案例

    1. 需求:输出指定目录下的所以.java结尾文件的绝对路径的案例:  分析:  A:封装目录  B:获取该目录下的所有文件和文件夹的File数组  C:遍历这个File数组,得到每一个File对象的 ...

  2. Android(java)学习笔记216:多线程断点下载的原理(Android实现)

    之前在Android(java)学习笔记215中,我们从JavaSE的角度去实现了多线程断点下载,下面从Android角度实现这个断点下载: 1.新建一个Android工程: (1)其中我们先实现布局 ...

  3. 对require.js 的使用进行总结

    一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...

  4. ie下面兼容性问题的一些总结

    最后一次搞ie兼容性问题,以后都可以不管了0.0 1.浮动兼容性 1.1IE6下的双边距BUG 在IE6下,块元素有浮动和横向margin的时候,最边上元素的横向margin值会被放大成两倍 解决办法 ...

  5. Lucene.net 从创建索引到搜索的代码范例

    关于Lucene.Net的介绍网上已经很多了在这里就不多介绍Lucene.Net主要分为建立索引,维护索引和搜索索引Field.Store的作用是通过全文检查就能返回对应的内容,而不必再通过id去DB ...

  6. 利用Range改变光标位置

    先上代码,代码取自网上某插件中 function caret(begin, end) { if (this.length == 0) return; if (typeof begin == 'numb ...

  7. spring中涉及事务(bean中ref与local)

    <bean id="接口" parent="父id"> <property name="target"> <r ...

  8. 配置Statspack

    配置Statspack 配置前需要了解3个内容. 1.创建Statspack模式使用的密码. 2.Statspack使用的默认表空间. 3.Statspack使用的临时表空间. Create Tabl ...

  9. SGU 147.Black-white king

    时间限制:0.25s 空间限制:4M 题意: 在一个N*N(N <= 106)的棋盘上,有三个棋子:黑王.白王.黑白王,它们的行走方式一致,每秒向8个方向中的任意一个行走一步. 现在黑王和白王想 ...

  10. 纯js制作遮罩层对话框 -- g皓皓

    //本文支持js在线工具测试.转载请注明出处. <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> < ...