JVM
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
DavidBigHero
谁说编程无趣,我偏视编程如生命,在其中活出人生精彩!
展开
-
JVM(十三) 类的卸载
同一个命名空间内的类是相互可见的。子加载器的命名空间包含所有父加载器的命名空间。因此由子加载器加载的类能看见父加载器原创 2017-05-13 10:33:22 · 2465 阅读 · 13 评论 -
JVM(十二) 创建用户自定义的类加载器
要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字,返回对应的Class对象的引用。我们来看看官网api文档的findClass方法。http://docs.oracle.com/javase/7/docs/api/findClassprot原创 2017-05-12 17:52:55 · 1377 阅读 · 6 评论 -
JVM(一) 一个小程序吸引了我
在学习JVM类的加载、连接与初始化时,遇到了这样一个小程序,感觉很有意思,大家不妨跟着我一块来感受一下。程序MyTest.javaclass Singleton{ private static Singleton singleton = new Singleton(); //第一种:放在这儿运行结果是counter1=1,counter2=0 public sta原创 2017-05-04 17:13:00 · 815 阅读 · 6 评论 -
JVM(二) java虚拟机与程序的生命周期
期待吧原创 2017-05-08 10:38:37 · 666 阅读 · 10 评论 -
JVM(三) 类的加载、连接与初始化
1、加载:查找并加载类的二进制数据2、连接:*验证:确保被记载的类的正确性*准备:为类的静态变量分配内存,并将其初始化为默认值*解析:把类中的符号引用转换为直接引用分析一下:public class Test{ private static int a = 3;}3、初始化:为类的静态变量赋予正确的初始值大家误以为3是直接赋值给a的,其实不然;原创 2017-05-08 10:55:12 · 634 阅读 · 7 评论 -
JVM(四) 类的加载
What?类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。class对象只能被java虚拟机创建,从封装的源码中就可以看出: /* * Constructor. Only原创 2017-05-08 15:09:52 · 735 阅读 · 6 评论 -
JVM(五) 类的连接
what类被加载后,就进入连接阶段。连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去。连接:*验证:确保被记载的类的正确性*准备:为类的静态变量分配内存,并将其初始化为默认值*解析:把类中的符号引用转换为直接引用类的验证内容1、类文件的结构检查确保类文件遵从Java类文件的固定格式2、语义检查确保类本身符合Java语言的语原创 2017-05-08 15:52:50 · 671 阅读 · 6 评论 -
JVM(六) 类的初始化
HOW途径在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值。在程序中,静态变量的初始化有两种途径:(1)在静态变量的声明处进行初始化;(2)在静态代码块中进行初始化。例如在以下代码中,静态变量a和b都被显示初始化,而静态变量c没有被显示初始化,它将保持默认值0。public class Sample{ private static int a =1;原创 2017-05-08 17:48:20 · 547 阅读 · 6 评论 -
JVM(七) JVM知识点
放图一张,基本涵盖了JVM的知识点。如果后面有精力和时间会对JVM再作详细介绍。原创 2017-05-08 17:55:38 · 674 阅读 · 6 评论 -
JVM(八) 类加载器
前面博客中简单提到类加载器,并有demo展示。在这里详细介绍一下。http://blog.csdn.net/qwlzxx/article/details/71404166类加载器用来把类加载到Java虚拟机中。类加载器之间的关系: Java虚拟机自带的类加载器根(Bootstrap)类加载器:该加载器没有父加载器。它负责加载虚拟机的核心类原创 2017-05-09 10:06:44 · 552 阅读 · 6 评论 -
JVM(九) 类加载的父亲委托机制
父子关系从JDK1.2版本开始,类的加载过程采用父亲委托机制,这种机制能更好地保证Java平台的安全。在此委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器外, 其余的类加载器都有且只有一个父加载器。比如:Class sampleClass = loader2.loadClass("Sample");根据上图进行分析:loader2首先从自己的命名空间原创 2017-05-09 11:16:37 · 727 阅读 · 7 评论 -
JVM(十) 命名空间
每个类加载器都有自己的命名空间。和我们Java中的Package的概念是一样的,和XML中的namespace的概念类似。命名空间由该加载器及所有父加载器所加载的类组成。比如说loader1上面有父加载器,父加载器和所加载的所有的类在一个命名空间里面。在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类;在不同的命名空间中,有可能会出现类的完整名字(包括类的包名原创 2017-05-09 11:34:37 · 1103 阅读 · 8 评论 -
JVM(十一) 运行时包
由同一类加载器加载的属于相同包的类组成了运行时包。决定两个类是不是属于同一个运行时包,不仅要看它们的包名是否相同,还要看定义类加载器是否相同。只有属于同一运行时包的类才能互相访问包可见(即默认访问级别)的类和类成员。这样的限制能避免用户自定义的类冒充核心类库的类,去访问核心类库的包可见成员。假设用户自己定义了一个类java.lang,Spy,并由用户自定义的类加载器加载,由于java.原创 2017-05-09 12:42:44 · 1191 阅读 · 7 评论