本发明专利技术提供了一种Java操作系统中类装载的实现方法。类装载将包含在类文件中的字节码装载到Java操作系统中,通过初始化基本类、装载静态类、处理具体实例类的一个过程,使用一系列装载器,将Java类装载到Java操作系统中运行。本发明专利技术对嵌入式系统环境,尤其是面向嵌入式系统的Java操作系统,有重大意义。
【技术实现步骤摘要】
本专利技术涉及Java类装载和操作系统,尤其是涉及一种。
技术介绍
Java语言是由Sun公司推出的跨平台面向对象高级程序设计语言,目前正在各个领域取得越来越重要的地位,已经成为最重要的程序设计语言之一。Java语言的可执行代码是编译以后统一标准的Java字节码(Byte Code),只要在一个平台上有Java虚拟机,那么所有的Java可执行代码都可以在这个Java虚拟机支持之下运行,因而Java具有跨平台的优良特性。目前的Java虚拟机环境之下,没有多进程的概念。Java语言中定义的线程包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文。在现在操作系统中,多进程并发操作是十分普遍的,而要实现多个Java程序并发,则每一个Java程序的执行都需要一个单独的Java虚拟机来支持。这种方式在通常情况之下并没有太大问题,因为Java可执行代码由虚拟机解释执行,从宿主操作系统(即支持Java虚拟机运行的操作系统)的角度来说,就是一个以一个Java可执行代码作为输入的Java虚拟机进程。多进程的所有相关问题可以由操作系统的进程管理机制来处理。但是在某些特殊情况之下,比如没有宿主操作系统的环境之下,如果要支持多进程并发执行,则必须由虚拟机来负责进程管理的工作。
技术实现思路
本专利技术的目的在于提供一种Java操作系统中类装载器的实现方法。本专利技术解决其技术问题采用的技术方案如下 一种类装载将包含在类文件中的字节码装载到Java操作系统中,并使其成为Java操作系统中运行进程的一部分。这个类装载过程通过以下方法a、初始化基本类装载基本类型为int、boolean及基本类Object、Class、Void、Boolean、Integer,调用装载静态类方法装载,基本类型也当作类装载并加入到类池表项;b、装载静态类将要装载的类名作为该函数的一个参数传入,先通过调用查询类入口方法检查类是不是已经在类池区,如果已经在类池中,则直接返回;如果不在类池中,则分配一个新的类表项结构,并返回指向该处的指针,然后寻找类并装载;该方法在类路径指定的目录下或者Jar文件中查询类文件,从类库读取字节码,并将其赋值给对象,返回该对象,再将这个对象赋值给classEntry->class指针,然后调用类处理方法处理已装载的类;c、处理类由于其他线程可能也要处理同一个类,因此该方法是同步的,处理装载类之前,必须先处理该类的超类,如果该类没有超类,则抛出异常,第一步解决类的对象区、静态区和接口,完成装载过程;第二步验证类的格式;第三步验证字节码;一个Java应用程序使用两种类型的类装载器根装载器和用户定义的装载器,根装载器是Java虚拟机实现的一部分,如果一个Java虚拟机是在现在已经存在并且正在被使用的操作系统的顶部用C程序来实现的,那么根装载器将是那些C程序的一部分,根装载器以某种默认的方式将类装入,包括那些JavaAPI的类。在运行期间,一个Java程序能安装用户自己定义的类装载器,根装载器是虚拟机固有的一部分,而用户定义的类装载器则不是,它是用Java语言写的,被编译成class文件之后然后再被装入到虚拟机,并像其它的任何对象一样可以被实例化;Java操作系统中的类装载模型是一种代理模型,当Java操作系统要求类装载器装载一个类时,类装载器首先将这个类装载请求转发给他的父装载器,只有当父装载器没有装载并无法装载这个类时,类装载器才获得装载这个类的机会,这样所有类装载器的代理关系构成了一种树状的关系;树的根是类的根装载器,在Java操作系统中它以“null”表示,除根装载器以外的类装载器有且仅有一个父装载器,在创建一个装载器时,如果没有显式地给出父装载器,那么Java操作系统中将默认系统装载器为其父装载器; Java操作系统中具有●根装载器没有父装载器,是Java操作系统实现的一部分;●扩展装载器继承的父装载器为根装载器,不像根装载器可能与运行时的操作系统有关,用纯Java代码实现的;●系统装载器从CLASSPATH环境变量中装载代码的,用纯Java代码实现,同时还是用户自定义类装载器的缺省父装载器;●小应用程序装载器从用户指定的网络上的特定目录装载小应用程序代码。相比较别的类加载手段,本类装载器寻找一个类或是一个接口的二进制形式,并用该二进制形式来构造代表这个类或是这个接口的class对象。类或接口的名称可以是给定了的,也可以通过寻址得到,通过搜索源代码经过编译器编译后所得到的二进制形式来构造。本专利技术具有的有益效果是类装载器把一个类装入Java虚拟机中,经过三个装载、链接和初始化步骤来完成,方便的完成校验、准备和解析三步,能够快速加载,而且使用了很少的内存空间,特别适用于嵌入式系统中。尤其是面向嵌入式系统的Java操作系统,有重大意义。附图说明附图是Java类装载器的体系结构。具体实施方法类装载将包含在类文件中的字节码装载到Java操作系统中,并使其成为Java操作系统中运行进程的一部分。这个类装载过程通过以下方法a、初始化基本类装载基本类型如int、boolean等及基本类如Object、Class、Void、Boolean、Integer等,调用装载静态类方法装载(基本类型也当作类装载并加入到类池表项)。b、装载静态类将要装载的类名作为该函数的一个参数传入。先通过调用查询类入口方法检查类是不是已经在类池区。如果已经在类池中,则直接返回;如果不在类池中,则分配一个新的类表项结构,并返回指向该处的指针。然后,尝试寻找类并装载。该方法在类路径指定的目录下或者Jar文件中查询类文件,从类库读取字节码,并将其赋值给对象,返回该对象。再将这个对象赋值给classEntry->class指针,然后调用类处理方法处理已装载的类。c、处理类由于其他线程可能也要处理同一个类,因此该方法必须是同步的。处理装载类之前,必须先处理该类的超类。如果该类没有超类(如Object),则抛出异常。第一步解决类的对象区、静态区和接口,完成装载过程;第二步验证类的格式;第三步验证字节码。一个Java应用程序使用两种类型的类装载器根装载器(bootstrap)和用户定义的装载器(user-defined)。根装载器是Java操作系统实现的一部分,比如,如果一个Java操作系统是在现在已经存在并且正在被使用的操作系统的顶部用C程序来实现的,那么根装载器将是那些C程序的一部分。根装载器以某种默认的方式将类装入,包括那些Java API的类。在运行期间,一个Java程序能安装用户自己定义的类装载器。根装载器是虚拟机固有的一部分,而用户定义的类装载器则不是,它是用Java语言写的,被编译成cl本文档来自技高网...
【技术保护点】
一种Java操作系统中类装载的实现方法,其特征在于:类装载将包含在类文件中的字节码装载到Java操作系统中,并使其成为Java操作系统中运行进程的一部分;这个类装载过程通过以下方法:a、初始化基本类装载基本类型为int、bo olean及基本类Object、Class、Void、Boolean、Integer,调用装载静态类方法装载,基本类型也当作类装载并加入到类池表项;b、装载静态类将要装载的类名作为该函数的一个参数传入,先通过调用查询类入口方 法检查类是不是已经在类池区,如果已经在类池中,则直接返回;如果不在类池中,则分配一个新的类表项结构,并返回指向该处的指针,然后寻找类并装载;该方法在类路径指定的目录下或者Jar文件中查询类文件,从类库读取字节码,并将其赋值给对象,返 回该对象,再将这个对象赋值给classEntry->class指针,然后调用类处理方法处理已装载的类;c、处理类由于其他线程可能也要处理同一个类,因此该方法是同步的,处理装载类之前,必须先处理该类的超类,如果该类没有超类,则 抛出异常,第一步解决类的对象区、静态区和接口,完成装载过程;第二步验证类的格式;第三步验证字节码;一个Java应用程序使用两种类型的类装载器:根装载器和用户定义的装载器,根装载器是Java虚拟机实现的一部分,如果一个Java虚拟机是 在现在已经存在并且正在被使用的操作系统的顶部用C程序来实现的,那么根装载器将是那些C程序的一部分,根装载器以某种默认的方式将类装入,包括那些JavaAPI的类。在运行期间,一个Java程序能安装用户自己定义的类装载器,根装载器是虚拟机固 有的一部分,而用户定义的类装载器则不是,它是用Java语言写的,被编译成class文件之后然后再被装入到虚拟机,并像其它的任何对象一样可以被实例化;Java操作系统中的类装载模型是一种代理模型,当Java操作系统要求类装载器装载一个 类时,类装载器首先将这个类装载请求转发给他的父装载器,只有当父装载器没有装载并无法装载这个类时,类装载器才获得装载这个类的机会,这样所有类装载器的代理关系构成了一种树状的关系;树的根是类的根装载器,在Java操作系统中它以“null ”表示,除根装载器以外的类装载器有且仅有一个父装载器,在创建一个装载器时,如果没有显式地给出父装载器,那么Java操作系统中将...
【技术特征摘要】
1.一种Java操作系统中类装载的实现方法,其特征在于类装载将包含在类文件中的字节码装载到Java操作系统中,并使其成为Java操作系统中运行进程的一部分;这个类装载过程通过以下方法a、初始化基本类装载基本类型为int、boolean及基本类Object、Class、Void、Boolean、Integer,调用装载静态类方法装载,基本类型也当作类装载并加入到类池表项;b、装载静态类将要装载的类名作为该函数的一个参数传入,先通过调用查询类入口方法检查类是不是已经在类池区,如果已经在类池中,则直接返回;如果不在类池中,则分配一个新的类表项结构,并返回指向该处的指针,然后寻找类并装载;该方法在类路径指定的目录下或者Jar文件中查询类文件,从类库读取字节码,并将其赋值给对象,返回该对象,再将这个对象赋值给classEntry->class指针,然后调用类处理方法处理已装载的类;c、处理类由于其他线程可能也要处理同一个类,因此该方法是同步的,处理装载类之前,必须先处理该类的超类,如果该类没有超类,则抛出异常,第一步解决类的对象区、静态区和接口,完成装载过程;第二步验证类的格式;第三步验证字节码;一个Java应用程序使用两种类型的类装载器根装载器和用户定义的装载器,根装载器是Java虚拟机实现的一部分,如果一个Java虚拟机是在现在已经存在并且正在被使用的操作系统的顶...
【专利技术属性】
技术研发人员:陈天洲,戴鸿君,黄彧,
申请(专利权)人:浙江大学,
类型:发明
国别省市:86[中国|杭州]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。