JVM读书笔记之JVM简介

12 篇文章 0 订阅

       Java语言的深入学习必然会涉及到JVM,今日人们对程序的运行效率与容错率要求日益增高,因此面对项目调优,处理程序内存等问题,需要我们不但深入理解Java虚拟机各个部分与原理,还要我们熟练使用JVM性能监控与故障处理工具。本博客对JVM进行一些简单的介绍,详细内容会持续更新,欢迎各位大牛指正,互相交流学习。

       我们从几个问题入手,对JVM进行简单的了解,本文介绍的JVM是基于JDK 1.6版本,新版的JDK有较大改动。

       1. 什么是JVM?

           JVM全称是Java Virtual Machine,也就是我们常说的Java虚拟机,是Java跨平台性的基石。JVM是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

     2.JVM如何实现跨平台性?

        Java最重要的特性之一就是:一次编译,多处运行。Java虚拟机是如何实现跨平台性的呢?虚拟机(Virtual Machine)是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。从虚拟机的概念我们可以看出,JVM是与我们日常使用的操作系统(Window,Linux,MaxOS等)无关的独立系统,只要遵循JVM规范的语言均可以被JVM解释执行。运行在JVM上程序的执行流程如下:

        

       1).程序源代码通过编译器(例如javac)生成后缀名为".class"文件的Java字节码文件;

       2).由类加载器(ClassLoader)将class文件加载到JVM中;

       3).字节码解释器根据平台不同,将.class文件解释翻译为机器语言再执行。注:不同的硬件平台所需要安装的Java虚拟机不同!

       至此我们可以发现JVM是怎样实现跨平台性的。

    3.Java技术体系

                            

       从广义上来讲,Java、JRuby、JPython、Groovy等运行与Java虚拟机上的语言及其相关的程序都属于Java技术体系的一员(注:不同的语言编译器不同,但生成的.class文件都必须遵循JVM规范)。正是因为如此JVM语言层出不穷,Java虚拟机也并不是单单指运行Java语言!

       我们把java语言、java虚拟机与Java API库类称为JDK(Java Development Kit),用于支持Java程序开发的最小环境;把Java API类库中的Java SE API子集和Java虚拟机称为JRE,是Java程序运行的标准环境。因此我们进行Java程序开发必须安装JDK,而如果仅仅运行Java程序只需要安装JRE即可。

     4.JVM如何将Class文件加载到内存

        Class文件中描述的各种信息,最终都需要加载到虚拟机中才能被运行和使用。类加载指的是虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。Java语言在运行时通过ClassLoader类及其子类进行类型加载和连接(Java语言的动态扩展性依赖动态加载和动态连接)。ClassLoader是根据双亲委派模型进行加载。

     5.JVM运行时数据区

        Java虚拟机在执行Java程序时会把它所管理的内存划分成若干个不同的数据区域,每个区域都其用途。具体分为以下五块:方法区,虚拟机栈,本地方法栈,堆,程序计数器。 后面会对这些区域进行详解

     6.JVM垃圾回收

        大家本科时肯定都学过C/C++,它们是手动释放内存与垃圾回收,而Java语言是动态分配内存和自动垃圾收集。对我们进行程序开发带来了极大的便利,使我们更加专注于程序逻辑实现。JVM提供多种垃圾收集器及参数调节指令,使垃圾回收更加灵活,方面我们根据实际情况选择最优的收集方式。后面会对GC算法,GC收集器与GC策略进行详解。

     7.虚拟机性能监控与故障处理工具

        我们深入了解虚拟机目的是对程序运行期进行性能监控与调优,程序运行时监控数据包括:运行日志,异常堆栈,GC日志,线程快照,堆转储快照等。使用JVM工具可以帮助我们分析数据从而发现解决问题与程序调优。

        1.JDK的命令行工具

          JDK的bin目录下提供一些命令命令行工具,比如jps、jstat、jinfo、jmap、jhat、jstack。这些命令工具大多数是tools.jar类库的一层薄包装而已,他们的主要功能是在tools类库中实现的。

        2.JDK可视化工具

           JConsole与VisualVM是JDK提供的两个功能强大的可视化工具。

        我们可以灵活使用6个命令行工具与2个可视化工具对程序进行监控,处理和调优。

               


                    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值