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. LibreOJ #109. 并查集

    题目描述 这是一道模板题. 维护一个 nnn 点的无向图,支持: 加入一条连接 uuu 和 vvv 的无向边 查询 uuu 和 vvv 的连通性 由于本题数据较大,因此输出的时候采用特殊的输出方式:用 ...

  2. css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style

    css 两列 左侧列固定 width: 100px; float: left; 右侧列自适应 margin-left:100px; 注意要用在div上的style .con1{ width: 100p ...

  3. reciting

    When I was seventeen, I read a quote that went something like, '' if you live your each day as if it ...

  4. PHP17 PDO

    学习要点 PDO简要 PDO对象 PDO对象的使用 PDOStatement对象 PDO事务处理 PDO简要 PHP支持那些数据库操作 MySQL,Oracle,SQLServer,SQLite.Po ...

  5. PyTorch的十七个损失函数

    本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击: tensor-yu/PyTorch_Tutorial​github.com 版权声明:本文为博主原创文章,转载请附上 ...

  6. POJ-2442-Sequence(二叉堆)

    POJ-2442 Description Given m sequences, each contains n non-negative integer. Now we may select one ...

  7. 利用python库twilio来免费发送短信

    大家好,我是四毛,最近开通了个人公众号“用Python来编程”,欢迎大家“关注”,这样您就可以收到优质的文章了. 今天跟大家分享的主题是利用python库twilio来免费发送短信. 先放一张成品图 ...

  8. nginx+tomcat实现简单的负载均衡

    host1:10.0.0.10(部署nginx和tomcat) host2:10.0.0.11(部署tomcat) 平台环境(2主机一样) [root@smp ~]# uname -r3.10.0-8 ...

  9. 【Mysql数据库】知识点总结

    本文转载自:http://www.cnblogs.com/tonghun/p/7191131.html 一 数据库常用操作 mysql -u+username -p+password:登陆数据库管理系 ...

  10. 03002_Http请求协议分析

    1.编写一个form.html的表单页面 (1)使用EclipseEE新建一个动态的web项目: (2)Dynamic web module version选择2,5版本: (3)新建一个form.h ...