jvmxmsxmx参数详解_jvm参数说明

2025-01-10 14:38 - 立有生活网

JVM:区浅学

编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m

起因:公司不让用idea版开发了,需要转移到idea社区版。项目转移之后启动时遇到一个oom异常:ja.lang.OutOfMemoryError: PermGen space

jvmxmsxmx参数详解_jvm参数说明jvmxmsxmx参数详解_jvm参数说明


jvmxmsxmx参数详解_jvm参数说明


其中,-Xms指定初始堆大小,-Xmx指定堆大小。参数后面的数字表示内存大小,单位可以是M(兆字节)或者G(千兆字节)。

搜到的解决方法(确实可用,但不具体):-Xms1024M -Xmx2048M -XX:PermSize=128M -XX:MaxPermSize=256M

先了解一下参数的含义:

很开心

ja.lang.OutOfMemoryError: PermGen用ja命令查看。 space又出现了。

我懵了,开始继续搜索学习JVM内存结构,堆内存结构。随后发现,我搜索堆内存结构的时候,有的提到了代,有的没有提到,有的说代不在堆中。

我开始实验,看仅设置非堆内存时,是否能解决此oom异常。于是设置参数:-XX:PermSize=128M -XX:MaxPermSize=256M

结果是解决了。

所以得出结论,PermGen space在非堆区内存中!下面对PermGen space做出详细介绍。

PermGen space只存在于ja1.7及之前版本。提到PermGen space,默认场景中ja版本为1.7

PermGen space又称:代、持久代、方法区、非堆区

导致方法区内存溢出ja.lang.OutOfMemoryError: PermGen space的场景:

-XX:PermSize 非堆区初始内存分配大小(默认值是20.75M)

怎么给JVM加启动参数?

是一块报着学习的态度,我对PermGen space进行了搜索。大部分人都说是堆内存中的一片区域,用于存放类的class文件。(事实上不是这样的)于Ja堆的内存空间。

-vmargs

-Xms128M

-XX:Perset JAVA_OPTS=-Xms1024m -Xmx2048m 设的大点。mSize=64M

-XX:MaxPermSize=128M

-Xms:JVM初始分配的堆内存

-XX:PermSize:JVM初始分配的非堆内存

-XX:MaxPermSize:JVM允许分配的非堆内存,按需分配

在tomcat的bin目录里增加setenv.bat

set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx712m -XX:MaxPermSize=128m

访问Ja项目人数过多而荡机,此项目是发布在weblogc上的,其中,JVM 参数 -Xms256m -Xmx512m

-XX:MaxPermSize 非堆区内存值(32位机器默认是64M,64位机器模式是-vmargs:用来说明后面的就是JVM的参数了82M设置Ja虚拟机JVM启动内存参数方法如下:)

关键就是你们程序功能实现,但是性能不行。-Xms256m -Xmx512m不是越大越好,因为本身程序使用内部逻辑不合理,资源使用不平均。还有一个问题,人数一旦多了,不止weblogic,数据库的访问也是成几何数据增加。还有一点,宕机不只是内存的问题,CPU和二级缓存也至关重要,你不止要增加你的内存,最重要是更新你的CPU。

所以优化程序逻辑内部逻辑很重要,更新目前主流也很关键!

如何设置Ja虚拟机JVM启动内存参数

然后我想,既然在堆内,我只要扩大堆内存就好了,为什么要设置非堆内存?这不是多余么,于是我把后面的去掉了,仅仅扩大了堆内存,即参数调整为:-Xms1024M -Xmx2048M

Tomcat修改TOMCAT_HOME/bin/catalina.bat,在[echo Using CATALINA_BASE: "%CATALINA_BASE%"] 上面加入,比如:

服在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):务器模式参数-server二、查看配置JVM内存信息不加也可以 ,就变成

如何修改jvm启动参数

File flagsFile = new File("ja.opts");

还有tomcat,eclipse启动时通过配置文件加载的。

详细如下:

安装Ja开发软件时,默认安装包含两个文件夹,一个JDK(Ja开发工具箱),一个JRE(Ja运行环境,内含JVM),其中JDK内另含一个JRE。如果只是运行Ja程序,则JRE已足够;而JDK则只有开发人员才用到。

一、配置JVM内存

1.配置JVM内存的参数

-XmxJaHeap值,默认值为物理内存的1/4,设值应该视物理内存大小及计算机内其他内存开销而定;

-XmsJaHeap初始值,端JVM将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

2.如何配置JVM内存分配:

(1)当在有时候程序会碰到ja.lang.OutOfMemoryError,这个主要是JVM启动参数没有配好引起的,打开eclipse的eclipse.ini会看到如下参数:命令提示符下启动并使用JVM时(只对当前运行的类生效)

(2)当在集成开发环境下(如eclipse)启动并使用JVM时:

关于maxMemory(),freeMemory()和totalMemory():种设置方法:

-vmargs-Xms40m-Xmx256m-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

此处设置的参数值可以通过以下配置在开发工具的状态栏显示:

在eclipse根目录下创建文件options,文件内容为:

修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:

-debugoptions-vmjaw.exe重新启动eclipse,就可以看到下方状态条多了JVM信息。

第二种设置方法:

第三种设置方法:

选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m-Xms64m-Xmn32m-Xss16m

注:如果在同一开发环境中同时进行了第二种和第三种设置,则第二种设置生效,第三种设置无效,如:

-Xmx256m-Xms64m

(3)当在环境下(如Tomcat)启动并使用JVM时(对当前环境下所以Ja程序生效):

a.设置环境变量:

变量名:CATALINA_OPTS

变量值:-Xmx128m-Xms64m-Xmn32m-Xss16m

b.打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的%CATALINA_OPTS%(共有四处)替换为:-Xmx128m-Xms64m-Xmn32m-Xss16m

Runtime.getRuntime().maxMemory();//可用内存,对应-Xmx

Runtime.getRuntime().totalMemory();//当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和

maxMemory()为JVM的可用内存,可通过-Xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;

totalMemory()为当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和,会随着JVM使用内存的增加而增加;

freeMemory()为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,而JVM实际可用内存并不等于freeMemory(),而应该等于maxMemory()-totalMemory()+freeMemory()。及其配置JVM内存分配。

如何设置Ja虚拟机JVM启动内存参数

在Ja中,可以使用命令行参数或者配置文件来设置堆内存的初始值和值。下面分别介绍两种方式:

Tomcat默认的Ja虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在的强大内存,所以要设置Ja虚拟机JVM启动内存参数。具体设置方法为:

Runtime.getRuntime().freeMemory();//当前JVM空闲内存

Tomcat修改TOMCAT_HOME/bin/catalina.bat,在[echo Using CATALINA_BASE:

set JAVA_OPTS= -server -Xms1536m -Xmx1536m或者JAVA_OPTS="-server -Xms1536m

模式参数-server不加也可以 ,就变成

1536m只是举个例子,具体可以在DOS命令窗口中测试能使用多大的Ja虚拟机内存,能显示JDK/JRE/JVM版本号的就说明能使用命令中设置的Ja虚拟机内存,如执行

Ja -Xmx1280m -vers在调用ja的时候传入这个变量即可,如:ion;

Ja -Xmx1408m -version;

Ja -Xmx1536m -version;

Ja -Xmx1664m -version;

下图中执行Ja -Xmx1152m

等等,但是JVM启动内存参数也不可能无限增大,因为他受限于物理内存和作系统的限制,Windows作系统下一般可以使用1.6GB左右的Ja虚拟机内存,有些JDK如Jrockit可能可达1.9GB左右,此外,Linux、小型机AIX等情况可以较大。

ja jvm内存可以设置多少

ja-Xmx128m-Xms64m-Xmn32m-Xss16mTest

可以先用一个变量保存,方便修改,如:

jvm_opt用ja -option进行修改参数。ions=-xmx256m

"%ja_home%binja"

-cp

%c配置-XX:+AlwaysPreTouch参数后,JVM将-Xms指定的堆内存中每个字节都写入'0',这样的话,除了在虚拟内存中以内部数据结构保留之外,还会在物理内存中分配。并且由于touch这个行为是单线程的,因此它将会让JVM进程启动变慢。所以, 要么选择减少接下来对每个缓存页的次访问时间,要么选择减少JVM进程启动时间,这是一种trade-off 。lasspath%

-dcom.sun.mament.jmxremote

-dreplicator.home.dir="%replicator_home%"

%jvm_options%

ja -Xmx参数的设置问题

这个是你运行程序时所需要的内存大小,只要够你的程序运行就可以了 ,如果你的程序需要的内存大呢就把这个 Jset JAVA_OPTS= -server -Xms1536m -Xmx1536m或者JAVA_OPTS="-server -Xms1536m -Xmx1536m",AVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的内存】'

Under Windows (for my application -Xmx:JVM允许分配的堆内存,按需分配- a long runninsetg risk mament

application) we observed that we could go no further than 1280MB on

Windows 32bit.

Ja中-XMX -xmn 是什么的缩写

因此我学到了两个知识点:1.PermGen space是堆内存(下面证实是错误的) 2.存放class文件Ja -Xmx2048m -version;

这个是你运行程序时所需要的内存大小,只要够你的程序运行就可以了 ,如果你的程序需要的内存大呢就把这个 JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的内存】'

-Xmx512M

一个可以提升JVM运行性能的参数

打开eclipse-窗口-项-Ja-已安装的JRE(对在当前开发环境中运行的ja程序皆生效)

JAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题:

配置 -XX:+AlwaysPreTouch 参数可以优化这个问题,不过这个参数也有副作用,它会影响启动时间,那影响到底有多大呢?请接着往下看。

对比结果如下,距还是蛮大的:

配置这个参数后这么耗时其中一个原因是,这个特性在JDK8版本以前都不是并行处理的,到System.setProperty(arg.trim().substring(0, arg.indexOf("=")), arg.trim().substring(arg.indexOf("=") + 1));了JDK9才是并行。可以戳链接Parallelize Memory Pretouch:

配置-XX:+AlwaysPreTouch参数后,JVM进程启动时间慢了几个数量级的根本原因呢?

在没有配置-XX:+AlwaysPreTouch参数即默认情况下,JVM参数-Xms申明的堆只是在虚拟内存中分配,而不是在物理内存中分配:它被以一种内部数据结构的形式记录,从而避免被其他进程使用这些内存。这些内存页直到被访问时,才会在物理内存中分配。当JVM需要内存的时候,作系统在Ja应用程序中,可以使用配置文件来设置堆内存的初始值和值。在配置文件中添加以下内容即可:将根据需要分配内存页。

G1前提下,即使配置了-XX:+AlwaysPreTouch参数,JVM也会忽略掉这个参数,即跟没有配置效果一样。8u60版本修复了这个问题,详情请戳链接:G1 ignores AlwaysPreTouch: ,如下图所示:

转自 阿飞的博客

如何设置堆内存的初始值和值?

比如在下列DOS命令窗口中执行ja -Xmx1024m

使用命令行参数

jdk 自带的jconsole工具即可查看内存,线程

可以使用-Xms和-Xmx命令行参数来设置堆内存的初始值和值。例如,要将初始堆大小设置为1 GB,堆大小设置为2 GB,可以使用以下命令行参数:

List jvmArgs = Files.readAllLines(flagsFile.toPath());

ja -Xms1g -Xmx2g MyApp

使用配置文件

-Xms1g

-Xmx2g

将上述内容保存在名为“ja.opts”的文件中,然后在应用程序启动时使用以下命令行参数:

ja -XX:FlagsFile=ja.opts MyApp

其中,-XX:FlagsFile参数指定了配置文件的路径和名称。如果要在应用程序中读取配置文件,可以使用以下代码:

if (flagsFile.exists()) {

for (String arg : jvmArgs) {

}}

以上是设置堆内存的初始值和值的两种方式,可以根据需要选择其中一种方式来设置。

1995聊斋倩女幽魂前传 聊斋之倩女幽魂前传

根巨聊斋拍摄的电影有哪些? 1、内地1986版《聊斋电视系列片》:86版聊斋、聊斋电视系列片 1995聊斋倩女幽魂前传 聊斋之倩女幽魂前传 1995聊斋倩女幽魂前传 聊斋之倩女幽魂前传 1995聊斋倩女幽魂···

快乐的六一儿童节作文500字4篇(收藏)

快乐的六一儿童节作文500字 在平时的学习、工作或生活中,大家都有写作文的经历,对作文很是熟悉吧,通过作文可以把我们那些零零散散的思想,聚集在一块。写起作文来就毫无头绪?下面是我···

恋爱相对论电视猫 电视剧

您好,今天天天来为大家解答以上的问题。恋爱相对论电视猫相信很多小伙伴还不知道,现在让我们一起来看看吧! 恋爱相对论电视猫 电视剧 恋爱相对论电视猫 电视剧 恋爱相对论电视猫 电视剧 1、···