当前位置: 首页 > article >正文

JVM整理部分面试题

1.如何主动触发垃圾回收?

在Java中,垃圾回收是自动进行的,由Java虚拟机(JVM)负责管理。但是,有时候我们可能希望手动触发垃圾回收以释放一些无用的对象。这可以通过调用System.gc()方法来实现

手动触发垃圾回收并不意味着垃圾会立即被清除。它只是一个请求,告诉垃圾回收器可以执行回收操作。具体的回收时机仍然由垃圾回收器决定。

我们还可以通过将引用设置为null来间接触发垃圾回收。当一个对象没有被任何引用指向时,Java虚拟机会将其标记为可回收的,并在下一次垃圾回收时进行清理。

我们可以通过调用Runtime.getRuntime().gc()方法来触发垃圾回收。这与使用System.gc()方法是等效的,只是方法调用的方式不同而已

2.如何减少FullGc频率?JVM调优如何实现?

1.避免内存泄漏及时清理垃圾。可以手动触发垃圾回收(见上方)

2.尽量避免大对象的频繁创建,可以 优化代码;

调优工作:

1.使用合适的垃圾回收器和垃圾回收算法;

2.调整青年带中的区域比例或者调整青年带和老年代的比例:(-XX:survivorRatio -XX:newRatio)

3.方法区/永久代和元空间的关系

方法区是在虚拟机规范里面被定义的,不同的虚拟机对这个定义的实现不同,在HotSpot 虚拟机中在 jdk1.7 版本之前的方法区实现叫永久代(PermGen space),jdk1.8 之后叫做元空间(Metaspace)。

元空间和永久代最大的区别是元空间并不在虚拟机中,而是使用本地内存。

4.方法区的OOM如何避免,怎么去解决?

原因:

大量的类被加载;

大量的动态生成类;

字符串常量池满;

解决方案:

1.调整方法区的大小 通过-XX:permSize/-XX:metaPspacesize --XX:maxpermsize/-XX:maxmetaspaceSize;

2.注意动态生成类的使用场景;

3.限制字符串常量池的使用,避免大量字符串常量的创建,


http://www.kler.cn/a/428023.html

相关文章:

  • https数字签名手动验签
  • 使用openwrt搭建ipsec隧道
  • 【数据结构】二叉树
  • 2025 春节联欢晚会魔术揭秘
  • Rust:Rhai脚本编程示例
  • (一)QT的简介与环境配置WIN11
  • EasyNVR中HTTP-FLV协议无法播放怎么解决?
  • 浅谈Scala语言
  • 周记-2024年第48、第49周11.25-12.08:养儿方知父母恩
  • karmada-descheduler
  • 微服务-sentinel服务保护
  • [论文解读]Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting
  • 【开发工具】gitlab进阶-CI/CD开发
  • Ensemble Learning via Knowledge Transfer for CTR Prediction 论文阅读
  • GA-Kmeans-Transformer-BiLSTM时序聚类+状态识别组合模型
  • 【机器学习】任务十二:循环神经网络
  • 服务器守护进程化
  • 【Java计算机毕业设计】Springboot+vue校园外卖配送服务管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
  • KGDB使用
  • C/C++基础知识复习(39)
  • C++:std::fstream详细介绍
  • 数据结构 ——链式队列
  • Wordpress ElementorPageBuilder插件存在文件读取漏洞(CVE-2024-9935)
  • gdb逆向调试功能太强了~
  • pycharm报错
  • centos7.9编译升级openssl和openssh的记录