「java工程师」常见面试题及其答案请见:

「java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客

目录

java基础

常用的 jvm 调优方法?

OOM的常见场景及其原因、解决方法?

netty

什么是netty?

netty的优点?

netty的使用场景?

netty的原理?


java基础

常用的 jvm 调优方法?

1. 利用命令、工具查问题,优化代码

一般我们是「遇到问题」之后才进行调优,用各种的「工具」进行排查。

  • 使用 ps -ef|grep java 查看java进程id
  • jstat -gc 进程id //查看年轻代、老年代等区域的内存使用情况、垃圾回收次数/消耗时间
  • jmap生成堆转储快照dump文件,再使用MAT( Memory Analyzer tool 内存解析工具)分析

2. 调整参数,以减少GC的频率、减少Full GC次数

  • 调整堆大小:-Xmx:设置堆的最大值、-Xms:设置堆的初始值
  • 调整年轻代、老年代内存占比:-Xmn:年轻代的大小

3. 无法继续优化,就扩容

OOM的常见场景及其原因、解决方法?

1. 堆溢出:java.lang.OutOfMemoryError: Java heap space

原因:

  • 存在大对象
  • 存在内存泄漏,导致多次GC后,还是无法找到足够大的内存容纳对象

2. 方法区溢出

  • 永久代溢出:java.lang.OutOfMemoryError:PermGen space
  • 元空间溢出:java.lang.OutOfMemoryError: Metaspace,JDK8后,元空间替换了永久代,元空间使用的是本地内存,溢出的概率变小

原因:

  • 运行期间生成了大量类,应用程序长时间运行没有重启,导致方法区被撑爆
  • 元空间内存设置过小

3. 线程溢出:Java.lang.OutOfMemeoryError:unable to create new native thread

原因:创建了大量的线程导致的

4. StackOverflowError

原因:递归调用导致堆栈空间用尽

解决方法:

1、查代码:大对象,内存泄漏

2、利用工具分析内存泄漏:通过jmap命令把堆内存dump下来,使用MAT分析

3、加堆内存、加机器

netty

什么是netty?

  • netty是1个java网络通信框架,性能很好,基于事件驱动、异步的思想
  • 我们熟知的Dubbo、Rocketmq、Hadoop等都使用它作为底层的通信组件。

netty的优点?

  • API使用简单,学习成本低。
  • 性能高,对比其他主流的NIO框架,Netty的性能最优。
  • Dubbo、Elasticsearch都采用了Netty,可用性得到验证。

netty的使用场景?

分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少。Netty作为高性能的网络通信框架,往往作为基础的通信组件被这些RPC框架使用。比如:阿里分布式服务框架Dubbo的RPC框架使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信。

netty的原理?

1. 基于NIO实现IO多路复用,利用一个线程可以并发处理多个io请求

NIO原理:

  • 服务器为每个客户端分配单独的Channel和Buffer,数据通过通道 Channel 传输的,往Channel中读写数据需要先经过缓冲区Buffer。
  • 将每个客户端对应的Channel的IO事件注册到多路复用器 Selector上,Selector通过轮询,就可以找到有IO活动的channel并进行处理,实现一个线程可以非阻塞地处理多个客户端的IO请求。
  • 这种IO处理模式也称为Reactor模式

netty参考了主从Reactors多线程模型:

  • MainReactor负责客户端的连接请求,并将请求转交给SubReactor
  • SubReactor负责相应通道的IO读写请求
  • 非IO请求(具体逻辑处理)的任务则会直接写入队列,等待worker threads进行处理

netty的架构:

  • netty架构主要包含了两个事件循环组:BossGroup 和 WorkerGroup。
  • BoosGroup 用于专门创建连接,其中有多个事件循环线程,每个事件循环都监听对应通道的建立连接请求并进行处理。
  • WorkGroup 中也有多个事件循环线程,负责对应通道的IO事件。一个线程可以负责多个通道的IO,实现了IO多路复用。

2. 使用零拷贝技术减少数据在内存中的拷贝次数

磁盘中的数据发送到网络的过程:

  1. 磁盘数据先拷贝到内核缓冲区
  2. 再拷贝到应用程序内存
  3. 再拷贝到Socket缓冲区
  4. 最后再发向网络

数据在内存中拷贝了两次,一次是内核缓冲区到用户程序内存,另一次是应用程序内存到Socket缓冲区。零拷贝技术,可以将内核缓冲区、应用程序内存、Socket缓冲区建立了地址映射,无需拷贝,大幅提升IO性能。

「高级java工程师」常见面试题及其答案(持续更新)相关推荐

  1. 「java工程师」常见面试题及其答案(持续更新)

    「高级java工程师」常见面试题及其答案: 「高级java工程师」常见面试题及其答案(持续更新)_好人老李的博客-CSDN博客 目录 java基础 面向对象与面向过程的区别? JRE.JDK.JVM的 ...

  2. while循环中指针会自动释放吗_C++】C++常见面试题汇总_持续更新中...

    1:指针(*).引用(&).解引用(*).取地址(&).的概念和区别 概念: 指针指向一块内存,指针保存的是内存的地址:引用是变量的别名,本质是引用该变量的地址. 解引用是取指针指向的 ...

  3. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  4. 总结Java常见面试题和答案

    转载自  总结Java常见面试题和答案 int和Integer有什么区别?   答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装 ...

  5. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习 面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  6. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  7. java中级程序员面试题_中级Java程序员常见面试题汇总

    下面是一些中级Java程序员常见面试题汇总,你可以用它来好好准备面试. 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  8. java线程池面试题有哪些?java线程池常见面试题

    进行java面试的过程中,java线程池是必问的面试题目,因为这是java的重点知识,也是在java工作中经常会遇到的,那java线程池面试题有哪些?下面来我们就来给大家讲解一下java线程池常见面试 ...

  9. java常见面试题及答案 1-10

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

最新文章

  1. limma包分析差异表达基因
  2. ChipScope Pro核生成器
  3. c语言printf相关函数 格式化字符串攻击 简介
  4. 不同操作系统之间的网络配置
  5. 把佳佳的博客搬出去了
  6. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
  7. 总结python处理图片等比例压缩与质量处理的方法
  8. 一文详解微服务架构的数据设计
  9. [转载] ANTLR——嵌入文法的Actions
  10. ios 内联函数 inline ---分解LFLiveKit
  11. 设置和开通freebsd远程登录
  12. C# 获取打开的EXCEL中某列的行数
  13. 【软考系统架构设计师】2020年下系统架构师综合知识历年真题
  14. 腾讯翻译君API使用笔记
  15. 中国高分辨率国家土壤信息格网基本属性数据集
  16. 《Android开发艺术探索》超详细笔记【转载】
  17. 计算机考研人工智能选什么方向,我想报人工智能方向的研究生,应该选取什么专业?...
  18. 架构师是否需要深入代码?
  19. python - 例题分析:工时与工资
  20. WXpython下载很慢安装包教程,直接安装不上,只好把所有包下载下来

热门文章

  1. 树莓派部署BT下载机
  2. 怎么把四个图片合成一个图片?
  3. 微信小程序注册入口及流程(完整版教程)
  4. 图像处理函数详解——imadjust
  5. 《东周列国志》第四十八回 刺先克五将乱晋 召士会寿余绐秦
  6. 数据库(一)——数据库的基本使用
  7. html列表太多转为下滑菜单,利用CSS过渡属性Transition制作缓缓弹出的纯CSS下拉菜单...
  8. mysqljs基本操作快速上手
  9. Mysql 与ES(Elastic Search)对比
  10. 使用码上登录实现微信扫码登录