当前位置: 首页 > news >正文

1.1JVM

为什么80%的码农都做不了架构师?>>>   hot3.png

1,认识JVM

    Java是一个高级编程语言;*.java文件是使用Java编程语言写出来的源代码程序;*.class是经过JDK编译之后的JVM可识别的Java字节码;JVM是所有Java编写的所有语言的运行基础环境(如果你是厨师  程序就是做出一道道美味 那么JVM就是灶台);

    一个Java程序的执行过程(也就是JVM的执行周期):

    1,使用JDK编译源码产生.class字节码

    2,JVM开始简要此类是否加载  如果未加载就使用ClassLoader加载字节码

    3,开始验证节码  准备 解析字节码

    4,初始化对象

    5,开始main方法

    6,JVM卸载对象  回收内存

 

JVM物理结构:

    



2,字节码

        JVM运行的第一步就是加载字节码(.class file);

        Java文件是程序员编写的源码,用于程序员按照Java语法来表达或者完成莫一目标的语言描述文件;此文件可以供人阅读;但是最终的Java程序都是运行在JVM中,要想JVM识别Java文件必须对Java文件编译处理,转化为.class字节码文件;

        字节码是按照一定的语法来生成的机器码文件;(了解具体语法可以参考 深入解析JVM和JVM规范);


3,JDK(Java develop kit)Java开发工具包

        JDK组成:

            


    JDK包含两部分 一部分是开发API另外一部分是JRE(Java runtime environment Java运行时环境);

    Java开发最常用的就是API的调用,如下就是常用软件包的:

    Java.lang      java.io/nio   java.util    javax.net javax.tools  等等;

    

4,ClassLoader类加载

     类加载主要分为四步:

        1,jvm.dll 初始化JVM

        2,产生 Bootstrap Loader  基础引导加载类;开始加载JAVA_HOME/lib下面的jar包来工作

        3,Bootstrap Loader加载的最后一步是加载 Extended Loader 扩展类加载器; 开始加载JAVA_HOME/lib/ext下面的jar来工作

        4,Extended Loader加载的最后一步是 AppClassLoder 系统类加载器

        5,CustomerClass  Loader   自定义类加载器


类图:

110228_NmsN_1249631.jpg

110228_h9LO_1249631.jpg



注:

    Bootstrap加载器是使用C些的最基础的而加载类;其他加载器都是通过Java来实现的;Java实现的加载类的关系图可以看出   ClassLoader是基础类    SecureCloassLoader 资源类型类加载器  URLClassLoader是地址类型类加载器;

    类加载器都是采用双亲委托制即在子类加载器未加载过此类的时候 会先去委托父类加载器加载此类  如果弗雷未找到才会自己去加载;


5,JVM内存分配

        134538_XyfY_1249631.jpg

6,JVM运行

134807_4Vr1_1249631.jpg

        JVM分为 类加载子系统  执行引擎  原生态接口库;


参考文献:《深入解析JVM》

                《JVM规范》

转载于:https://my.oschina.net/ZGang/blog/493717

相关文章:

  • 十进制转二进制
  • Android 工作随记
  • CRB and String
  • CoCoaPods
  • Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
  • Hexo 个人博客搭建
  • 2.4-Apache访问控制
  • Excel文档上传
  • kvm 安装 centos7 文本模式 分辨率 太高修改
  • Android中Activity和Fragment与Fragment和Fragment之前互相传值方法
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 软件工程相关问题
  • 数据结构Java实现04----循环链表、仿真链表
  • 将视频导入到iOS Simulator中
  • SPFA/Dijkstra POJ 3159 Candies
  • 收藏网友的 源程序下载网
  • 【comparator, comparable】小总结
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Python十分钟制作属于你自己的个性logo
  • v-if和v-for连用出现的问题
  • vue-loader 源码解析系列之 selector
  • 关于使用markdown的方法(引自CSDN教程)
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 配置 PM2 实现代码自动发布
  • 前端攻城师
  • 前端临床手札——文件上传
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 树莓派 - 使用须知
  • 学习Vue.js的五个小例子
  • 带你开发类似Pokemon Go的AR游戏
  • 说说我为什么看好Spring Cloud Alibaba
  • ​插件化DPI在商用WIFI中的价值
  • ​如何在iOS手机上查看应用日志
  • #stm32整理(一)flash读写
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (汇总)os模块以及shutil模块对文件的操作
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转载)从 Java 代码到 Java 堆
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net core 控制台应用程序读取配置文件app.config
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET4.0并行计算技术基础(1)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET中 MVC 工厂模式浅析
  • @Async注解的坑,小心
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [.NET]桃源网络硬盘 v7.4
  • [C++]18:set和map的使用
  • [Deep Learning] 神经网络基础
  • [HDU 3555] Bomb [数位DP]
  • [hdu2196]Computer树的直径