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