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,希望自身能坚持写完这些文章.

本系列文章主要借鉴自和.

文章在公众号"IceWang"第一手更新,有兴趣的朋友可以关注公众号,第一时间看到笔者分享的各项知识点,谢谢!笔芯.

JVM(零):走入JVM的更多相关文章

  1. jvm系列(二):JVM内存结构

    JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...

  2. JVM基础:深入学习JVM堆与JVM栈

    转自:http://developer.51cto.com/art/201009/227812.htm JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题, ...

  3. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  4. JVM启动过程——JVM之一

    JVM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自己的代码和数据空间. JVM体系主要是两个JVM的内部体系结构分为三个子系统和两大组件,分别是:类装 ...

  5. 一步步优化JVM二:JVM部署模型和JVM Runtime

    选择JVM部署模型    JVM部署模型的选择总体来说就是决定应用是部署在单个JVM实例还是多个JVM实例上(这里简单举例说明一下JVM实例,比如:我们常用eclipse开发,启动一个eclipse就 ...

  6. jvm系列(七):jvm调优-工具篇

    16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...

  7. jvm系列(八):jvm知识点总览-高级Java工程师面试必备

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  8. jvm学习006 jvm内存结构分配

    主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: ...

  9. jvm系列(四):jvm知识点总结

    原文链接:http://www.cnblogs.com/ityouknow/p/6482464.html jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 ...

随机推荐

  1. AS400服务程序总结

    1.服务程序的创建和调用过程 1.1生成module 1.2编写BND文件确定输出接口 1.3生成服务程序 1.3.运行调用程序时,将服务程序导入到作业内存区active group,常驻内存 2.结 ...

  2. centos6上安装mysql8.0版本

    本博客是采用yum源的方式安装,非常的方便和快捷.(redhat 与centos7 等操作系统都可以采用此方法,步骤大体一致) mysql官网地址:   https://dev.mysql.com 开 ...

  3. cmd命令002

    cd..--> 返回上一级目录 cd\ --> 返回根目录"cd /d e:"--> 将当前盘符切换到e盘,"cd users/admin"- ...

  4. 【搜索】P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...

  5. 筛选法 || POJ 3292 Semi-prime H-numbers

    5,9,13,……叫H-prime 一个数能且仅能由两个H-prime相乘得到,则为H-semi-prime 问1-n中的H-semi-prime有多少个 *解法:vis初始化为0代表H-prime, ...

  6. assembly|reads to contig|contig to scaffold|coverage|depth| tandem repeats

    (组装方面):SOAPdenovo ,因为采用de Bruijn graph algorithm算法和stepwise strategy ,所以排错能力高,所以我们获得高质量数据. de Bruijn ...

  7. Swift语言Storyboard教程:第二部

    本文由CocoaChina翻译小组@TurtleFromMars翻译自raywenderlich,原文:Storyboards Tutorial in Swift: Part 2 更新记录:该Stor ...

  8. luogu 2709小b的询问--莫队

    https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...

  9. Django之使用celery异步完成发送验证码

    使用celery的目的:将项目中耗时的操作放入一个新的进程实现 1.安装celery pip install celery 2.在项目的文件夹下创建包celery_tasks用于保存celery异步任 ...

  10. 4. COLLATION_CHARACTER_SET_APPLICABILITY

    4. COLLATION_CHARACTER_SET_APPLICABILITY 表COLLATION_CHARACTER_SET_APPLICABILITY表示哪种字符集适用于哪种排序规则. INF ...