JAVA运行在JVM之上,JVM的运行状况会对程序产生很大的影响,因此了解一些JVM的东东,对于编写稳定的,高性能的java程序至关重要。这是JVM的规范中定义的标准结构图:

以上标准是JVM标准中定义的,各个厂商在实现的时候不一定完全遵守.
JVM负责装载class文件并执行,因此首先要掌握的是JDK如何将java代码编译成class文件,如何装载class文件及如何执行class,将源码编译成class文件的实现取决于各个JVM的实现或各种源码编译器,class文件通常由ClassLoader来加载完成,class的执行在SUN的JDK中有解释执行和编译为机器码执行两种,其中编译为机器码又分为client和server两种模式。SUN的jdk为了提升class的执行效率,对于编译执行和解释执行都设置了很多的优化策略。

在此我们主要讨论SUN的jdk1.6,蝌蚪主要从三方面来介绍一下,(类的编译加载,jvm内存回收,jvm的多线程支持)如果时间允许会更多的,请持续关注,谢谢小伙伴,你们的支持是我持续更新的最大动力。

jvm规范中规定了class文件的格式,但是没有定义java源码如何编译为class文件,各个厂商在实现JDK的时候通常会将符合符合java语言规范的源码编译为class,SUN的jdk中编译命令就是javac,javac编译的过程如下图:

在此重点说一下第三步,Analyse步骤基于抽象语法树进行一系列的语义分析,包括将语法树中名字,表达式,等元素与变量、方法、类型等联系到一起;如检查变量使用前是否已声明,推导泛型方法的类型参数;检查类型匹配性;进行常量折叠;检查所有语句都可到达;检查所有的checked exception都被捕获或抛出,检查变量的确定性赋值(如有返回值的方法必须确定有返回值),检查变量的确定性不重复赋值(例如声明为final的变量等);解除语法糖(消除一些无用的代码);将java泛型转化为普通java,还有就是讲复杂的语法树变为简单的,如foreach,自动拆箱,装箱等一系列的动作,现在知道编译期做了多少事了吧。

类加载的整个过程如下:

1.装载;
装载就是负责找到二进制字节码并加载到JVM中,JVM通过类的全限定名及类加载器来完成类的加载,因此说,标识唯一一个被加载的类就是通过以上两个东东来的。类名的命名方式是这样的:
对于接口或者非数组类型的类,其名称就是类名,此种类型的类由所在的ClassLoader负责加载;
对于数组类型的类来说,其名称为“[”+基本类型 或者 L+引用类型名称,例如:
byte[] byte = new byte[512]; 类名:[ B;
Object objects = new Object[10] 类名:[Ljava.lang.Object
数组型类中的元素由所在的ClassLoader负责加载,但数组类型由JVM直接创建。

2.链接
链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量及解析类中调用的接口,类。
3.初始化
初始化过程即执行类中的静态初始化代码,构造器代码及静态属性的初始化,一下四种情况初始化过程会被触发:
a,调用了new;
b,反射调用了类中的方法;
c,子类调用了初始化;
d,JVM启动过程中指定的初始化类
在执行初始化之前,必须先完成链接过程的校验和准备阶段,解析阶段则不强求。

JVM的类加载通过ClassLoader及其子类来完成,分为Bootstrap ClassLoader,Extention ClassLoader, System ClassLoader,User-Define ClassLoader,其关系如图所示:

[置顶] 与小伙伴共勉的java有关jvm的知识(一),小鸟尽量写得详细哦,欢迎讨论,谢绝喷子的更多相关文章

  1. Java虚拟机JVM相关知识整理

    Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...

  2. [置顶] Chat Room:基于JAVA Socket的聊天室设计

    d0304 更新功能实现 d0312 更新部分图片&UI设计部分 d0318 更新功能实现 d1222 实现添加好友功能.实现注册功能.修改大量BUG github:https://githu ...

  3. Java、JVM和操作系统之间的关系,写给新人,

    来张图:这个帖子写给新人的,老玩家就直接无视他,因为这个完完全全是白话基础原理. 解释:上面的图是从上往下依次调用的关系. 操作系统(Windows/Linux)管理硬件,让硬件能够正常.合理的运行, ...

  4. android linearlayout imageview置顶摆放

    在练习android时,想在Linearlayout内放一图片,使其图片置顶,预期效果是这样的: 但xml代码imageview写成这样后, <ImageView android:layout_ ...

  5. [置顶] think in java interview-高级开发人员面试宝典(八)

    面经出了7套,收到许多读者的Email,有许多人说了,这些基础知识是不是为了后面进一步的”通向架构师的道路“做准备的? 对的,你们没有猜错,就是这样的,我一直在酝酿后面的”通向架构师的道路“如何开章. ...

  6. [置顶] JAVA从零单排4-----继承、封装和多态详解

    继承 Java三大特征之一:继承.Java的继承具有单继承的特点,每个子类只能有一个直接父类. 继承的特点 Java的继承用extends关键字来实现,被继承的类成为父类,实现继承的类被称为子类.子类 ...

  7. Android自定义ScrollView实现一键置顶功能

    效果图如下: (ps:动态图有太大了,上传不了,就给大家口述一下要实现的功能吧) 要实现的功能:当ScrollView向上滑动超过一定距离后,就渐变的出现一个置顶的按钮,当滑动距离小于我们指定的距离时 ...

  8. Android的SwipeToDismiss第三方开源框架模拟QQ对话列表侧滑删除,置顶,将头像图片圆形化处理。

      <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(github ...

  9. QQ好友列表向左滑动出现置顶、删除--第三方开源--SwipeMenuListView

    SwipeMenuListView是在github上的第三方开源项目,该项目在github上的链接地址是:https://github.com/baoyongzhang/SwipeMenuListVi ...

随机推荐

  1. python学习day10

    目录 Twisted Redis RabbitMQ   Twisted   事件驱动 事件驱动分为两个部分:第一,注册事件:第二,触发事件. 自定义事件启动框架,命名为:"弑君者" ...

  2. 对话 UNIX: 关于 inode

    http://www.ibm.com/developerworks/cn/aix/library/au-speakingunix14/ WMI http://wiki.hudson-ci.org/di ...

  3. QTDesigner的QVBoxLayout自动随窗口拉伸

    在MainWindow的构造函数中添加如下代码://设置Uiui.setupUi(this); //使Ui可自适应父窗口大小QVBoxLayout* mainLayout = new QVBoxLay ...

  4. index seek与index scan

    原文地址:http://blog.csdn.net/pumaadamsjack/article/details/6597357 低效Index Scan(索引扫描):就全扫描索引(包括根页,中间页和叶 ...

  5. HTML标签实现图片滚动显示

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. python之花瓣美女下载

    python之花瓣美女下载 作者:vpoet mail:vpoet_sir@163.com 注:代码随意copy 不用告诉我 主要功能:     1.搜索花瓣http://huaban.com/下的图 ...

  7. 24点游戏&&速算24点(dfs)

    24点游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  8. 使用View Model从表现层分离领域模型

    本文来自:http://www.cnblogs.com/shanyou/archive/2010/04/03/1703501.html Model-View-Controller(模型-视图-控制器, ...

  9. js判断的执行顺序

    js预编译是对每一个<script>标签片段进行的.预编译声明所有var变量(初始为undefined),解析定义式函数语句. 还有个关于 "window作用域下,a = 1和v ...

  10. JQuery(二)——简单动画效果

    上一篇博客总结了JQuery的一些基本知识,这篇博客重点从JQuery能够制造各种各样的网页效果方面来进行总结.总结一些常见的常用的基本效果的必备方法.从隐藏显示,淡入淡出,滑动,动画等几个方面来简单 ...