JVM探究(一)谈谈双亲委派机制和沙箱安全机制
JVM探究
请你谈谈你对JVM的理解?java8虚拟机和之前的变化gengxin?
什么是OOM,什么是栈溢出StackOverFlowError
JVM的常用调优参数有哪些?
内存快转如何抓取,怎么分析Dump文件?知道吗?
谈谈你对JVM中类加载器的认识?
1.JVM的位置

2.JVM的体系结构

栈里面肯定不会有垃圾,用完就弹出来了。
堆里面会有垃圾
JVM调优99%都是调方法区和堆
3.类的加载器
- 作用:加载class文件~ new Student();

package com.qingkuang.reflection;
public class TestCar {
public int age;
public static void main(String[] args) {
TestCar car1 = new TestCar();
TestCar car2 = new TestCar();
TestCar car3 = new TestCar();
car1.age=1;
car2.age=2;
car3.age=3;
System.out.println(car1.hashCode());
System.out.println(car2.hashCode());
System.out.println(car3.hashCode());
Class<? extends TestCar> aClass1 = car1.getClass();
Class<? extends TestCar> aClass2 = car2.getClass();
Class<? extends TestCar> aClass3 = car3.getClass();
System.out.println(aClass1.hashCode());
System.out.println(aClass2.hashCode());
System.out.println(aClass3.hashCode());
}
}

(1).虚拟机自带的加载器
(2).启动类(根)加载器
(3.)扩展类加载器
(4.)应用程序加载器
(5)百度双亲委派机制
4.双亲委派机制

双亲委派机制:安全
1.APP--->EXC--->BOOT(最终执行)
BOOT没有-->EXC没有-->APP

修改文件路径

- 类加载器收到类加载请求 Application
- 讲个这请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器。
- 启动加载器检查是否能够加载当前这个类,能加在就结束,使用当前的加载器,否则,抛出异常,通知自家在其进行加载
- 重复步骤3
- Class Not Found
null:java调用不到~c、c++
Java = C++--;去掉繁琐的东西,指针,内存管理
5.沙箱安全机制
Java安全模式的核心就是Java沙箱(sandbox),什么是沙箱,沙箱是一个限制程序运行的环境。沙箱机制就是将Java代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统支援访问,通过这样的措施,来保证堆代码的有效隔离,防止堆本地系统造成破坏。沙箱主要限制系统资源访问,那么系统支援包括什么?CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问也可以不一样。
所有的Java程序运行都可以指定沙箱,可以定制安全策略
在java中将执行程序分成本地代码和远程代码两种,本地代码默认为可信任的,而远程代码则是被看作是不受信任的。堆与手心的本地代码,可以访问一切本地资源。而非堆非授信的远程代码在早期的Java实现中,安全依赖于沙箱(sandbox)机制。如下图所示的JDK1.0安全模型。

但如此严格的安全机制也给程序的功能扩展带来障碍,比如当用户希望远程代码访问本地系统文件的时候,就无法实现,因此在后续的Java1.1版本中,针对安全机制做了改进,增加了安全策略,允许用户指定的代码对本地资源的访问权限。如下图所示JDK1.1安全模型。

在Java1.2版本中,再次改进了安全机制,增加了代码签名,不论本地代码或是远程代码,都会按照用户的安全策略设定,由类加载器到虚拟机中权限不同的运行空间。来实现差异化的代码执行权限控制,如下图所示。JDK1.2安全模型。

当前最新的安全机制实现,则引入了域(Domain)的还念。虚拟机会把所有代码加载到不同的系统域和应用域,系统域部分专门负责域关键资源机型交互,而各个应用域部分则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机中不同的受保护域(Protected Domain),对应不一样的权限(Permission)。存在于不同于域中的类文件就具有了当前域的全部权限,如下图所示,最新的安全模型(jdk1.6)

组成沙箱的基本组件:
- 字节码校验器(bytecode verifier):确保Java类文件遵循Java语言规范。这样可以帮助Java程序实现内存保护。但并不是所有的类文件都会经过字节校验,比如核心类。
- 类装载器(class loader):其中类装载器在3个方面对Java沙箱起作用
- 它防止恶意代码去干涉善意的代码;//双亲委派机制
- 他守护了被信任的类库边界;
- 他守护了被信任的类库边界;
- 他将代码归入保护域,确定了代码可以进行那些操作。
虚拟机为不同的类加载器载入的类提供了不同的命名空间,命名空间由一系列唯一的名称组成,每一个被装载的类将有一个名字,这个命名空间是由Java虚拟机为每一个类装载器维护的,他们相互之间甚至不可见。
类加载器采用的机制是双亲委派机制
- 从最内层JVM自带类加载器开始加载,外层而已同名类的不到加载congress无法使用;
- 由于严格通过包来区分了访问域,外层而已的类通过内置代码也无法获得权限到内层类,破坏代码就自然无法生效。
- 存取控制器(access controller):存取控制器可以控制核心API对操作系统的存取权限,二这个控制的策略设定,可以由用户指定。
- 安全管理器(security manager):是核心API和操作系统之间的主要接口。实现权限控制,比存取控制器优先级高
- 安全软件包(security package):java.security下的类和扩展包下的类,允许用户为自己的应用增加新的安全特性,包括
- 安全提供者
- 消息摘要
- 数字签名 keytools https
- 加密
- 鉴别
JVM探究(一)谈谈双亲委派机制和沙箱安全机制的更多相关文章
- 深入探究JVM之类加载与双亲委派机制
@ 目录 前言 类的生命周期 加载 验证 准备 解析 初始化 案例一 案例二 案例三 案例四 类加载器 类加载器和双亲委派模型 破坏双亲委派模型 第一次 SPI Tomcat OSGI 总结 前言 前 ...
- JVM学习六:JVM之类加载器之双亲委派机制
前面我们知道类加载有系统自带的3种加载器,也有自定义的加载器,那么这些加载器之间的关系是什么,已经在加载类的时候,谁去加载呢?这节,我们将进行讲解. 一.双亲委派机制 JVM的ClassLoader采 ...
- jvm类加载器以及双亲委派
首先来了解几个概念: 类加载: 概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验--转换解析--初始化,最终形成能被java虚拟机直接使用的java类型,就是jvm的类加载机制. ...
- 实例分析JVM安全体系:双亲委派、命名空间、保护域、策略
在了解双亲委派模型之前,先了解一下类加载器的概念: 类加载器的作用就是将真实的class文件根据位置将该Java类的字节码装入内存,并生成对应的Class对象.用户可以通过继承ClassLoader和 ...
- 【JVM】浅谈双亲委派和破坏双亲委派
一.前言 笔者曾经阅读过周志明的<深入理解Java虚拟机>这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践才能加深理解,正应 ...
- JVM类加载过程与双亲委派模型
类加载过程 类加载过程为JVM将类描述数据从.class文件中加载到内存,并对数据进行解析和初始化,最终形成被JVM直接使用的Java类型.包含: 加载:获取该类的二进制字节流,将字节流代表的静态存储 ...
- [jvm] -- 类加载器及双亲委派模板篇
类加载器 JVM 中内置了三个重要的 ClassLoader BootstrapClassLoader(启动类加载器):最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib目录下的j ...
- JVM——类加载器的双亲委派模型
类加载器双亲委派模型,如下图所示: 双亲委派模型的工作过程 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此 ...
- jvm类加载器和双亲委派模型
类加载器按照层次,从顶层到底层,分为以下三种: (1)启动类加载器(Bootstrap ClassLoader) 这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootcla ...
随机推荐
- 攻防世界 pwn welpwn
感觉好久没有水博客了,今天借助这道题来告诉自己做pwn题要多调试!!! 先检查了保护只开启了堆栈不可执行,接下来ida看一下伪代码: 这里可以往buf进行写入,接下来看一下echo函数: 大概意思就是 ...
- 静态日志框架Extensioner.Logging
静态日志框架,输出文本文件,基于log4net扩展,轻量,方便,无侵入! 使用方法 执行Install-Package Extensioner.Logging -Version 2.0.0导入Nuge ...
- 『学了就忘』Linux系统管理 — 86、查看系统资源相关命令
目录 1.vmstat命令 2.dmesg命令 3.free命令 4.查看CPU信息 5.查看本机登陆用户信息 (1)w命令 (2)who命令 6.uptime命令 7.查看系统与内核相关信息 1.v ...
- CF1076B Divisor Subtraction 题解
Content 给定一个数 \(n\),执行如下操作: 如果 \(n=0\) 结束操作. 找到 \(n\) 的最小质因子 \(d\). \(n\leftarrow n-d\) 并跳到操作 \(1\). ...
- 分布式文件系统fastdfs安装以及python调用
fastfds的安装和使用 一.所需依赖 操作系统:centos7.x(注意的是centos使用yum安装相关依赖) fastdfs:V6.06.tar.gz libfastcommon:V1.0.4 ...
- java 编程基础 Class对象 反射:动态代理 和AOP:java.lang.reflect.Proxy:(Proxy.newProxyInstance(newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h))
为什么我们使用动态代理 静态代理会让类变多了,多了代理类,工作量变大了,且不易扩展.比如我们上节课的例子,要实现不同的扩展方法就要编写不同的代理类,非常麻烦. Proxy类的使用规则 Proxy提 ...
- JAVA实现智能分词(通过文章标题生成tag标签)
导入jar包 IKAnalyzer2012_u6.jar下载链接:https://pan.xunlew.com/s86789 maven <dependency> <groupId& ...
- UDP&串口调试助手用法(1)
一览 UDP 串口 常用 功能概述 概览 支持UDP通信协议: 广播.单播.组播 支持串口通信 配置了常用的配置,常用的进制转化: 2进制,8进制,10进制,和16进制之间的转换 配置了 计算器,加减 ...
- Android NDK开发篇:Java与原生代码通信(异常处理)
一.捕获异常 异常处理是Java中的功能,在Android中使用SDK进行开发的时候经常要用到.Android原生代码在执行过程中如果遇到错误,需要检测,并抛出异常给Java层.执行原生代码出现了问题 ...
- c++11之字符串格式化
1.关于 我知道的,C++20中引入了相当方便的字符串格式化,有兴趣的朋友,可以看下fmt库,截至目前,它实现了c++20中引入的字符串格式化绝大部分功能. 2.format 既然c++11中没有方便 ...