java面试汇总

JVM内存模型与Java线程内存模型的区别

JVM内存模型描述的是Java虚拟机在执行Java程序时如何管理和使用内存,主体围绕:方法区(Method Area)、堆(Heap)、程序计数器(Program Counter Register)、虚拟机栈(Java Virtual Machine Stacks)、本地方法栈(Native Method Stacks)进行活动。

Java线程内存模型(JMM,Java Memory Model),主体就是线程的内存管理,线程间共享变量的访问规则,以及在这些规则下如何保证内存的可见性、原子性和有序性。缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

JVM内存管理在虚拟机的使用,java线程内存在线程间资源合理利用。

如果某个表有近千万数据,CRUD比较慢,如何优化

1、表结构优化,字段数量的限制,及字段长度定义尽量小而满足需要。

2、建立索引、合理利用索引。

3、采用缓存,尽量减少访问数据库。

4、主从模式,写入主表,读取从表。

JVM的GC执行时机

GC 是垃圾回收器的简称,全称是Garbage Collection。

只有新的对象或者基本类型的数据,内存空间不足时,会触发GC的执行。其他情况都会根据程序计数器或者超生命周期才会触发GC的执行。

分代回收机制:新生代、老年代。新生代,绝大多数对象都是朝生夕死的,每次触发GC,这个区域里大部分对象都会被回收。对于熬过很多次依然存活的对象,这种对象一般很难被回收了,这样的情况下,每次GC都对他们进行搜索标记,太浪费资源。把它们放到老年代区,这样JVM就能以较少的频率来回收这个区域。

垃圾回收算法:Mark-Sweep(标记-清除)算法、标记 - 复制算法算法、Mark-Compact(标记-整理)算法。

CMS垃圾收集器的并发更新失败,怎么处理及优化

CMS垃圾收集器的并发更新失败通常是由于在垃圾收集的过程中,有用户线程仍在运行并尝试更新对象的引用关系,导致垃圾收集器无法正确地完成垃圾回收任务。这种情况下,CMS垃圾收集器会触发一次"并发模式失败"(Concurrent Mode Failure),进而触发一次Full GC来解决问题。

并发失败原因:

1、浮动垃圾。

2、内存碎片。

优化策略:

1、控制并发标记和清理阶段的CPU资源占用

2、调整GC触发时机

3、处理内存碎片

4、升级JDK

5、代码层面优化

高并发系统为何建议选择G1垃圾收集器

1、G1设计的特点为了满足高吞吐量、低延迟的并发应用。它可以充分利用多核CPU的优势,实现并行垃圾回收,从而提高了垃圾回收的效率。

2、可预测的停顿时间。
线上系统GC问题如何快速定位与分析

1、采集GC日志

2、监控与分析工具

3、分析GC日志

4、检查JVM参数配置

5、代码层面分析

相关推荐
怕浪猫2 分钟前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
daidaidaiyu1 小时前
ThingsBoard 集群的核心逻辑源码分析
java
2601_962885721 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen1 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
我可能是个假开发2 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong2 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
WL学习笔记3 小时前
日期类(C++)
开发语言·c++·日期类实现
【JAVA】玩家3 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog3 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
谢亮_vipxieliang4 小时前
Go map与结构体的正确使用
开发语言·golang·哈希算法