java虚拟机_一文彻底读懂Java虚拟机!(JVM)

提到Java虚拟机(JVM),可能大部分人的第一印象是“难”,但当让我们真正走入“JVM世界”的时候,会发现其实问题并不像我们想象中的那么复杂。唯一真正令我们恐惧的,其实是恐惧本身。而作为整个JVM系列的首篇,本文将带你解除刚开始学习JVM时的种种疑惑。比如:什么是JVM?为什么学习JVM?怎么有效的学习JVM?带着以上的这些问题,让我们一起走入JVM的世界吧。

5da1e9072601e856dcb27f6537e10402.png

一、为什么要学习JVM?

学习JVM无外乎以下几个原因:

1、 程序调优

不同的程序(业务场景)需要不同的Jvm配置,比如设置不同的垃圾收集器、设置新生代和老生带的内存配置和占比等,不同的配置对于程序的运行有着千差万别的影响。而Jvm默认的配置只能保证程序能够“运行”,而想要“很好的运行”甚至是“更好的运行”,就是学习Jvm最主要的因素之一。

2、 排查程序运行问题

有些程序可能在线上使用的时候会遇到各种各样的问题,而这些问题通常都是致命的,比如内存溢出,死锁导致的程序运行缓慢等,而这些问题在开发和小量并发测试阶段是很容易被忽略的缺陷,所以学习好了Jvm才能在关键的时候,临危不乱帮你扫除系统中的“顽疾”。

3、 掌握了程序执行的根本和原理

也就是很多人说的:不但要“知其然”,还要“知其所以然”。

4、 规避写代码时候的一些错误

比如避免重载可变长参数的调用(后面文章会给出具体的案例)。

5、 应付面试

不得不说这也是很多人学习的目的之一,当然这也是积极的推动力,如果你明白“鲶鱼效应”的话。

6、 掌握了其他语言的通用机制

JVM还有一个强大之处是,它不止可以运行Java程序,还可以运行Scala、Clojure、Groovy,以及时下热门的 Kotlin,学习JVM便可以了解这些语言的通用机制,甚至于让这些语言共享生态系统。

二、什么是JVM?

JVM简介: JVM是Java Virtual Machine的缩写,中文翻译为Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。简单来说JVM是用来解析和运行Java程序的。

Java有一个非常重要的特点“平台的无关性”,就是使用JVM实现的。Java语言只需要生成Jvm上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,因为JVM本身屏蔽了与具体平台相关的信息,使得Java能够“一次编译,到处运行”。

三、怎么有效的学习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领域中一项不可或缺的技能。

f4c477651eec5c057ec79bba58336508.png

如果你想免费学习(Java工程化、高性能及分布式、微服务、Spring,MyBatis,Netty源码分析)可以加程序员的Java高级进阶群:875511259,群里有阿里大牛讲解分享技术,以及大型互联网技术视频,大家都是免费分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java open course_关于开闭原则 JavaDiscountCourse 类的设计

亲爱的同学,你好,我是geely老师的助教。你这样挺不错的。和老师的设计有不同的思路,赞。我再修改一下,看看能不能还有不一样的想法。public class DiscountCourse implements ICourse{private ICourse course;//折扣private doubl…

如何把一个软件嵌入另一个软件_新增一个软件一个游戏

今后会不定时增加付费软件的试用,如果大家有希望选购的IOS软件可留言。如果各位觉得软件好用,请去App Store购买支持开发者。MaginNote 3 (¥88)简介:MarginNote 3,全新上线电子阅读器,助力更高效书籍阅读和学习.革新性整合阅读标注…

java图书管理系统技术难度_Java图书管理系统练习程序(一)

Java图书管理系统练习程序第一部分该部分主要实现命令行方式的界面与无数据库访问的练习,通过本练习、主要掌握Java的基础知识与面向对象程序设计思想、面向接口编程技术的知识与运用。一、练习程序功能分析该练习程序主要用于学习Java的基础编程知识与面向接口编程…

java语言_JAVA语言

Java(计算机编程语言)JavaEE:12天掌握Java语言开发 - Java-环境搭建及基础语法 - 创客学院直播室Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Jav…

java的基础类库称为_JAVA基本类库介绍

8.1 包的概念包是由.class文件组成的一个集合,.class文件时可以用Java解释其解释执行的文件,它也是由Java源的文件,即.Java文件经编译而生成的。Java是一种面向对象的语言,它的特点就是重用,包就是组织和管理.class文件…

linux关机_强制关机对电脑有什么危害?

强制按下关机键对电脑有什么影响?首先我们来了解下强制按下关机和正常关机的流程有什么区别:比较上面这两个流程图我们可以发现正常关机系统关机流程硬件关机流程。强制关机则缺少了系统关机流程这个部分,仅仅执行了硬件关机的这个流程。虽然…

14英寸电脑长宽多少_连接4K显示器流行,带雷电3雷电4接口的笔记本要多少钱?...

我们都知道,现在很多笔记本电脑都具备了4K 60p视频的播放能力,效果不俗,但笔记本本身屏幕是4K的比较少,并且也没那么大,连接显示器成了必须。而说到接口中,现在最时髦的要数雷电3、雷电4了,达到…

java中集合类的转换_Java中的两个常用工具类及集合数组的相互转换

为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类:一、Collections1、Collections类的特点:集合框架的工具类。里面定义的都是静态方法。2、Collections和Collection有什么区别?Collection是集合框架中的…

scrapy如何指定生成python3的项目_新手学习scrapy的坑(都是泪)

早就听说scrapy是爬虫界的明星框架,就好比80后一定知道周杰伦,00后一定知道tfboy一样(为啥没有90后,不要问我为什么,不想说~,就是这么任性)。但凡爬虫相关的工作要求都会要求涉及到scrapy框架&a…

java表达式1 2_Aviator 2.1.1 发布,Java表达式引擎

Java 表达式解释引擎——aviator发布2.1.1,主要做的改进如下:1,性能改进,最新的性能测试表明aviator的性能已经接近甚至超过Groovy 1.8。具体请看这个性能测试报告,当然,性能上跟Fel还是有比较大的差距&…

access建立两个字段唯一索引_数据库索引原理及优化

微信公众号:云计算通俗讲义持续输出技术干货,欢迎关注!通过本文你将了解:概述分类索引底层实现原理基本操作索引失效索引优化01 概述索引是帮助MySQL高效获取数据的排好序的数据结构,用于快速找出某个列中有一特定值的…

java在虚拟机下的安装_centos 虚拟机下安装 Java方法

方法一:手动解压JDK的压缩包,然后设置环境变量方法二:用yum安装JDK方法三:用rpm安装JDK方法四:Ubuntu 上使用apt-get安装JDK1.在/usr/目录下创建java目录[rootlocalhost~]#mkdir/usr/java[rootlocalhost~]#cd/usr/java…

域用户频繁被锁定怎么解决_视频素材太多怎么办?看Mac用户如何使用NAS解决存储难题...

为什么需要一台NAS?在如今这个信息大爆炸的时代,指数级增长的图片、视频、文件,推动人们产生了对数据储存和管理的巨大需求。在这样的背景下,NAS便应运而生。我作为一名使用苹果Mac电脑的内容工作者,Mac电脑存储太小的…

java有 号_JAVA揭竿而起总要有名号

古代揭竿而起总要有个响亮的名号,这可不是随便的哦,比如 苍天已死,黄天当立。。。玩JAVA里面形形色色的名字,都是有套路的,至于名字怎么起法,那得问问标识符标识符用作给变量、类和方法命名。注意&#xf…

python函数的作用域_python函数的作用域和引用范围

以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html 变量作用域 Python 中,程序的变量并不是在哪个位置都可以访问的…

java整合html_springBoot整合mybatis、jsp 或 HTML

springBoot整合mybatis、jspSpring Boot的主要优点:1: 为所有Spring开发者更快的入门;2:开箱即用,提供各种默认配置来简化项目配置;3: 内嵌式容器简化Web项目;4: 没有…

python语言及其应用电子版翁正秋_Python语言及其应用pdf

《Python语言及其应用》内容易于理解,而且读起来生动有趣,是编程和Python初学者不可多得的教程。书中首先介绍了Python的基础知识,然后逐渐深入多种主题,结合教程和攻略式风格来讲解Python 3中的概念。每章结尾的练习可以帮助你巩…

c 怎么连接mysql博客_C连接MySql数据库

我用的是dev-c 4.9.9.2 withMingw/GCC 3.4.2加C语言连接mySQL如果使用的是msvc的编译器,那么使用的libmysql.lib是没问题的,但是如果使用的是mingw编译器,那就会出错,有undefinedreference....等类错误字样。这是因为mingw使用的库…

回溯法基本思想_LeetCode--回溯法心得

这两天在刷LeetCode37题解数独时,被这个回溯法折腾的不要不要的,于是我疼定思疼发誓一定要找个能解决这类回溯法的套路出来,方便以后快速解决此类题目。于是我在网上找了两个很经典的回溯法题目--八皇后问题和迷宫问题,认真总结了…

java入门从哪下手_java新手0基础如何最快速的入门

一口不吃了一个胖子,心急吃不了热豆腐。当你点开这篇文这句话送给你。零基础学Java只需办法适合,仍然有机遇进修好Java编程。初学Java就像交同伙从生疏到认识再到铁杆错误平生相伴,跟着进修的深刻,你会发明学Java并非设想的那样死…