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 ...
随机推荐
- 象群游牧算法-Matlab
1. 适应度函数: function z=chaffer(x)%chaffer函数x=(0...0) f(x)=0 x[-10,10]%%没测 n=10; s1=0; for i=1:n s1=s1+ ...
- python 字符编码讲解
ANSI不是一种具体的编码格式 ANSI在中文Windows操作系统代码指的是GBK编码 ANSI在中文Mac操作系统代码指的是UTF-8编码 ANSI在其他国家的操作系统中有其他的编码格式 #ASC ...
- docker安装artemis
Dockerfile # Licensed to the Apache Software Foundation (ASF) under one # or more contributor licens ...
- JAVA发送xml格式的接口请求
/** * * @param urlStr 接口地址 * @param xmlInfo xml格式参数数据 * @return */ public static String sendMsgXml(S ...
- JS验证身份证是否符合规则
调用isIdCardNo(num) 验证通过返回true 错误返回false function isIdCardNo(num) { var factorArr = new Array(7, 9, 1 ...
- 基于DNN的残余回声抑制
摘要 由于功率放大器或扬声器的限制,即使在回声路径完全线性的情况下,麦克风捕获的回声信号与远端信号也不是线性关系.线性回声消除器无法成功地消除回声的非线性分量.RES是在AES后对剩余回声进行抑制的一 ...
- lldb调试C++总结(2)
lldb help 可能你会忘记某些指令的用法, 使用help可以帮助你. (lldb) breakpoint --help invalid command 'breakpoint --help'. ...
- hdu 1430 (BFS 康托展开 或 map )
第一眼看到这题就直接BFS爆搜,第一发爆了内存,傻逼了忘标记了,然后就改,咋标记呢. 然后想到用map函数,就8!个不同的排列,换成字符串用map标记.然后又交一发果断超时,伤心,最恨超时,还不如来个 ...
- Windows下安装配置MySQL
Windows下安装配置MySQL的基本步骤 一.MySQL下载 MySQL官方下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads ...
- [opencv]调用鼠标事件执行grabcut算法实现阈值分割
#include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...