双亲委派机制 与 沙箱机制

双亲委派机制【从一定程度上防止了危险代码的植入。】

类加载器:

作用:加载Class文件 ~

 

  • 虚拟器自带的加载器

  • 启动类加载器

  • 扩展类加载器

  • 应用程序加载器

/*

双亲委派机制:

  1. 类加载器收到类加载的请求

  2. 将这个请求向上委托给父类加载器区完成,一直向上委托,直到启动类加载器

  3. 启动加载检查是否能够加载这个类,能加载就,就结束使用当前的加载器,否则抛出异常通知子类进行加载

  4. 重复步骤  3

.


沙箱机制

 

从上图中我们就更容易理解了,当一个Hello.class这样的文件要被加载时。不考虑我们自定义类加载器,首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载过,如果没有再往上。注意这个类似递归的过程,直到到达Bootstrap classLoader之前,都是在检查是否加载过,并不会选择自己去加载。直到BootstrapClassLoader,已经没有父加载器了,这时候开始考虑自己是否能加载了,如果自己无法加载,会下沉到子加载器去加载,一直到最底层,如果没有任何加载器能加载,就会抛出ClassNotFoundException。那么有人就有下面这种疑问了?

为什么要设计这种机制

这种设计有个好处是,如果有人想替换系统级别的类:String.java。篡改它的实现,在这种机制下这些系统的类已经被Bootstrap classLoader加载过了(为什么?因为当一个类需要加载的时候,最先去尝试加载的就是BootstrapClassLoader),所以其他类加载器并没有机会再去加载,从一定程度上防止了危险代码的植入。

沙箱机制 【主要限制系统资源的fang'we】

1.为什么需要沙箱机制?

默认情况下,一个应用程序是可以访问机器上的所有资源的,比如CPU、内存、文件系统、网络等等。

但是这是不安全的,如果随意操作资源,有可能破坏其他应用程序正在使用的资源,或者造成数据泄漏。为了解决这个问

题,一般有下面两种解决方案:

(1) 为程序分配一个限定权限的账号:利用操作系统的权限管理机制进行限制

(2) 为程序提供一个受限的运行环境:这就是沙箱机制

2.什么是沙箱机制?/

如上所述,沙箱就是一个限制应用程序对系统资源的访问的运行环境。

沙箱很多情况下都是实现在虚拟机(VM)中,比如Java的虚拟机JVM、Javascript的虚拟机V8引擎、Android中的虚拟机Dalvik/ART,以及以太坊的虚拟机EVM等等。具体的实现方式各有不同.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值