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. spring 常见的注解

    spring中的注解都必须在配置文件中进行如下的配置: <context:component-scan base-package="com.shanjin.oxm.service.im ...

  2. Angular和SAP C4C的事件处理队列

    Angular 我们在Angular框架的代码里能看到一个名为processQueue的函数: 这个函数是通过$scope.$apply启动的: 核心代码位于一个for循环里,循环体是一个存储异步处理 ...

  3. windows安装tensorflow的一个教训

    今天没什么课,然后就准备安装tensorflow. 看了一下教程,就去做了. 然后就犯了错误.网上的教程还是有一些差异的,而我又比较大意,没有很注意到CUDA,cudnn的版本要求,也过于高估自己cp ...

  4. shift Alt + up(down) copy current line ! ctrl + j show the control # vscode key

    shift Alt + up(down) copy current line ! ctrl + j show the control # vscode key

  5. CPP-基础:inline

    背景: 在C&C++中 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionNam ...

  6. STL || Gym 101653U Top 25

    一组字符串给出两种排列方式, 求最小分成多少组 如 A     A B     C C    D D    B E    E 则分成3组 A B C D E 即为1 3 1 #include < ...

  7. python+selenium自动化登录dnf11周年活动界面领取奖励登录部分采坑总结[1]

    背景: Dnf的周年庆活动之一,游戏在6月22日 06:00~6月23日 06:00之间登陆过游戏后可以于6月25日 16:00~7月04日 06:00领取奖励 目标:连续四天自动运行脚本,自动领取所 ...

  8. 第4节 hive调优:2、数据倾斜

    数据的倾斜: 主要就是合理的控制我们的map个数以及reduce个数 第一个问题:maptask的个数怎么定的???与我们文件的block块相关,默认一个block块就是对应一个maptask 第二个 ...

  9. 如何给run()方法传参数

    实现的方式主要有三种 1.构造函数传参 2.成员变量传参 3.回调函数传参 问题:如何实现处理线程的返回值? 1.主线程等待法(优点:实现起来简单,缺点:需要等待的变量一多的话,代码就变的非常臃肿.而 ...

  10. Firefox--摄像头麦克风权限

    在自动化测试的过程中,可能会遇到来自浏览器的权限提示(摄像头.麦克风),今天,就讨论一下如何结局这个问题. 先来认识一下来自Firefox的权限提示,访问一个需要摄像头或者麦克风的网站 你可能觉得,一 ...