Java最全面试题库思维导图
JavaSE系列面试题汇总(共18篇)
JavaWeb系列面试题汇总(共10篇)
JavaEE系列面试题汇总(共13篇)
数据库系列面试题汇总(共6篇)
中间件系列面试题汇总(共3篇)
数据结构与算法面试题汇总(共11篇)
分布式面试题汇总(共10篇)
综合面试题系列汇总(共23篇)
Synchronized同步方法的八种使用场景
线上服务平均响应时间太长,怎么排查?
innodb下的记录锁,间隙锁,next-key锁
MySQL主从复制的几种方式
数据库实现缓存最终一致性的一些方法
SimpleDateFormat的线程安全问题与解决方案
单点登录的三种实现方式
SOA架构和微服务架构的区别
说说MySQL分区
线程池中多余的线程是如何回收的?
利用装饰者模式在不改变原有对象的基础上扩展功能
MySQL/InnoDB的加锁过程
反射是如何影响性能的,它到底慢在哪里?
分布式事务问题的几种方案
在项目中,如何应对高并发流量
HashMap面试二十一问!
方法重载和方法重写的原理
Spring是怎么解决循环依赖的?
JavaIO:字节流、字符流、缓冲流
网关gateway:限流10万QPS、跨域、过滤器、令牌桶算法
String长度有限制吗?是多少?
大数据量下的分页查询优化
如何设计一个Feed流系统
GET和POST请求的本质区别是什么?
如何处理重复请求/并发请求?
手写阻塞队列
如何设计一个秒杀系统
SQL编程思想:一切皆有关系
如何拆分复杂系统
如何设计统一API接口?
Elasticsearch查询数据的工作原理是什么?
MySQL主从复制的几种复制方式
为什么B+树更适合作为索引的结构以及索引原理
分布式锁,进程锁,线程锁的区别是什么?
线上系统高并发如何优化?
MyBatis如何查询千万级数据?
ZooKeeper的原理是什么?
分布式锁,进程锁,线程锁的区别是什么?
MySQL中的redolog,undolog,以及binlog的区别及各自作用是什么?
Java是如何实现线程间通信的?
API接口应该如何设计?如何保证安全?如何签名?如何防重?
一:前言最近给一个非Java方向的朋友讲了下双亲委派模型,朋友让我写篇文章深度研究下JVM的ClassLoader,我确实也好久没写JVM相关的文章了,有点手痒痒,涂了皮炎平也抑制不住。
我在向朋友解释的时候是这么说的:双亲委派模型中,ClassLoader在加载类的时候,会先交由它的父ClassLoader加载,只有当父ClassLoader加载失败的情况下,才会尝试自己去加载。这样可以实现部分类的复用,又可以实现部分类的隔离,因为不同ClassLoader加载的类是互相隔离的。
不过贸然的向别人解释双亲委派模型是不妥的,如果在不了解JVM的类加载机制的情况下,又如何能很好的理解“不同ClassLoader加载的类是互相隔离的”这句话呢?所以为了理解双亲委派,最好的方式,就是先了解下ClassLoader的加载流程。
二:Java类是如何被加载的2.1:何时加载类我们首先要清楚的是,Java类何时会被加载?
《深入理解Java虚拟机》给出的答案是:
遇到new、getstatic、putstatic等指令时。
对类进行反射调用的时候。
初始化某个类的子类的时候。
虚拟机启动时会先加载设置的程序主类。
使用JDK1.7的动态语言支持的时候。
其实要我说,最通俗易懂的答案就是:当运行过程中需要这个类的时候。
那么我们不妨就从如何加载类开始说起。
2.2:怎么加载类利用ClassLoader加载类很简单,直接调用ClassLoder的loadClass()方法即可,我相信大家都会,但是还是要举个栗子:
publicclassTest{publicstaticvoidmain(String[]args)throwsClassNotFoundException{Test.class.getClassLoader().loadClass("