为什么80%的码农都做不了架构师?>>>
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 自定义类加载器
类图:
注:
Bootstrap加载器是使用C些的最基础的而加载类;其他加载器都是通过Java来实现的;Java实现的加载类的关系图可以看出 ClassLoader是基础类 SecureCloassLoader 资源类型类加载器 URLClassLoader是地址类型类加载器;
类加载器都是采用双亲委托制即在子类加载器未加载过此类的时候 会先去委托父类加载器加载此类 如果弗雷未找到才会自己去加载;
5,JVM内存分配
6,JVM运行
JVM分为 类加载子系统 执行引擎 原生态接口库;
参考文献:《深入解析JVM》
《JVM规范》