Java面试题总结(二)

本文总结了Java面试中的常见问题,包括类加载器(AppClassloader、ExtClassloader、BootstrapClassloader)、类加载机制(双亲委派)、JVM内存分布模型、堆栈区别、线程创建方式、线程间数据共享、Volatile关键字的作用、线程池创建、HashMap与ConcurrentHashMap等集合类的区别,以及数据库相关知识,如MySQL搜索引擎的优缺点、数据库优化方法等。
摘要由CSDN通过智能技术生成

1.java的类加载器有哪些

类加载器工作图

AppClassloader

应用类加载器,又称系统类加载器。它负责在 JVM 启动时,加载来自在命令 java 中的-classpath 或者 java.class.path 系统属性或者 CLASSPATH 操作系统属性所指定的 JAR 类包和类路径。

ExtClassloader

扩展类加载器,主要负责加载 Java 的扩展类库,默认加载 JAVA_HOME/jre/lib/ext/ 目录下的所有 Jar 包或者由 java.ext.dirs 系统属性指定的 Jar 包。

BootstrapClassloader

引导类加载器,又称启动类加载器,是最顶层的类加载器,主要用来加载 Java 核心类,如 rt.jar、resources.jar、charsets.jar 等。 custom class loader 自定义类加载器,除了系统提供的类加载器,开发人员可以继承java.lang..ClassLoader 来满足一些特殊的需求. Ps:AppClassloader是ExtClassloader的子类,而bootstrapClassloader是用c++来写的类加载器

2.java的类加载机制,说一下双亲委派

JVM在加载类时默认采用的是双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

3.jvm的内存分布模型

  • (1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。
  • (2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。
  • (3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

java语言到机器语言的转换图

Jvm内存结构图

4.堆和栈的区别,堆和栈是线程共享的吗?

java的内存分为两个类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法的时候,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束的时候,分配给这个方法的栈会释放,这个栈的变量也将随之释放. 堆是与栈作用不用的内存,一般用于存放不放在当前方法栈中的数据,例如,使用new创建的对象都放在堆中,所以,他不会随方法的消失而消失,方法中的局部变量使用final修饰,放在堆中,而不是栈中. 栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值