最全面试官:怎么做JDK8的内存调优?,Java开发笔试题总结

最后

针对以上面试题,小编已经把面试题+答案整理好了

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

面试专题

image

除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

image

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

-Xmx1024M

-Xmx1048576K

-Xmx1073741824

-Xms

指定堆所分配内存的初始值,不附加字母时,单位为byte,必须是1024的倍数,并且大于1MB;附加字母k或K时,表示单位为KB;附加字母m或M时,表示单位为MB;附加字母g或G时,表示单位为G。如果不设置这个初始值,那么初始值将被设置为老年代和年轻代分配内存的大小的总和。

下面的例子是使用不同的单位把堆所分配的初始值设置为4GB:

-Xms4G

-Xms4096M

-Xms4194304K

-Xms4294967296

对于生产环境的部署,-Xms和-Xmx通常设置为相同的值。

-Xmn

指定堆的年轻代分配内存的初始值和最大值,不附加字母时,单位为byte;附加字母k或K时,表示单位为KB;附加字母m或M时,表示单位为MB;附加字母g或G时,表示单位为G。

堆的年轻代区域用于存放新生对象。与其他区域相比,在这个区域执行垃圾回收的频率更高。如果年轻代的内存太小,那么将执行许多次垃圾回收。如果年轻代的内存太大,那么执行完整的垃圾回收可能需要很长时间才能完成。一般建议把年轻代的大小保持在整个堆大小的1/2到1/4之间。

下面的例子是使用不同的单位把年轻代所分配内存的初始值和最大值设置为2GB:

-Xmn2G

-Xmn2048M

-Xmn2097152K

-Xmn2147483648

除了使用-Xmn选项设置年轻代的初始值和最大值,还可以使用-XX:NewSize设置年轻代的初始值,使用-XX:MaxNewSize设置年轻代的最大值。

-XX:NewRatio

指定老年代和年轻代空间大小的比率。默认为2,即老年代和年轻代空间大小的比率为2:1,年轻代占整个堆内存空间大小的1/3。下面的例子是把老年代和年轻代空间大小的比率设置为1:

-XX:NewRatio=1

另外,年轻代分配内存设置的优先级如下:

  1. 高优先级: -XX:NewSize/-XX:MaxNewSize

  2. 中优先级: -Xmn

  3. 低优先级: -XX:NewRatio

-XX:SurvivorRatio

指定Eden区和一个Survivor区的空间大小的比率。默认为8,即Eden区和一个Survivor区的空间大小为8:1,因为一共有两个Survivor区,所以Eden区占年轻代内存大小的80%。下面的例子是把Eden区和一个Survivor区的空间大小的比率设置为4:

-XX:SurvivorRatio=4

-XX:MetaspaceSize

指定元空间第一次触发垃圾回收的内存大小的阈值。当元空间内存占用不断增大,直到达到这个阈值时,就会触发一次垃圾回收。所以,适当的增大这个阈值,会减少垃圾回收的次数。默认值根据平台而定,一般情况下大约20.8MB。下面的例子是把元空间第一次触发垃圾回收的内存大小设置为256MB:

-XX:MetaspaceSize=256M

有一些小伙伴对这个参数有误解,造成不必要的麻烦。重申一下:-XX:MetaspaceSize不是元空间内存大小的初始值,不是元空间内存大小的初始值,不是元空间内存大小的初始值,重要的事情说三遍。

-XX:MaxMetaspaceSize

指定元空间所分配内存的最大值,默认是没有限制,取决于系统的可用内存量,理论上可以占满整个系统的内存。为了避免这种惨剧,影响系统上的其他应用,需要适当设置它的大小。下面的例子是把元空间所分配内存的最大值设置为512MB:

-XX:MaxMetaspaceSize=512M

面试官微笑地说:这些常用的内存调优参数总结的不错,可以结合这些参数写一个内存调优实例吗?

被面试官夸奖一下,我按捺住心中的喜悦说:当然可以。

内存调优实例

尽可能把堆内存的空间设置大一些,以减少垃圾回收的次数。假设服务器上的可用内存还有12GB,那么先指定堆所分配内存的最大值和初始值为8GB。一般情况下,年轻代内存大小需在整个堆大小的1/2到1/4之间,那么就指定年轻代内存大小为3GB。再把Eden区和一个Survivor区的空间大小的比率设置为4。元空间第一次触发垃圾回收的内存大小的阈值设置为256MB,一般情况下足够用。元空间所分配内存的最大值设置为512MB,为了避免极端情况下占用大量内存。另外,还需要明确指定JVM以server模式启动。

内存调优的参数基本敲定,用它启动一个名为one-more-study-0.0.1-SNAPSHOT.jar的jar文件:

java -server -Xmx8G -Xms8G -Xmn3G -XX:SurvivorRatio=4 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -jar one-more-study-0.0.1-SNAPSHOT.jar

如果执行jmap -heap命令查看对应Java进程的内存配置和使用情况,应该是这样的:

Attaching to process ID 31828, please wait…

Debugger attached successfully.

Server compiler detected.

JVM version is 25.251-b08

using thread-local object allocation.

Parallel GC with 8 thread(s)

Heap Configuration: #堆的内存配置

MinHeapFreeRatio = 0

MaxHeapFreeRatio = 100

堆内存的最大值

MaxHeapSize = 8589934592 (8192.0MB)

年轻代内存的大小

NewSize = 3221225472 (3072.0MB)

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

L7W4FBk-1715619046225)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试官:怎么jdk8的垃圾收集器的调优(面试常问)。 对于jdk8的垃圾收集器的调优,需要我们了解垃圾收集器的工作原理和相关的参数配置。下面我将介绍几个常见的调优方法。 首先,我们可以通过选择合适的垃圾收集器来优化性能。jdk8提供了多个垃圾收集器,如Serial收集器、Parallel收集器和CMS收集器等。根据应用的特性和需求,选择合适的垃圾收集器可以提高垃圾回收效率。 其次,我们可以调整垃圾收集器的参数来达到更好的性能。例如,可以通过设置-Xms和-Xmx参数调整堆的大小,合理分配内存资源。同时,可以通过设置-Xmn参数来调整新生代的大小,以及通过-XX:NewRatio参数来调整新生代和老年代的比例。 另外,我们还可以使用GC日志来分析垃圾收集器的行为。通过打开GC日志并使用工具分析日志信息,可以获取到各个垃圾收集阶段的耗时、吞吐量等指标,从而更好地进行优化。 此外,jdk8还引入了元空间(Metaspace)来替代永久代(PermGen),我们可以通过调整-XX:MetaspaceSize和-XX:MaxMetaspaceSize参数来优化元空间的大小,以减少垃圾回收的次数。 最后,我们还可以考虑使用一些第三方工具来辅助调优,如VisualVM和jstat等。这些工具可以提供更详细的性能信息和可视化界面,帮助我们更全面地进行垃圾收集器的调优工作。 总结而言,对于jdk8的垃圾收集器的调优,我们需要理解垃圾收集器的工作原理和配置参数,并根据应用的需求和特点选择合适的垃圾收集器。通过调整参数、分析GC日志以及使用辅助工具,我们可以优化垃圾收集器的性能,提高应用的运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值