Java面试精华:对象创建、数据结构及JVM深入解析
需积分: 0 174 浏览量
更新于2024-08-04
收藏 10KB MD 举报
---
**1. Java对象的创建过程**
在Java中,对象的创建涉及以下几个步骤:
- **类加载检查**:遇到`new`指令时,首先检查类是否已被加载、解析并初始化。若未完成,会触发类加载过程。
- **内存分配**:类加载通过后,虚拟机为对象分配内存,可能使用指针碰撞或空闲列表,取决于Java堆内存状态。线程安全由CAS(Compare and Swap)配合失败重试机制或TLAB(Thread Local Allocation Buffer)技术实现。
- **初始化零值**:分配的内存区域被初始化为零值,除了对象头。
**2. LinkedHashMap和PriorityQueue的区别**
- **LinkedHashMap** 是一个有序的哈希映射,它维护了一个访问顺序,键值对按照插入顺序或访问顺序排列。主要用途在于需要保持元素插入顺序的场景。
- **PriorityQueue** 是基于优先队列实现的,存储的是具有自然顺序或者自定义比较器的对象。它按照优先级对元素进行排序,取出的总是具有最高优先级的元素。
**3. ThreadPoolExecutor饱和策略**
ThreadPoolExecutor的饱和策略主要有以下几种:
- **AbortPolicy**:当线程池饱和时,新任务会被拒绝并抛出RejectedExecutionException异常。
- **CallerRunsPolicy**:新任务直接在调用者线程中运行,直到线程池不再饱和。
- **DiscardOldestPolicy**:丢弃队列中最旧的任务(FIFO),然后尝试执行新的任务。
- **DiscardPolicy**:简单地丢弃新任务,不进行任何处理。
**4. 可达性分析**
可达性分析是JVM垃圾回收的一部分,用于确定对象是否还被其他对象引用,从而确定其是否可以被回收。它是确定弱引用、软引用和phantom reference是否存活的关键过程。
**5. 成员变量与局部变量的区别**
- **成员变量**:类的属性,生命周期贯穿整个对象实例,初始化在构造函数中完成,所有方法共享。
- **局部变量**:在方法内部定义,只在该方法执行期间存在,方法结束时自动销毁。
**6. HashMap长度的幂次方**
HashMap的长度通常是2的幂次方,这样设计可以提高哈希表的效率,减少哈希冲突的概率。负载因子(载荷系数)会影响扩容,当超过阈值时,会自动调整容量至原容量的两倍。
**7. 类加载器的认识**
JVM中的类加载器负责加载类和资源文件,它分为根加载器、扩展加载器、系统加载器和用户自定义加载器。每个类加载器都有自己的命名空间,避免类名冲突。
**8. 线程优先级的理解**
线程优先级表示了线程调度的相对优先级,但不是绝对的执行顺序。高优先级线程可能会被频繁调度,但低优先级线程在系统空闲时也有执行机会。Java提供了一种动态调整线程优先级的方法,但受系统资源限制。
**9. 构造器的重写**
构造器不能被重写(override),但可以通过覆盖(overriding)父类的构造器来提供不同的初始化行为,或者使用super()调用父类的构造器。
**10. 年轻代到年老代的晋升条件**
当对象在年轻代经历了多次Minor GC仍然存活,且年龄达到指定阈值,或者对象大小超过一定阈值(eden区和survivor区无法容纳),就会被晋升到老年代(Old Generation)。
2023-02-01 上传
2023-07-08 上传
2023-07-09 上传
2023-02-28 上传
2023-05-09 上传
2023-02-16 上传
2023-03-05 上传
2024-03-29 上传
2024-03-31 上传
shsh1234567890
- 粉丝: 4
- 资源: 37
最新资源
- Angular实现MarcHayek简历展示应用教程
- Crossbow Spot最新更新 - 获取Chrome扩展新闻
- 量子管道网络优化与Python实现
- Debian系统中APT缓存维护工具的使用方法与实践
- Python模块AccessControl的Windows64位安装文件介绍
- 掌握最新*** Fisher资讯,使用Google Chrome扩展
- Ember应用程序开发流程与环境配置指南
- EZPCOpenSDK_v5.1.2_build***版本更新详情
- Postcode-Finder:利用JavaScript和Google Geocode API实现
- AWS商业交易监控器:航线行为分析与营销策略制定
- AccessControl-4.0b6压缩包详细使用教程
- Python编程实践与技巧汇总
- 使用Sikuli和Python打造颜色求解器项目
- .Net基础视频教程:掌握GDI绘图技术
- 深入理解数据结构与JavaScript实践项目
- 双子座在线裁判系统:提高编程竞赛效率