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

老生常谈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日

相关文章

  • 如何将windows文件夹挂载到linux虚拟机下

    确认Windows文件夹共享 在Windows中选择需要挂载的文件夹,右键点击属性,选择共享选项。在共享选项中勾选“共享此文件夹”,并设置一个共享名称。 安装Samba和CIFS工具 Samba和CIFS是Linux下连接Windows共享文件夹所必需的两个工具,因此需要先安装它们。在Ubuntu下可以使用以下命令安装: sudo apt-get updat…

    windows 2023年5月23日
    00
  • 能否用虚拟安装Win10系统在虚拟机上安装Win10教程

    可以使用虚拟机在本地计算机上安装多个操作系统。在这个过程中,你可以安装多个不同的操作系统,例如Windows、Linux、MacOS等等。在此过程中,你需要使用虚拟机软件,比如VirtualBox。 以下是使用VirtualBox安装Win10的步骤: 1. 下载并安装VirtualBox 首先,你需要下载VirtualBox并安装它。VirtualBox是…

    windows 2023年5月23日
    00
  • Win11虚拟化已禁用怎么开启?Win11虚拟化功能开启方法

    Win11虚拟化已禁用常常出现在一些电脑用户的系统设置中,这意味着虚拟机的使用将受到限制,而Win11虚拟化功能的开启方法就成为了很多用户所关心的问题。下面是Win11虚拟化功能开启的方法及详细的步骤: 确认CPU是否支持虚拟化功能 在开启Win11虚拟化功能之前,我们需要确认自己的CPU是否支持这一功能。我们可以通过以下方法来确认: 打开任务管理器,点击“…

    windows 2023年5月23日
    00
  • VMware虚拟机安装及如何联网

    下面是详细的“VMware虚拟机安装及如何联网”的攻略。 一、VMware虚拟机安装 1. 下载VMware Workstation软件 首先,我们需要下载并安装VMware Workstation软件。VMware Workstation是一款虚拟机软件,可以用于创建和运行多个虚拟机。它可以在同一台物理机器上同时运行多个虚拟机,每个虚拟机都可以运行不同的操…

    windows 2023年5月23日
    00
  • VMware中ubuntu虚拟机与windows的端口映射共享一个IP地址的设置教程(图文教程)

    首先需要说明的是,如果需要在 VMware 中配置虚拟机与主机之间的端口映射,有两种方式可以实现,一是使用桥接模式,二是使用 NAT 模式。这里我们以 NAT 模式为例进行说明。 一、设置 NAT 模式 打开 VMware 虚拟机,选择“编辑”下的“虚拟网络编辑器”。 在弹出窗口中,选择“NAT设置”,勾选“启用NAT转发”,然后点击“NAT设置”按钮进行进…

    windows 2023年5月23日
    00
  • VMware使用方法(图文详解)

    VMware使用方法(图文详解) 1. VMware简介 VMware是目前业界最流行的虚拟化软件之一,可以在一台物理计算机上虚拟出多个虚拟机,每个虚拟机可以独立运作不同操作系统与应用程序。 2. 下载与安装 首先,您需要到VMware官网下载安装包,下载地址为:https://www.vmware.com/cn/products/workstation-p…

    windows 2023年5月23日
    00
  • 最新window server 2012搭建FTP服务的详细步骤

    以下是最新Window Server 2012搭建FTP服务的详细步骤: 1. 确认IIS已经安装 在开始FTP服务的搭建前,需要确认已经安装了IIS管理工具。如果没有安装,可以通过以下步骤进行安装: 打开服务器管理器,选择“添加角色和功能”; 在“添加角色和功能向导”中,选择“网站服务器(IIS)”; 依次点击“下一步”并完成安装。 2. 启用FTP服务 …

    windows 2023年5月23日
    00
  • VMware虚拟机优化十招技巧

    VMware虚拟机优化十招技巧 1. 确认虚拟机硬件配置 虚拟机硬件配置对其性能有巨大影响。确认虚拟机分配的内存大小,处理器个数和虚拟硬盘大小。在确定配置时,同时也要考虑到宿主机资源的可用性,以避免出现宿主机和虚拟机都出现性能问题。 2. 使用最新的VMware Tools 安装最新的VMware Tools能增强虚拟机性能,提高虚拟机的响应速度,并提供一些…

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