Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。**沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,**通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。
所有的Java程序运行都可以指定沙箱,可以定制安全策略。
Java沙箱由以下部分组成:
- 类加载器结构(例如命名空间)
- class文件校验器
- 内置于Java虚拟机(和Java语言)的安全特性(例如对指针操作的屏蔽等)
- Java安全管理器(Java Security Manager)和Java API组成
前三个基本都是内置实现在JVM和Java语言中的,只有Java安全管理器(Java Security Manager)是能被开发者控制的,用来保护系统不被JVM中恶意的代码破坏的。这样,绕过java沙箱其实就转化成绕过java security manager。
Java Security Manager的一个典型应用场景是jvm需要加载运行一段代码,但是这段代码是不可信的,例如来自用户的输入、上传、反序列化指定的bytecode或者来自网络远程加载,这种情况下,需要防止不可信来源的恶意代码对系统造成破坏。其实这就是沙箱的应用场景。
https://www.anquanke.com/post/id/151398#h2-1
负责解释命令,提交操作系统执行
栈管运行,堆管存储
java 方法 == 栈帧
Exception in thread "main" java.lang.StackOverflowError
由于方法的加载,深度的调用撑爆栈导致**,是一个错误**
java 8 为元空间。 物理上为两部分:新生+养老
java堆一般占物理内存的1/4