`
chillwarmoon
  • 浏览: 155061 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

class loader的体系结构

    博客分类:
  • JVM
阅读更多

没有看过bill venners的《深入Java虚拟机》,但是看了他写的四部曲中的security and the class loader architecture,感觉受益颇深,建议大家有时间可以去看看原文,本文将对其中的class loader architecture的内容总结一下。

在介绍本文之前,先说一下什么是sandbox,翻译过来就是“沙箱”,在计算机安全中,sandbox指的是一个虚拟的容器,不被信任的程序可以在该容器中安全执行;在软件开发中,sandbox指的是一个在线的环境,该环境在不影响原来系统的前提下,能够测试代码和内容的变化。大家可以参考http://en.wikipedia.org上面关于sandbox的解释,不过该网站被gcd封掉了,可以用代理上。在看英文文章的时候,不明白的术语可以到上边查,挺不错的网站。

相对于sandbox的第一种解释,java的security model能够保护end-user使其不受到untrusted source的侵入。为了达到这个目的java程序提供了一个自定义的sandbox,而java程序运行在这个sandbox之内。java程序在sandbox之内可以做任何事情,但是不能在sandbox边界之外运行任何东西。

class loader体系结构

class loader体系结构在security sandbox中起到重要的作用。在一个虚拟机中可以存在多个的class loader,一个java应用可以用两种类型的class loader。一种是primordial class loader,另外一种是class loader object。primordial class loader是JVM实现的一部分。例如:一个JVM在OS之上利用C来实现,则该primordial class loader是C程序的一部分。primordial class loader用于装载trusted classes,包括Java API的class,通常是从本地硬盘中装载这些class。

JVM认为通过primordial class loader装载的类都是trusted class,而不管这些class是否是Java API的class;而对于从class loader object装载进来的类则需要判断是否安全,默认的是把由class loader object装载进来的class看作是untrusted class。class loader objects是用java编写的,被编译成class文件,然后被虚拟机所装载,最后像初始化其他object一样来进行初始化class loader object。可以利用class loader object在应用运行时刻装载class。

class loader object和primordial class loader的关系参见下图:

 

class loader和name-spaces

在JVM利用这两种class loader装载class的时候,如果被class loader装载的class A引用了其他的class B,则装载class A的class loader也会装载该class B。name-spaces就是一个被某个class loader所加载的类的名字的集合,对于每个class loader,JVM都维持一个与其对应的name-space,在同一个name-space下的类的名字是不能相同的。而可以建立多个class loader来加载同名的class,结果是一个JVM有多个class loader,而在每个class loader对应的name-spaces下有相同的class存在。如果程序不做出显示规定,那么在不同的name-space下的class是不能相互访问的。因此通过name-space可以在由不同的class loader加载的classes之间建立shield,因此说class loader在security sandbox中起到重要作用。

class loader之间的交互

通常情况下,一个class loader object要和其他的class loader交互,至少要和primordial class loader交互。例如:一个java应用利用class loader object加载网络上的class,实现起来可以通过先让该class loader object调用primordial class loader,在trusted classes库(通常是本地的Java API和本地classes)中查找是否存在该class,如果不存在,则会以自定义的方式来加载远程的class。然后在访问这个加载后的远程class时,该class可能存在对一个String类的引用,因此按照该class loader object加载该远程class的方式加载该String类,首先是调用primordial class loader,此时在本地的Java API中找到了该类,则在本地中加载该String类。可能在primordial class loader在加载String类之前,String类已经被加载进来了,则primordial class loader所做的就是返回以前加载的String类。

没想到写这东西这么花时间,在security and the class loader architecture中还介绍了建立security environment及其相关内容,本文将不再提到,大家有时间可以自己去看看,转述的总不如原文深刻。下面给出了一些相关链接:

java's security architecture
http://www.javaworld.com/javaworld/jw-08-1997/jw-08-hood.html

security and the class verifier
http://www.javaworld.com/javaworld/jw-10-1997/jw-10-hood.html

java security:how to install the security manager and customize your security policy
http://www.javaworld.com/javaworld/jw-11-1997/jw-11-hood.html

security and the class loader architecture
http://www.javaworld.com/javaworld/jw-09-1997/jw-09-hood.html

 

分享到:
评论
1 楼 kedou 2007-06-12  
受益不浅

相关推荐

    小菜鸟系列-JVM体系结构

    **小菜鸟系列-JVM体系结构** Java虚拟机(JVM)是Java平台的核心组成部分,它为Java程序提供了跨平台的运行环境。理解JVM的体系结构对于优化代码性能、排查故障以及深入理解Java编程至关重要。在本文中,我们将探讨...

    JVM体系结构与GC调优

    - **类装载器(Class Loader)**:负责加载.class文件到JVM内存中,分为Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。 - **运行时数据区(Runtime Data Areas)**: - **方法区(Method Area...

    JVM与Java体系结构.pdf

    在JVM与Java体系结构中,我们主要关注以下几个方面: 1. **JVM架构**:JVM分为多个组件,包括类加载器、运行时数据区、执行引擎、本地方法接口(JNI)和垃圾收集器(GC)。类加载器负责加载类文件,运行时数据区...

    JVM演讲PPT分享

    JVM体系结构是指虚拟机的内部构造,包括类加载器(Class Loader)、运行时数据区(Runtime Data Areas)、执行引擎(Execution Engine)、本地接口(Native Interface)和垃圾回收器(Garbage Collector)等组成部分...

    java中四个核心思想

    接下来,我们将详细探讨这四个核心思想:Java虚拟机、类装载器的体系结构、Java class文件以及Java API。 #### 1. Java虚拟机(JVM) Java虚拟机是Java平台的核心组成部分之一,它为Java程序提供了一个执行环境。JVM...

    JVM深入理解.xmind

    文件总结了JVM的体系结构:四大块,类装载子系统(class loader subsystem),执行引擎子系统(Executionengine子系统),垃圾回收系统(gc),运行时数据区(JVM内存)。

    java虚拟机的详细原理

    ### Java虚拟机的详细原理 #### 一、什么是Java虚拟机 Java虚拟机(Java Virtual Machine,简称JVM)是一种可以执行Java字节码(Bytecode)...了解JVM的基本概念、生命周期和体系结构对于Java开发人员来说至关重要。

    JVM虚拟机面试

    JVM能够跨计算机体系结构来执行Java字节码,主要是由于JVM屏蔽了与各个计算机平台相关的软件或者硬件之间的差异,使得与平台相关的耦合统一由JVM提供者来实现。 JVM的结构组成 JVM的结构基本上由四部分组成: * ...

    Java四大核心技术思想详解.doc

    Java类装载器体系结构设计灵活,支持不同类型的类装载器来适应不同的应用场景。主要分类包括: 1. **启动类装载器(Bootstrap Class Loader)**:它是JVM的一部分,负责加载Java核心库,如`rt.jar`。这些库通常位于...

    Java虚拟机和Java程序的生命周期?

    Java类的加载过程是由类加载器(Class Loader)完成的。类加载器负责将Java类加载到内存中,并对类进行验证、解析以及初始化等操作。 - **类加载器分类**: - **启动类加载器(Bootstrap ClassLoader)**:它是...

    javagui开发俄罗斯方块游戏.doc

    文章首先介绍了 JavaGUI 的发展背景和重要性,然后对 J2SE 平台的体系结构进行了详细介绍,包括其主要特点和优点。接着,以俄罗斯方块游戏为例,描述了借助 J2SE 的类库开发电脑小游戏的过程。 一、JavaGUI 开发...

    21个Java语言的技术点.pdf

    例如,理解Thread Dump、内存结构分析、Class Loader体系和类加载过程。 2. Java程序执行:理解javac编译器如何将源代码编译成.class文件,以及如何使用java命令在命令行中启动程序,包括涉及的路径如classpath、...

    Java的21个技术点和知识点归纳

    同时,了解如何进行JVM性能调优,例如通过Thread Dump分析内存结构,理解类加载过程和Class Loader体系,以及类的实例创建和方法执行过程。随着Java版本的更新,新特性的理解也是必要的,比如Java 8的Lambda表达式,...

    Java学习从入门到精通 学习路径指点

    Java语言以其简洁和高效著称,主要依赖于两大部分:JVM(Java虚拟机)的内存管理和Class Loader机制。理解这两点,能帮助我们解决大部分与对象和配置相关的问题。 1. JVM的内存管理: JVM内存管理主要包括堆内存、...

    如何从零开始学习Java开发.docx

    - **Class Loader体系**:了解类加载过程,包括bootstrap、extension和application类加载器。 2. **Java的运行基础**: - **javac编译器**:将源代码编译成字节码。 - **java命令使用**:在命令行环境中启动Java...

    Java虚拟机实现原理分析.pdf

    JVM的平台体系结构通常分为四个层次,包括应用程序层、接口层、运行时数据区(如堆和栈)、本地方法接口(Native Method Interface, JNI)和本地方法库(Native Method Libraries)层,以及位于最底层的机器硬件平台...

    ClassLoader in OSGI

    #### 二、ClassLoader体系结构 类装载器在JVM中并不唯一,JVM自带了三个主要的装载器,并且支持用户自定义新的装载器。这些装载器的组织结构通常呈树状,其中三个内置装载器分别为: 1. **Bootstrap ClassLoader...

    Java安全技术.pptx

    JDK 1.2的安全体系结构引入了Protection Domain和类加载器的概念,增强了安全性。 - Protection Domain:每个类都有一个Protection Domain,它包含了一组Code Source(代码来源)和对应的权限集合。这些权限是在...

Global site tag (gtag.js) - Google Analytics