老生常谈JVM的内存溢出说明及参数调整

yizhihongxing

老生常谈JVM的内存溢出说明及参数调整攻略

什么是内存溢出?

在Java程序运行过程中,如果分配的堆内存不足以支撑当前应用程序的需求, JVM会抛出OutOfMemoryError,也就是我们常说的内存溢出。发生内存溢出后,通常有两种情况,一种是程序会直接退出,另一种则是程序变得非常缓慢,出现大量的Full GC以及OOM。

内存溢出的类型

内存溢出主要分为两类:

Java堆内存溢出

Java堆内存用于存储对象实例,当不断创建对象时,堆内存可能会被撑满,导致内存溢出。堆内存溢出时,可以通过调整JVM参数 -Xmx-Xms 来增加JVM堆内存大小,从而避免该问题。

示例:

public class Main {
        private static int i = 1000000;
        public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        while(true) {
            list.add(i++);
        }
    }
}

使用默认堆内存参数执行该程序,会因为内存溢出而抛出java.lang.OutOfMemoryError: Java heap space异常。

调整堆内存参数为-Xmx2g -Xms2g后,重新执行程序,就不会出现内存溢出及异常。

方法区内存溢出

方法区存储的是类的相关信息以及静态变量等,当通过动态代理、反射等方式创建过多的类或者类的元数据时,可能会导致方法区内存溢出。方法区内存溢出时,可以通过调整JVM参数-XX:PermSize-XX:MaxPermSize来增加方法区内存大小,从而避免该问题。

示例:

import java.lang.reflect.Proxy;

public class Main {
    public static void main(String[] args) {
        while(true) {
            Proxy.newProxyInstance(
                    Main.class.getClassLoader(),
                    new Class<?>[] { MainInterface.class },
                    new MainHandler());
        }
    }
}
interface MainInterface {}
class MainHandler implements java.lang.reflect.InvocationHandler {
    public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable {
        return 1;
    }
}

使用默认方法区内存大小参数执行该程序,会因为内存溢出而抛出 java.lang.OutOfMemoryError: PermGen space异常。

调整方法区内存大小参数为-XX:PermSize=128m -XX:MaxPermSize=256m后,重新执行程序,就不会出现内存溢出及异常。

JVM调优

当应用程序出现内存溢出时,可以通过JVM参数调整来解决问题。下面列出几个常见的JVM参数调优:

堆内存大小参数

  • -Xms: 设置JVM初始化堆内存大小,默认值为物理内存的1/64,当应用程序启动时即申请一块固定大小的内存,减少垃圾回收的时间;

  • -Xmx: 设置JVM最大堆内存大小,默认值为物理内存的1/4,当应用程序需要更多的内存时可以动态扩展,但当内存不足时可能会触发Full GC导致程序卡顿。

方法区内存大小参数

  • -XX:PermSize: 设置JVM初始方法区内存大小,默认值为物理内存的1/64;

  • -XX:MaxPermSize: 设置JVM最大方法区内存大小,默认值为物理内存的1/4。

GC调优参数

  • -XX:+UseConcMarkSweepGC: 开启并发垃圾回收器,以提高性能;

  • -XX:+UseG1GC: 开启G1垃圾回收器,可以更精细地控制对象的回收。

以上是一些JVM调优的常见参数,可以根据应用程序的实际情况调整。

总结

JVM的内存溢出是Java应用程序常见的问题,当出现内存溢出时,可以通过调整JVM参数来解决。常见的JVM参数调整包括堆内存大小、方法区内存大小和GC调优参数。当调整这些参数时需要根据应用程序的实际情况进行调整,可以通过实验确定最优参数值。

参考资料

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:老生常谈JVM的内存溢出说明及参数调整 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Win8系统中使用PowerShell安装APPX应用命令介绍

    下面是Win8系统中使用PowerShell安装APPX应用命令的完整攻略: 1. 下载并解压APPX应用 首先从官方网站或App Store下载APPX应用,然后将下载的文件解压缩到指定的目录下。 2. 启动PowerShell命令行工具 在Win8系统中,使用Win+X快捷键组合调出快捷菜单,在其中选择“Windows PowerShell(管理员)”选…

    windows 2023年5月23日
    00
  • 虚拟机VMware Workstation PRO 16正式版安装图文教程(附下载)

    我来为你详细讲解“虚拟机VMware Workstation PRO 16正式版安装图文教程(附下载)”的完整攻略。 一、下载VMware Workstation PRO 16 在安装VMware Workstation PRO 16之前,首先需要下载安装包。可以在VMware官网上下载,也可以在其他合法的下载站点上下载。下载地址为:https://www.…

    windows 2023年5月23日
    00
  • Windows11激活密钥/激活码/序列号分享 附激活工具

    Windows11激活相关攻略 如果你是新安装Windows11系统,那么你需要一个合法的激活密钥来激活你的系统,否则你将无法使用一些高级功能,且在系统安全性等方面也不够稳定。本文将为你介绍Windows11激活密钥/激活码/序列号分享的攻略,供你参考。 Windows11激活密钥/激活码/序列号分享 购买合法激活码 如果你愿意花费一些钱,可以选择购买合法的…

    windows 2023年5月23日
    00
  • Linux与Windows文件互传(VMWare)

    确认VMWare网络设置 在使用VMWare进行Linux和Windows文件互传前,需要先确认VMWare的网络设置。在VMWare的设置中,选择“虚拟网络编辑器”,在其中的“NAT”设置下,勾选“适用于此虚拟网络的NAT网络”以及“使用VMware专用DHCP服务器”,并记录下VMWare的默认网关IP。 在Linux中安装samba Samba是Lin…

    windows 2023年5月23日
    00
  • windows2003 DHCP服务器配置图文教程

    Windows2003 DHCP服务器配置图文教程 1. 安装DHCP服务器 在 windows2003 服务器上安装 DHCP 服务器,具体步骤如下: 打开“服务器管理器”,选择“添加角色”。 在“角色选择”中,选择“DHCP服务器”并单击“下一步”。 接受许可协议后,单击“下一步”。 按照默认设置单击“下一步”到“DHCP服务器安装”页面,单击“安装”按…

    windows 2023年5月23日
    00
  • VirtualBox虚拟机安装Win10预览版10565后花屏该怎么办?

    VirtualBox虚拟机安装Win10预览版10565后花屏的问题通常是由于显卡驱动不兼容或设置问题导致的。以下是解决步骤: 步骤一:更新VirtualBox 首先,我们需要确保VirtualBox是最新版本的,因为老版本可能不支持Windows 10预览版10565。最新版本可以从VirtualBox官网下载。 步骤二:更新VirtualBox增强功能 …

    windows 2023年5月23日
    00
  • Xshell连接不上虚拟机的解决办法汇总

    Xshell连接不上虚拟机的解决办法汇总 问题描述 在使用Xshell连接虚拟机时,可能会遇到连接不上虚拟机的问题,出现这个问题的原因可能有很多,这篇文章汇总了一些常见的解决方法。 解决方法 方法一:检查虚拟机网络配置 在连接不上虚拟机时,可能是虚拟机的网络配置出现了问题,可以按照以下步骤进行检查: 打开虚拟机软件(如VMware,VirtualBox),找…

    windows 2023年5月23日
    00
  • 在VMware虚拟机中安装中文版Win7系统详细教程 附虚拟机下载

    在VMware虚拟机中安装中文版Win7系统详细教程 确认VMware满足最低配置要求 在安装VMware和Win7之前,需要先确认你的计算机是否满足VMware运行的要求。具体请参考官方文档:VMware Workstation Pro和Player配置要求。 下载VMware和Win7镜像文件 在确认计算机满足要求后,需要下载VMware和Windows…

    windows 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部