java相关面试题以及答案集合(二)

一、什么是双亲委派模式?有什么作用?

当某个类加载器需要加载某个.class文件的时候,它首先会把这个任务委托给他的上级类加载器,去递归这个操作,如果说上级的类加载器没有去加载,自己才会去加载这个类的

1.BootstrapClassLoader(启动类加载器):c++中编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于呢引导类加载器涉及到了虚拟机本地实现的一些细节,开发者是无法直接获取到启动类加载器的引用的,所以就也是不允许直接通过引用进行操作的。

2.ExtClassLoader(标准扩展类加载器):java编写的,加载扩展库,例如classpath中的jre ,javax.*或者java.ext.dir指定位置中的类,开发者是可以直接使用标准扩展类加载器的。

3.AppClassLoader(系统类加载器):java编写的,加载程序所在的目录,如user.dir所在的位置的class。

4.CustomClassLoader(用户自定义类加载器):java编写的,用户自定义的类加载器,可加载指定路径的class文件。

作用:可以去防止重复加载同一个.class。通过委托去向上级问一问,如果加载过了,就不用再加载一遍了。保证了数据的安全性。保证核心的.class不能被篡改掉。我们通过委托的方式,就不会去篡改核心.class了,即使是篡改也不会去加载了哦,然后即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也将不是同一个Class对象了。这样就保证了Class执行的安全。

二、什么是内存溢出, 内存泄露? 他们的区别是什么?

1.内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;

2.内存泄露 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。就是指你向系统申请分配内存进行使用(new) ,可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序

区别:一个是内存不足,一个是用完不还,所以系统再不会给你分配

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值