JVM(一)史上最佳入门指南
提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。而作为整个JVM系列的首篇,本文将带你解除刚开始学习JVM时的种种疑惑。比如:什么是JVM?为什么学习JVM?怎么有效的学习JVM?带着以上的这些问题,让我们一起走入JVM的世界吧。
一、什么是JVM?
JVM简介: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说JVM是用来解析和运行Java程序的。
Java有一个非常重要的特点“平台的无关性”,就是使用JVM实现的。Java语言只需要生成Jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为JVM本身屏蔽了与具体平台相关的信息,使得Java能够“一次编译,到处运行”。
二、为什么要学习JVM?
学习JVM无外乎以下几个原因:
1、 程序调优
不同的程序(业务场景)需要不同的Jvm配置,比如设置不同的垃圾收集器、设置新生代和老生带的内存配置和占比等,不同的配置对于程序的运行有着千差万别的影响。而Jvm默认的配置只能保证程序能够“运行”,而想要“很好的运行”甚至是“更好的运行”,就是学习Jvm最主要的因素之一。
2、 排查程序运行问题
有些程序可能在线上使用的时候会遇到各种各样的问题,而这些问题通常都是致命的,比如内存溢出,死锁导致的程序运行缓慢等,而这些问题在开发和小量并发测试阶段是很容易被忽略的缺陷,所以学习好了Jvm才能在关键的时候,临危不乱帮你扫除系统中的“顽疾”。
3、 掌握了程序执行的根本和原理
也就是很多人说的:不但要“知其然”,还要“知其所以然”。
4、 规避写代码时候的一些错误
比如避免重载可变长参数的调用(后面文章会给出具体的案例)。
5、 应付面试
不得不说这也是很多人学习的目的之一,当然这也是积极的推动力,如果你明白“鲶鱼效应”的话。
6、 掌握了其他语言的通用机制
JVM还有一个强大之处是,它不止可以运行Java程序,还可以运行Scala、Clojure、Groovy,以及时下热门的 Kotlin,学习JVM便可以了解这些语言的通用机制,甚至于让这些语言共享生态系统。
三、怎么有效的学习JVM?
以上了解了学习JVM的种种好处,但是怎么有效的学习JVM呢?有人可能一看到“JVM”或者“Java虚拟机”这几个字就懵了,不知道它是啥,更别说要怎么学了。而本小节就是要教大家怎么有效的学JVM,把JVM做一个知识点的划分。可以说,掌握了以下列举的知识点,就是掌握了整个JVM。
JVM的知识点,分为如下几个:
1、 JVM的组成
只有了解了JVM的组成部分,才能算的上真正的了解了JVM,JVM的组成5个部分:堆、虚拟机栈、本地方法栈、程序计数器、方法区,后面文章会分别介绍5个部分的具体用途。
2、 多种垃圾回收算法
Jvm中有很多垃圾回收算法,不同的算法优缺点也各不相同,比如:标记清除算法和复制算法、标记清楚算法会产生多种空间碎片、复制算法把内存分为两块,性能虽然很好但是每次只能使用一块,又浪费了内存的空间,那有没有相对完美的算法呢?答案肯定是有的,由于篇幅的原因,后面文章会详细讲解。
3、 多种垃圾收集器
Jvm的垃圾收集器有很多,比如最早版本的串行收集器Serial,发展历史最悠久的收集器,它是采用复制算法的新生代收集器,它是一个单线程收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程,直至Serial收集器收集结束为止(“Stop The World”)。还有CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器;还有比较前沿的G1(Garbage-First)收集器等。
学习这些收集器,一方面是为自己程序配置合适的收集器,另一方面是每个收集器的设置参数都不相同,学习了这些收集器的配置之后,可以为程序设置最优的运行匹配参数。
4、 JVM分析工具
Jvm的分析工具用于排查程序运行的缺陷,找出程序的问题所在,从而保证程序的稳定运行,Jvm分析器分为:命令行工具(官方称之为实验性质的工具,但稳定性是不容置疑的),还有视图分析工具,前者当然优于后者,但后者是建立在前者的基础上的,本系列后面会详细的把每个工具进行深入的讲解。
5、 Java类加载机制
Java类加载机制,讲的是Java的类在Jvm中的加载以及运行机制,对于认识Java是怎么运行的有着非常大的帮助,这也是学习Java非常有趣的一点,你可以看到Java运行的整个过程,是完全透明化的,给人一种“掌控感”,这是Java语言天生支持的,所以会觉得Java这门语言很有趣。
6、JVM常用优化配置
学习Jvm收益最大的其实就是,使用Jvm的这些常用配置,让你的程序运行的更高效,所以对于这方面的学习是必不可少的。
四、总结
本文带领大家对Jvm整体的印象有了初步的认识,我们明白了Jvm的学习能带给我们的收益,以及Jvm该如何学习,而这些问题恰好是刚开始学习Jvm时最大的障碍。万事开头难,好的开始是成功的一半,恭喜你学习了Java领域中一项不可或缺的技能,如果觉得本文不错,欢迎转发到朋友圈或分享给你的朋友。
此篇是Jvm系列的第一篇,关注作者公众号,了解后续更多精彩内容:
JVM(一)史上最佳入门指南的更多相关文章
- JVM史上最佳入门指南
提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂.唯一真正令我们恐惧的,其实是恐惧本身.而作为整个JVM系 ...
- 史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体验,非常简略的介绍和对比了几款常用的集成开发环境,就我个人而言,比较推崇 Zend Studio 和 PhpS ...
- [转]史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
本文转自:https://www.cnblogs.com/lishiyun19/p/4470086.html 在上一篇 PHP 系列的文章<PHP 集成开发环境比较>中,我根据自己的亲身体 ...
- 史上最全!信息安全入门指南<转>
以下所列出的链接均为在线文档,有志于信息安全的爱好者可由此作为入门指南. 背景知识 常规知识 Sun认证-Solaris 9&10安全管理员学习指南 PicoCTF资料 应用软件安全 OWAS ...
- 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!
本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...
- sentinel (史上最全+入门教程)
文章很长,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈 为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 < Java 高并发 三部曲 > 面试必备 + 大厂 ...
- JVM 内存溢出 实战 (史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- [No00004F]史上最全Vim快捷键键位图(入门到进阶)
史上最全Vim快捷键键位重磅来袭!!学习Linux的朋友看过来啦,你是不是觉得Linux编辑器Vim操作复杂,步骤繁琐呢?Linux工程师是不是想大幅度提升自己的工作效率呢? 经典版 下 ...
- Java程序员的Golang入门指南(上)
Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如 ...
随机推荐
- VB6进行GZIP解压&C#进行GZIP压缩和解压
VB进行GZIP解压的,DLL是系统的,如果没有 [点击下载] Option Explicit 'GZIP API '----------------------------------------- ...
- [LeetCode] Score of Parentheses 括号的分数
Given a balanced parentheses string S, compute the score of the string based on the following rule: ...
- 771. Jewels and Stones
You're given strings J representing the types of stones that are jewels, and S representing the ston ...
- 手动安装composer详细教学
1.下载compser.phar 地址 https://getcomposer.org/download/ 2.新建composer.bat 文件,写入“@php "%~dp0compose ...
- web全套资料 干货满满 各种文章详解
sql注入l MySqlMySQL False注入及技巧总结MySQL 注入攻击与防御sql注入学习总结SQL注入防御与绕过的几种姿势MySQL偏门技巧mysql注入可报错时爆表名.字段名.库名高级S ...
- Conda命令指标
一.Conda相关指令 # 查看当前环境下已安装的包 conda list # 查看某个指定环境的已安装包 conda list -n tensorflow # 查找package信息 conda s ...
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...
- 安卓开发学习笔记(二):如何用Android Stuidio在res资源下创建xml视图文件
笔者在看了相关的教程之后发现教程当中的资源已经过时了.当我们在创建了一个新的空白的工程之后,会发现其文件夹下面的分文件夹目录和官方的教程文件结构完全不同,因此会引起很多误解.笔者使用的是最新版的And ...
- The algorithm learning of sort which include Bubblesort,Insertsort,Quicksort and Mergesort.
Notice : these algorithms achieved by Java. So,let's going to it. firstly, what is Bubblesort? why w ...
- 【RL-TCPnet网络教程】第13章 RL-TCPnet之TCP服务器
第13章 RL-TCPnet之TCP服务器 本章节为大家讲解RL-TCPnet的TCP服务器实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...