前言:
本笔记仅做学习与复习使用,不存在刻意抄袭。
------------------------------------------------------------------------------------------------------------
给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!
如果你也是狂神的小迷弟,可以加我好友一起探讨学习。
目录
JVM探究
浅谈jvm面试题
- 请你谈谈你对JVM的理解? java8虚拟机和之前的变化更新?
- 什么是00M,什么是栈溢出StackOverFlowError?怎么分析?
- JVM的常用调优参数有哪些?
- 内存快照如何抓取,怎么分析Dump文件?知道吗?
- 谈谈JVM中,类加载器你的认识?
JVM的位置
JVM的体系结构
类加载器
package com.example.demo1.demo;
/**
* @author liar
*/
public class Car {
public int age;
public static void main(String[] args) {
//类是模板,对象是具体的
Car car1 = new Car();
Car car2 = new Car();
Car car3 = new Car();
System.out.println(car1.hashCode());
System.out.println(car2.hashCode());
System.out.println(car3.hashCode());
Class<? extends Car> aclass1 = car1.getClass();
ClassLoader classLoader = aclass1.getClassLoader();
System.out.println(classLoader); //AppCLassLoader
System.out.println(classLoader.getParent());//ExtCLassLoader
System.out.println(classLoader.getParent().getParent());//null 1.不存在2.java程序获取不到
}
}
其运行结果
双亲委派机制
双亲委派机制即:当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。简单点说,就是遇事先找爹,爹也干不了,就找爷,发现爷已经是最大辈分的了,而且爷也处理不了,那么你就自己处理吧。
我们这里来测试一下双亲委派机制:
发现编译报错。
沙箱安全机制(了解)
Java安全模型的核心就是Java沙箱(sandbox) ,什么是沙箱?沙箱是-一个限制程序运行的环境。沙箱机制就是将Java代码限定在虚拟机JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么? CPU、内存文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样。
所有的ava程序运行都可以指定沙箱,可以定制安全策略。
在Java中将执行程序分成本地代码和远程代码两种,本地代码默认视为可信任的,而远程代码则被看作是不受信的。对于授信的本地代码,可以访问- -切本地资源。而对于非授信的远程代码在早期的Java实现中,安全依赖于沙箱(Sandbox)机制。如下图所示JDK1.0安全模型
但如此严格的安全机制也给程序的功能扩展带来障碍,比如当用户希望远程代码访问本地系统的文件时候,就无法实现。因此在后续的Java1.1版本中,针对安全机制做了改进&#x