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 ...
随机推荐
- textarea控件好奇怪啊,用<s:if>标签居然不在一行回出现很多的空格,奇葩啊
textarea控件好奇怪啊,用<s:if>标签居然不在一行回出现很多的空格,奇葩啊
- tomcat Address already in use: JVM_Bind
运行多个tomcat时,出现tomcat Address already in use: JVM_Bind这个错误,可以按照如下方式解决: 修改F:\tomcat20111101\apache-tom ...
- thymeleaf标签在js中调用转义变量与不转义变量写法
转义写法 [[${content.title}]] 不转义写法 有时候我们可能需要在页面上显示html代码 这样的话 就不能把字符串转义了 这时候可以采用下面这种写法 [(${content.txt} ...
- JAVA实现office文档(word、excel、ppt等)、压缩包在线预览,支持禁止下载功能、支持PC和手机
我们使用的是永中的第三方服务.支持直接转换文档的线上地址,也可以直接把文档上传到官方服务器上 官方文档地址:https://www.yozodcs.com/page/help.html#link152 ...
- Miniconda入门教程
Miniconda 教程 介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.因为包含了大量的科学包,Anaconda 的下载文件 ...
- java源码——计算不同图形的周长和面积
计算任意三角形,正方形,正五边形,圆形的周长和面积. 利用类的继承实现. 将计算结果进行输出. 不多说,贴码. Contants.java 常量存储类 <pre name="code& ...
- 【LeetCode】862. Shortest Subarray with Sum at Least K 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 队列 日期 题目地址:https://leetcod ...
- 【LeetCode】674. Longest Continuous Increasing Subsequence 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 空间压缩DP 日期 题目地址:https: ...
- 【LeetCode】430. Flatten a Multilevel Doubly Linked List 解题报告(Python)
[LeetCode]430. Flatten a Multilevel Doubly Linked List 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: ...
- 【LeetCode】796. Rotate String 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...