JVM相关问题

JVM相关问题

  • 一、Java继承时父子类的初始化顺序是怎样的?
  • 二、JVM类加载的双亲委派模型?
  • 三、JDK为什么要设计双亲委派模型,有什么好处?
  • 四、可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?
  • 五、什么是内存溢出?什么是内存泄漏?
    • 内存溢出(OOM):OutOfMemory
    • 内存泄露:Memory Leak
  • 六、线上项目JVM都怎么设置的?
  • 七、线上Java项目服务器内存飙升怎么排查处理?
  • 八、线上Java项目服务器CPU飙到100%怎么排查?
  • 九、JVM发生OOM后,其他线程是否可以继续工作?
  • 十、高并发系统的JVM如何优化?
    • 1、内存预估
    • 2、内存分配
    • 3、内存占用动态推算
    • 4、如何调优?

一、Java继承时父子类的初始化顺序是怎样的?

  1. 父类–静态变量
  2. 父类–静态初始化块
  3. 子类–静态变量
  4. 子类–静态初始化块
  5. 父类–变量
  6. 父类–初始化块
  7. 父类–构造器
  8. 子类–变量
  9. 子类–初始化块
  10. 子类–构造器

二、JVM类加载的双亲委派模型?

在这里插入图片描述

三、JDK为什么要设计双亲委派模型,有什么好处?

1、确保安全,避免Java核心类库被修改;

2、避免重复加载;

3、保证类的唯一性;

如果你写一个java.lang.String的类去运行,发现会抛出如下异常;
在这里插入图片描述

四、可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?

答案:可以

想要打破这种模型,那么就自定义一个类加载器,重写其中的loadClass方法,使其不进行双亲委派即可;

五、什么是内存溢出?什么是内存泄漏?

内存溢出(OOM):OutOfMemory

指程序在申请内存时,没有足够的内存空间供其使用,抛出OutOfMemory错误;

比如申请了一个8MB空间,但是当前内存可用空间只有5MB,那么就是内存溢出;
在这里插入图片描述
即:OutOfMemoryError,是指没有空闲内存,垃圾收集器回收后也不能提供更多的内存空间;

内存泄露:Memory Leak

指程序运行后,没有释放所占用的内存空间,一次内存泄漏可能不会有很大的影响,但长时间的内存泄漏,堆积到一定程度就会产生内存溢出;
在这里插入图片描述
(1)单例对象,生命周期和应用程序一样长,如果单例对象持有对外部对象的引用的话,那么这个外部对象是不能被回收的,则会产生内存泄露;

(2)一些资源未关闭也会导致内存泄漏,比如数据库连接,网络连接socket和IO流的连接都必须在 finally 中 close,否则不能被回收的;

六、线上项目JVM都怎么设置的?

假设线上:4核8G机器;

JVM:栈、堆、元空间;

1、: 1m(默认大小),-Xss512k,一个线程是1m,一个线上项目 Tomcat 可能有300个线程,300m;

2、:大概把机器的一半内存给堆,4G(新生代、老年代);

  • CMS:1/3 、2/3
  • G1: 6:4

3、元空间: 一般512M肯定够了;

此时JVM参数如下:-Xms4096M -Xmx4096M -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -XX:+UseG1GC

七、线上Java项目服务器内存飙升怎么排查处理?

在Linux系统中使用命令:

#(查看系统Java相关的进程)
jps 

在Linux系统中使用命令:

# 查看进程内存占用情况
top

可使用快捷键排序:shift + m

在Linux系统中使用命令:

# 查看内存信息
jmap -histo pid
  • jmap 是Java虚拟机(JVM)自带的一个命令行工具,用于生成Java进程的内存映像文件(heap dump),它通过与Java进程通信获取内存信息,并将信息输出到文件中,以便后续离线分析。
  • -histo 查看堆内存中的对象实例数目、内存占用大小、类名等;

在Linux系统中使用命令:

# 将内存信息转存文件
jmap -dump:format=b,file=heap.hprof pid

通过使用 MemoryAnalyzer(MAT)工具分析转存下来的文件。

八、线上Java项目服务器CPU飙到100%怎么排查?

# 查看进程内存占用情况
top# 打印线程栈信息,输出到fileName.txt文件中
jstack pid > fileName.txt# 查看pid进程中的线程内存占用情况
top -H -p pid# 把十进制线程ID转换为十六进制
printf '%x' tid

九、JVM发生OOM后,其他线程是否可以继续工作?

要分情况看,不一定;

  • 如果发生OOM,例如使用局部变量存放对象,方法执行后内存会释放,那么其他线程可以继续工作;
  • 如果发生OOM,例如使用全局变量存放对象,方法执行后内存不会释放,那么其他线程不可以继续工作;

使用 VisualVM 工具查看JVM堆内存变化情况

十、高并发系统的JVM如何优化?

如果每秒发生 583000 请求:

1、内存预估

  • 普通4核8G服务器,一台机器抗300-400并发下单请求比较合理;

  • 583000 / 300 = 1943台机器;

  • 一个订单预估1KB;

  • 一台机器,300KB * 20 * 10 = 60MB的内存开销,一秒后60MB对象就成为垃圾;

2、内存分配

  • 4核8G的机器,JVM给4G,剩下几个G会留给操作系统;
  • 堆3G(新生代1.5G,老年代1.5G)
  • 栈1MB,JVM里大概会有300-500个线程,大概300-500MB;
  • 元空间/永久代512MB;
    • -Xms3072M -Xmx3072M -Xmn1536M -Xss1M
    • -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M
    • -XX:+PrintGCDetails
    • -XX:+PrintGCDateStamps
    • -Xloggc:d:/gc.log
    • -XX:+HeapDumpOnOutOfMemoryError
    • -XX:HeapDumpPath=d:/heap.hprof

3、内存占用动态推算

  • 一台机器每秒抗300个订单,300KB * 20 * 10 = 60MB,每秒占据新生代60MB内存空间,新生代总共有1.5G的内存空间;
  • 1.5G * 1024MB / 60MB = 25秒 新生代Eden占满,触发Minor GC;
  • 一般情况下一次可以回收掉90%的新生代对象,存活对象 = 1.5G * 1024MB * 10% = 150MB;
  • 如果 “-XX:SurvivorRatio” 参数默认值为8,那么:新生代Eden=1.2GB、S0 = 150MB、S1 = 150MB;
    在这里插入图片描述

4、如何调优?

(1):

  • 1次Minor GC后,可能Survivor不足或者触发动态年龄判断,对象进入老年代,明显是 Survivor 空间不足;

  • 新生代调整为2G,老年代为1G,此时Eden:1.6G,每个Survivor:200MB;

  • 解决 Survivor 不足或者触发动态年龄判断,降低新生代对象进入老年代的概率;

  • 此时JVM参数:

    -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M
    

(2):

  • 一般系统里的@Service、@Controller之类的注解需要长期存活,这些对象一般也不会很多,可能几十兆,应该让它们尽快进入老年代;
  • 此时JVM参数:
    -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:MaxTenuringThreshold=5
    

(3):

  • 一般情况下,大对象可能需要长期存活和使用,让它直接进入老年代;(根据项目实际情况来确定)

  • 此时JVM参数如下:

    -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:MaxTenuringThreshold=5 -XX:PretenureSizeThreshold=1M
    

(4):

  • 指定合适的垃圾回收器;
  • 此时JVM参数 :
    -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:MaxTenuringThreshold=5 -XX:PretenureSizeThreshold=1M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
    
  • 小堆内存不使用G1垃圾收集器;

(5):

  • 大概每隔几分钟Minor GC之后有大概200MB左右对象进入老年代,推算可能差不多1小时后,才会有接近1GB的对象进入老年代,触发Full GC,然后高峰期一过,可能需要几个小时才会一次Full GC;
-Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:-UseCompressedClassPointers -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=5 -XX:PretenureSizeThreshold=1M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:d:/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/heap.hprof

(6): 优化思路

  • 1、尽可能让对象在新生代里分配和回收,避免对象频繁进入老年代导致老年代频繁垃圾回收;
  • 2、给系统充足的内存空间,避免新生代频繁的垃圾回收;
  • 3、指定合适的垃圾收集器;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268268.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day03:Web架构OSS存储负载均衡CDN加速反向代理WAF防护

目录 WAF CDN OSS 反向代理 负载均衡 思维导图 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令:文件上传下载/端口服务/Shell反弹等 抓包技术&#xff1a…

随机生成验证码

随机生成验证码 需求:随机生成一个任意位的验证码包含数字、大写字母和小写字母 1.代码实现 package com.ham;import java.util.Random;public class case2 {public static void main(String[] args) {System.out.println(code(4));}public static String code(i…

Jvm之内存泄漏

1 内存溢出 1.1 概念 java.lang.OutOfMemoryError,是指程序在申请内存时,没有足够的内存空间供其使用,出现OutOfMemoryError。产生该错误的原因主要包括:JVM内存过小。程序不严密,产生了过多的垃圾。 程序体现: 内…

Java二叉树(1)

🐵本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前,先了解一下什么是树:树是一种非线性结构,其由许多节点和子节点组成,整体形状如一颗倒挂的树,比如下图&#xff1…

1. vue3-环境准备

1、安装node.js 如果开发环境上面没有安装node.js,需要到node.js官方网站下载node.js。下载安装后,可以通过npm --version查看nodejs版本 2. 开发工具 开发工具建议使用vscode

C#,数值计算,求解微分方程的吉尔(Gear)四阶方法与源代码

1 微分方程 微分方程,是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。 微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛,可以解决许多与导数…

Linux 学习笔记(8)

八、 启动引导 1 、 Linux 的启动流程 1) BIOS 自检 2) 启动 GRUB/LILO 3) 运行 Linux kernel 并检测硬件 4) 挂载根文件系统 5) 运行 Linux 系统的第一个进程 init( 其 PID 永远为 1 ,是所有其它进程的父进程 ) 6) init 读取系统引导配置文件…

分布式基础 --- Leader election

分布式基础 --- Leader election 为什么需要leader electionRing electionBully Algorithm 为什么需要leader election 在一组集群中, 需要选出一个leader来承担一些特别的任务, 比如 协调和控制系统操作:领导者负责协调和控制整个分布式系统的操作。它可以接收和处…

46、WEB攻防——通用漏洞PHP反序列化原生类漏洞绕过公私有属性

文章目录 几种常用的魔术方法1、__destruct()2、__tostring()3、__call()4、__get()5、__set()6、__sleep()7、__wakeup()8、__isset()9、__unset()9、__invoke() 三种变量属性极客2019 PHPphp原生类 几种常用的魔术方法 1、__destruct() 当删除一个对象或对象操作终止时被调…

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起,形成一个高性能计算的集群系统。通过集群组网技术,可以实现多个GPU设备之间的协同计算,提供更大规模的计算能力,适用于需要大规模并行计算的应用场景。 常用的组网技术&…

码垛工作站:食品生产企业的转型助推器

在当今高度自动化的工业生产中,码垛工作站的应用正逐渐成为一种趋势。某食品生产企业在面临市场竞争加剧、人工成本上升等多重压力下,决定引入码垛工作站,以期实现生产流程的升级与变革。 一、码垛工作站引入背景 该企业主要从事休闲食品的…

iMazing3安全吗?好不好用?值不值得下载

一、安全性 iMazing在设计和开发过程中,始终把用户数据的安全性放在首位。它采用了多种先进的安全技术来确保用户数据在传输、备份和存储过程中的安全。 iMazing3Mac-最新绿色安装包下载如下: https://wm.makeding.com/iclk/?zoneid49816 iMazing3Wi…

mysql 常用命令练习

管理表格从表中查询数据从多个表查询修改数据sql变量类型 管理表格 创建一个包含三列的新表 CREATE TABLE products (id INT,name VARCHAR(255) NOT NULL,price INT DEFAULT 0,PRIMARY KEY(id) // 自增 ); 从数据库中删除表 DROP TABLE product; 向表中添加新列 ALTER TAB…

【Python】成功解决TypeError: list indices must be integers or slices, not float

【Python】成功解决TypeError: list indices must be integers or slices, not float 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题(列表遍历)第十四题(len)第十七题(len、insert)第二十一题(append)第三十题(二维列表) 第十一题(列表遍历) 题目&a…

c++之旅——第三弹

大家好啊,这里是c之旅第三弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一.命名空间;…

React-router的创建和第一个组件

需要先学react框架 首先:找到一个文件夹,在文件夹出打开cmd窗口,输入如下图的口令 npx create-react-app demo 然后等待安装 安装完成 接下来进入创建的demo实例 cd demo 然后可以用如下方式打开vscode code . 注意:不要忽略点号与…

vue2+elementui上传照片(el-upload 超简单)

文章目录 element上传附件(el-upload 超详细)代码展示html代码data中methods中接口写法 总结 element上传附件(el-upload 超详细) 这个功能其实比较常见的功能,后台管理系统基本上都有,这就离不开element的…

多层感知机 + 代码实现 - 动手学深度学习v2 | 李沐动手学深度学习课程笔记

感知机 感知机≈二分类问题 感知机和其他问题的对比 训练感知机 如果小于等于零,说明预测错啦 ,其实就是同号为正,异号为负 举个分类的例子 增加样本,改变分类线 继续分类 感知机的收敛定理 XOR问题 XOR问题其实就是第1、3象限数…

Java 语法糖,提高代码效率神器!

引言:语法糖经常是大厂面试官常问的一个知识点,关于 Java 的语法糖很多人可能只是知道其中的某几个,但却对整体的结构不了解,本文将详细介绍 Java 语法糖的知识。 题目 什么是 Java 语法糖? 推荐解析 什么是语法糖…