[发明专利]一种类文件装载方法和系统有效
申请号: | 200710163895.0 | 申请日: | 2007-10-11 |
公开(公告)号: | CN101126988A | 公开(公告)日: | 2008-02-20 |
发明(设计)人: | 游兴旺 | 申请(专利权)人: | 金蝶软件(中国)有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 北京集佳知识产权代理有限公司 | 代理人: | 逯长明 |
地址: | 518057广东省深圳市南*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 种类 文件 装载 方法 系统 | ||
技术领域
本发明涉及类装载领域,特别是涉及一种类文件的装载方法和系统。
背景技术
基于java的大型企业软件,如基于java的ERP(企业资源计划,EnterpriseResource Planning)软件可能存在成百上千个jar文件,并且需要装载的组件可能来自第三方系统,在启动与运行这样的软件系统时,为了提高启动与运行时系统的效率、获得良好的性能,需要JVM(Java Virtual Machine,java虚拟机)快速查找定位与装载相关的类(class)文件和资源文件。
Java虚拟机(JVM)的类装载就是将包含在类文件中的字节码装载到JVM中,但是类装载器(classloader)也不是原封不动的装载到JVM,它是将类(class)文件中的内容转换成JVM使用的类字节码,通过类装载器装载到JVM中的字节码数据,从而成为可执行的代码。
类装载是java语言提供的最强大的机制之一,一个类代表要执行的代码,而数据则表示其相关状态。状态时常改变,而代码则不会。当我们将一个特定的状态与一个类相对应起来,也就意味着将一个类事例化。尽管相同的类对应的实例其状态千差万别,但其本质都对应着同一段代码。一旦一个类被载入Java虚拟机中,同一个类就不会被再次载入了。java的类装载机制是在同一个JVM中,按类路径的层次和顺序装载类文件。
假定有一个大型的Java应用,它需要从c:/app/path1;d:/path2;d:/app/path3三个目录下装载java运行的组件,其中path1下有A1.jar,A2.jar,A3.jar......An.jar;path2目录下有B1.jar,B2.jar,B3.jar......Bn.jar;path3目录下存在C1.jar,C2.jar,C3.jar......Cn.jar,其启动类为com.app.MainClass,存放在C3.jar的com/app目录下。现有技术中Java标准的启动方式为:java-cpc:/app/path1/A1.jar;......;C:/app/path1/An.jar;d:/path2/B1.jar;......d:/path2/Bn.jar;d:/app/path3/C1.jar;......;d:/app/path3/Cn.jar com.app.MainClass。其中java为java程序启动命令,-cp后面是java应用所需要的所有java组件列表,即java类路径,com.app.MainClass就是java应用启动类。
执行所述命令时,首先启动java虚拟机,完成相关初始化工作后,虚拟机开始装载应用需要的第一个类文件com.app.MainClass,由于标准的java虚拟机并不知道这个类文件在哪个jar文件中,所以虚拟机必须根据-cp后面的类路径逐个打开jar文件,顺序查找该jar文件中是否包含com.app.MainClass。
由于jar文件比较多,而且每个jar文件包含了大量的class文件。按上面的方式装载class文件,会存在系统在启动与运行时造成效率低下、性能差的问题;进一步,由于所有操作系统启动程序的命令行都有大小限制,如window默认为8000个字符,并且需要装载的文件多,从而导致类路径过长,超出操作系统限制;而且java虚拟机为了提高系统启动时的效率,避免反复打开/关闭文件,会缓存每个jar文件句柄,这样就可能导致程序运行时打开的文件句柄过多,而操作系统对每个程序进程打开的文件句柄数一般是有限制的,因此大量的文件句柄会也会导致系统存在效率低下、性能差的问题,并且还会导致运行时出现异常。
发明内容
本发明所要解决的技术问题是提供一种类文件的装载方法,能够在装载类文件时不按照java默认顺序查找、装载类文件,解决java默认顺序查找导致的性能问题,提高系统启动、运行时类文件的装载效率。
为了解决上述问题,本发明公开了一种类文件装载方法,包括步骤:
自定义一个类装载器替换java虚拟机默认的系统类装载器;
根据自定义的类装载器规则,生成java应用所需jar文件的索引文件;
Java虚拟机启动所述自定义的类装载器,初始化自定义类装载器;
自定义类装载器装载类文件。
其中,所述自定义类装载器装载类文件的具体步骤为:
自定义类装载器请求上一级的应用类装载器装载类文件,如果所述应用类装载器装载不成功,则:
自定义类的类装载器根据所述索引文件装载类文件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于金蝶软件(中国)有限公司,未经金蝶软件(中国)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710163895.0/2.html,转载请声明来源钻瓜专利网。