JAVA安全模型
初期:在Java中将执行程序分为本地和远程两种,本地代码默认视为可信任的,而远程代码则被看作是不受信的。受信任代码可以访问本地一切资源,非受信任的远程代码则依赖于沙箱机制,将Java代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统的资源访问。
发展之后:采用沙箱虽然能有效限制代码,但不利于程序拓展,例如一个游戏需要添加拓展功能,采用沙箱制就不利于后续功能的添加,只能重写。因此后续逐步添加了策略(允许用户指定代码对本地资源的访问权限)、类加载器(所有代码都按照用户策略设定,由类加载器加载到虚拟机中权限不同的运行空间)的概念。
最后添加了 域(虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责与关键资源进行交互,而各个应用域部分则通过系统与的部分代理来对各种需要的资源进行访问,存在于不同域中的类文件只有了当前域的全部权限)的概念,最终形成了如今的java安全模型
类加载机制
Java代码的运行机制可以看成,由java代码经过编译得到 装有字节码的class文件(也就是类文件),再经过类加载机制进行加载、链接和初始化,最后由JVM(java虚拟机)进行内存分配和解释执行(或者是JIT即时编译)。而类加载器ClassLoader的主要作用就是Java类文件的加载。
注意:.java文件与.class文件的关系。.java通过javac编译得到.class文件,相反javap命令则将.class文件反汇编成该class文件对应的类。