JVM(零):走入JVM
jvm(零):走入jvm
本系列主要讲述jvm相关知识,作为本系列的第一篇文章,本文从java为什么是一个跨平台的语音开始介绍,逐步引入java虚拟机的概念,并给出一个jvm相关知识图谱,可以让读者从一个高屋建瓴的角度明白jvm的强大和实用.
为什么java是跨平台的语言
提到java,就不得不提到java的跨平台特性,也就是所谓的"一次编写,处处运行",其不像c/c++这种语言,它们的编译是源代码级的,编译器需要直接把源代码编译成目标机器代码,这样的代码在使用过程中,如果需要在其他机器上运行,则需要交付源代码,重新进行编译,有一定的危险性.
而java是目标代码的无关性.java通过增加一层中间层,也就是jvm.将源代码先编译成平台无关的jvm语言,再根据不同的机器编译成不同的机器语言,从而实现了java的跨平台性.
在编程领域没有什么是加一层中间层解决不了的,如jvm,消息中间件等等.
jvm初探
说道jvm就要提到jdk,jre这两个概念,这3者是逐步包含在一起的.
- jvm: java虚拟机,操作系统起的一个进程,模拟真机环境是,java代码运行的主要区域;
- jre:jvm加上一些基础jar包,java代码运行的最小环境配置,一般人员使用过程中只需要配置到这步就可以开始运行java代码了;
- jdk:包含jre和一些开发编译工具,如javac,javap等,是开发人员需要用到的工具,一般开发人员需要使用到全部.
大纲
上图就是系列文章的大概.
首先我们要讲到一个java文件是如何经过javac编译器编译成.class文件的,其中涉及到"编译原理"中的内容,如词法分析,语法分析,语义分析,代码树生成等.
ps:但笔者对"编译原理"相关的知识也不是十分了解,在这里也只能讲个大概,详细的编译原理和过程有兴趣的建议在书上详细浏览.
然后讲述.class文件的基本内容,其中包含class常量类型,类信息,field和method信息等相关信息.
接着描述.class文件是如何加载到内存中的,包括类加载的机制,原理,过程和如何自定义一个类加载器.
最后涉及到jvm的重头戏---jvm内存区域的划分.描述jvm内部将内存划分为哪几个部分.其中每个部分存储的内容和对应的特性.此外在这部分还会涉及到内存的分配回收策略以及回收过程的详细描述和如何排查和避免内存泄露问题.
总结
第一篇文章在这里就结束了.本文主要还是起到一个目录的作用并让读者能从宏观的角度把握后续系列文章的脉络.在这里也立下一个flag,希望自身能坚持写完这些文章.
本系列文章主要借鉴自和.
深入理解java虚拟机-jvm高级特性与最佳实践>深入分析javaweb技术内幕>
文章在公众号"icewang"第一手更新,有兴趣的朋友可以关注公众号,第一时间看到笔者分享的各项知识点,谢谢!笔芯.