JVM

JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java程序都要在JRE下才能运行。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。
JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

[img]http://dl2.iteye.com/upload/attachment/0101/4579/aa0ed90e-970e-3f34-85f3-9309757d4efc.png[/img]


1、一个类从硬盘上的一个class如何才能被JVM正常执行,在执行之前需要经过以下几个过程

[img]http://dl2.iteye.com/upload/attachment/0101/4522/af98c682-e0d5-3c74-a4cc-2d21c9df3a00.jpg[/img]
加载:class文件从硬盘迁移到内存的过程

[img]http://dl2.iteye.com/upload/attachment/0101/4525/993ee438-9906-3117-bc26-111a4bc83393.jpg[/img]
这些接口都是反射的接口

连接:
-验证:正常情况下由javac编译的文件肯定没有问题,但是如果是自己手动或恶意去创建的class文件,如果不符合规范,则编译通不过。
-准备:为类的“静态变量”分配内存,并初始化。静态变量属于类,不属于任何一个对象,在内存中只有一份数据,这里的初始化是初始化为该变量类型的默认值,
例如private static Integer i = 1; 这时候i的值为0。
-解析:

[img]http://dl2.iteye.com/upload/attachment/0101/4531/18cc8dcb-0d4d-390b-bce2-689fa83eb268.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0101/4527/411ac60c-cddd-3472-b8b3-e71c4378d2ee.jpg[/img]
因为在编译完成之后,class和class都是存在于硬盘的没有关联的文件,但是类和类之间基本都存在调用关系;只有加载到内存之后,各个类之间才会形成一个关系网有机的整合在一起。

初始化:这时候i的值才真正为1。

所有的jvm实现必须在每个类或接口被java程序“首次主动使用”他们的时候才会初始化他们
主动使用:new一个类、调用类或接口的静态变量、调用类的静态方法、反射调用、初始化一个类的子类、虚拟机启动时被标明为启动类的类java test;

======================判断类有没有被初始化的一个小例子=================
class FinalTest1 {
public static final int x = 6 / 3;

static{
System.out.println("初始化");
}
}

public class Test1 {

public static void main(String[] args) {
System.out.println(FinalTest1.x);
}

}

打印
2

import java.util.Random;

class FinalTest2 {
public static final int x = new Random().nextInt(100);

static{
System.out.println("初始化");
}
}

public class Test2 {

public static void main(String[] args) {
System.out.println(FinalTest2.x);
}

}

打印
初始化
33
为什么呢?
原因是第一个类的x在编译的时候就能被计算出来,它是一个编译时常量,而第二个则是运行时常量。。。。。
其实看一个类有没有被初始化,从这里的静态代码块可以看出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值