聊聊JVM

JVM,一个熟悉又陌生的名词,从认识Java的第一天起,我们就会听到这个名字,在参加工作的前一两年,面试的时候还会经常被问到JDK,JRE,JVM这三者的区别。

JVM可以说和我们是老朋友了,但是在工作中的应用场景也许不如那些框架,但是在关键时候还是得靠它去搞定问题,俗话说得好,知己知彼,方能百战不殆,JVM作为前往高级工程师的一道坎,从这篇文章开始,我们会去逐步的分析,讲解,攻克这座大山。

什么是JVM

JVM(Java Virtual Machine),翻译成中文就是Java虚拟机,总所周知,Java语言有一个非常鲜明的特性,也是前期Java 发展的口号之一

Write Once Run Everywhere

"一次编写,到处运行",相信作为一名Java开发人员,我们对这句话都不会陌生,这句话的底气就来源于我们的JVM。

其中的原理就是,我们所编写的源程序java文件,被编译成了JVM可以识别的字节码文件(以class为后缀的文件),到处运行所依赖的其实就是为不同的平台实现了不同的虚拟机。

java的程序运行在JVM上,而非直接运行在CPU上。

JVM的学习要点

首先,我们需要知道的是,作为一个虚拟机,必定是拥有自己的内存机制,所以我们必须对他的内存机制有所了解,其中包括了内存结构垃圾回收机制等一些内容。

其次,我们需要知道,我们写的源代码被翻译成了字节码文件(因其后缀名为class,所以也会被称为类文件),对于这个文件的结构,我们必须有所了解,在知道了该类的结构下,对于一些并发多线程的知识才能做到洞若观火,知其然知其所以然。

该字节码文件在进入虚拟机到执行之前,会经历一系列的过程,我们对于这个过程的机制一般称为类加载机制,当这个类被加载到JVM中,在运行的过程中,会有一系列的指令去帮助程序到达最终的目的。

其实,上面说了那么多,都是在帮助我们对于java文件的一个执行过程发生的事情有一个更深的了解,在遇到问题时,我们可以胸有成竹,刨根问底的去解决问题,但是在日常工作中,我们不会甚至肯定不会去看我们写完的字节码文件,我们关心的是如何使用工具调优,使最低的成本发挥最高的价值,通过对JVM的调优使我们的程序的鲁棒性得到提升。

关于JVM的一个补充

虽然,JVM叫做Java Virtual Machine,但是需要注意,随着Java的发展壮大,有越来越多的语言加入到JVM生态中,比如我们耳熟能详的Groovy,Scala,Kotlin等等,他们都是依托于JVM平台的,编译产生的文件也都是后缀为class的字节码文件。

写在末尾

当亲爱的读者大人看到这篇文章的时候,说明Vi的技术博客JVM系列已经开启更新,之前的Spring Boot系列暂告一段落(后续会不定期更新),同时最开始接触写作时写的Java基础系列也会迎来一次回炉重造,敬请期待。

很庆幸能够遇到你们,谢谢你们一直以来的支持和陪伴 :)

公众号

最新文章

  1. Android总结之Gzip/Zip压缩
  2. ElasticSearch+ElasticGeo+Geoserver发布ES地理数据
  3. css中font-size的单位总结:px、em、pt
  4. MR跑百分27不动引发的问题
  5. <构建之法>第十一章、十二章有感
  6. web页面动态加载UserControl,并调用用户控件中的方法来初始化控件
  7. spring mvc与mybatis收集到博客
  8. Kettle 实现mysql数据库不同表之间数据同步——实验过程
  9. MySql 日期字符串类型互转
  10. Linear Regression(线性回归)(二)—正规方程(normal equations)
  11. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
  12. 如何更换git托管
  13. Erlang gen_server进程花样作死
  14. 一.初识java
  15. JavaScript经典片段
  16. [python网络编程]使用scapy修改源IP发送请求
  17. IDEA 之 “There is no configured/running web-servers found!...”
  18. Bad Hair Day
  19. shell学习1---基本的shell命令
  20. WIFI Direct(Wi-Fi P2P)

热门文章

  1. baiduMap试手《办理进京证和市区警察查询进京证的地址浏览》
  2. Awesome Go (http://awesome-go.com/)
  3. vue+TS(CLI3)
  4. python算法与数据结构-单链表(38)
  5. 你必须了解的java内存管理机制(三)-垃圾标记
  6. 【dateFormatSymbols】JAVA特殊日期格式转换
  7. CPP常用库函数以及STL
  8. SQL注入与防御
  9. VirtualBox中安装CentOS使得在ssh和外网都能正常链接
  10. Python入门(一) 异常处理