通过两个小例子,更快了解-Xms -Xmx

article/2025/8/26 23:51:38

我们偶尔就会遇到OutOfMemoryError,面试的时候总是能够被问道,可明明背好的面试题临时又不会了,答出来也很生硬,自己都想让自己快点“回家等通知”,那我们就通过下面的两个例子了解一下吧。 

开发环境:idea

例1,这个例子会抛出个OutOfMemoryError异常

    public static void main(String[] args) {String str = "wuxiangshangjiang";while (true){str += str + new Random().nextInt(88888888) + new Random().nextInt(99999999);}}

运行会报错(稍微卡顿,具体看电脑),内存溢出了。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3332)at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:674)at java.lang.StringBuilder.append(StringBuilder.java:208)at com.bingoyes.Demo01.main(Demo01.java:14)

接着再来个例子,看看这个程序默认内存到底有多大,就溢出??我这可是祖传电脑---

例2展示默认内存大小

是在例1上修改的,加了几行。

    public static void main(String[] args) {//可分配的最大内存,超过就OOM,默认物理机的1/4long max = Runtime.getRuntime().maxMemory();//当前分配的总内存,默认物理机的1/64long total = Runtime.getRuntime().totalMemory();//剩余可用内存,max - total,long free = Runtime.getRuntime().freeMemory();System.out.println("可分配的最大内存,超过就OOM,max=" + max + "字节\t" + (max/(double)1024/1024) + "MB");System.out.println("当前分配的总内存,total=" + total + "字节\t" + (total/(double)1024/1024) + "MB");System.out.println("剩余可用内存,free=" + free + "字节\t" + (free/(double)1024/1024) + "MB");//----------String str = "wuxiangshangjiang";while (true){str += str + new Random().nextInt(88888888) + new Random().nextInt(99999999);}}

肯定还会报错OutOfMemoryError,但是报错前会打印出我命令它给我的东西。

可分配的最大内存,超过就OOM,max=3782737920字节	3607.5MB
当前分配的总内存,total=255328256字节	243.5MB
剩余可用内存,free=248669184字节	237.1494140625MB
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3332)at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:674)at java.lang.StringBuilder.append(StringBuilder.java:208)at com.bingoyes.Demo01.main(Demo01.java:26)

打印的很明白了。最大是3607M,大约物理机总内存的1/4。

到此我们知道了我们程序运行的时候默认的jvm空间大小,那该怎么修改呢?

通过增加Xms和Xmx命令,看看效果。看图

图片

指定位置输入:-Xms16m -Xmx19m

应用后OK退出,这样就会运行的时候带上这个命令。

图片

再运行输出,比我们设置的少了一点点,我学习的时候有明白过为啥,但是忘了。知道是对的就行了暂时。

可分配的最大内存,超过就OOM,max=18874368字节	18.0MB
当前分配的总内存,total=16252928字节	15.5MB
剩余可用内存,free=12321696字节	11.750885009765625MB
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3332)at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:674)at java.lang.StringBuilder.append(StringBuilder.java:208)at com.bingoyes.Demo01.main(Demo01.java:26)

通过上面配置我们了解到了。

-Xmx:可分配的最大内存,超过就OOM

-Xms:是运行时分配的空间大小,虽然分配了,通过剩余可用内存free可以知道,并没有都用了。

最后拓展一下,增加个命令,能够直观的知道jvm中的堆Heap内部其实又分了好几个区域

-Xms16m -Xmx19m -XX:+PrintGCDetails

图片

输出

图片

运行jar包时用的命令如下:

java -jar text.jar --Xms16m -Xmx19m

以上


http://chatgpt.dhexx.cn/article/nMAUqPD9.shtml

相关文章

程序员都需要会的JVM调优总结 -Xms -Xmx -Xmn -Xss,附idea配置实战(程序员必学)

目录 1.堆大小设置 2.JVM回收器和其他参数 3.JVM常见配置汇总 4.JVM在idea配置实战 5.JVM优化总结 1.堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制&#x…

Xms Xmx size 调整java虚拟机堆大小

-Xms 设置堆空间(年轻代)的初始内存大小,等价于 -XX:InitialHeapSize -Xmx 设置堆空间(老年代)的最大内存大小,等价于 -XX:MaxHeapSize 一旦堆区中的内存大小超过“-Xmx”所指定的最大内存时&#xff0c…

xms应用框架 - 基于.netcore

xms应用框架 - 基于.netcore 背景一、xms是什么二、能干什么三、目标四、框架介绍1、元数据管理2、组织架构3、授权体系4、高度可视化配置5、业务扩展6、流程7、二次开发 五、多图鉴赏六、源码地址 背景 鄙人经过多年开发,数百个项目“打磨(折磨)”,各种…

JVM -XMX与XMS是什么

XMS : JVM初始分配的堆内存XMX : JVM最大允许分配的堆内存,按需分配堆内存分配: 默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制; 空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。 因此服务器一般设置-Xms、-…

xms跨平台基础框架 - 基于.netcore

背景 鄙人经过多年开发,数百个项目“打磨(折磨)”,各种国内外框架平台都有涉及,没有一款称心顺手的,原因有三,一是设计反人类,二是不开源根本无法突破框架限制,三是即使开源也是阉割版&#xff…

C语言常见问题(3):Although the value stored to ‘ret‘ is used in the enclosing expression

就是这个ret返回值是在if里面表达式里赋值的,其他地方没有调用这个ret,相当于这个ret是个多余的!

DVWA靶场XSS(DOM/Reflected/Stored)/XSS+CSRF

目录 一、XSS (DOM) 1.Low 2.Medium 3.High 4.Impossible 二、XSS (Reflected) 1.Low 2.Medium 3.High 4.Impossible 三、XSS (Stored) 1.Low 2.Medium 3.High 4.Impossible 四、XSS(Stored)CSRF组合实验 1.直接访问修改密码URL 2.使用链接访问构造网页修改密码…

DVWA靶机-存储型XSS漏洞(Stored)

DVWA靶机-存储型XSS漏洞(Stored) 前章: DVWA靶机-暴力破解(Brute Force) && DVWA靶机的四个安全等级 DVWA靶机-命令注入漏洞(Command Injection) DVWA靶机-文件包含漏洞(File Inclusion) DVWA靶机-文件上传漏洞(File uploads) DVWA靶机-跨站请求伪造(…

DVWA-XSS(Stored)注入-Low-Medium-Hight

Low 1、进来这里可以看到&#xff0c;好像是有两个入口&#xff0c;先随便填个数据试试水&#xff0c;勒特 payload: <script>alert(1)</script> 2、直接提交&#xff0c;简单拿下。 Medium 1、继续尝试刚才的入口&#xff0c;勒特。 payload: <script>ale…

Solr---string类型的docValues属性、stored属性

描述&#xff1a; 使用solr6.0的默认配置后&#xff0c;多数的字段使用string类型&#xff0c;通过stored设置为false来减少存储大小&#xff0c;然而却没有效果&#xff0c;还是会存储并在查询时返回。 问题&#xff1a; 在managed-schema文件内发现&#xff0c;fieldType为s…

@available 修饰类成员变量报错Stored properties cannot be marked potentially unavailable

在不方便升级插件的情况下&#xff0c;可以手动修改这个问题

mysql routines是什么_MySQL入门:Stored Routines 的变数与流程 - Break易站

1 宣告与使用变数 在Stored routines中,除了可以宣告需要的参数外,如果需要处理比较复杂的资料,你也可以宣告「区域变数、local variables」。下列是宣告区域变数的语法与位置: 下列是几种宣告区域变数的范例: 宣告需要的区域变数后,你就可以在stored routines中使用它们…

Dvwa_XSS (Stored)

&#xff08;实验基础&#xff1a;有php语言和html语言基础&#xff09; 1、low 在Name里构造恶意脚本&#xff0c;写完10个字符后发现在输输不进去&#xff0c;此时按ctrlu&#xff08;火狐&#xff0c;Microsoft Edge&#xff0c;谷歌这三款浏览器都可用此快捷方式打开网页源…

DVWA-XSS (Stored)

目录 简介安全级别&#xff1a;Low安全级别&#xff1a;Medium安全级别&#xff1a;High安全级别&#xff1a;Impossible 简介 存储型XSS 长期存储于服务器端&#xff1b; 每次用户访问都会执行脚本代码&#xff1b; 安全级别&#xff1a;Low 查看源码 <?phpif( isse…

Oracle中的存储过程【Stored Procedure】和存储函数【Stored Function】

一、存储过程 1.1、存储过程的介绍 存储过程&#xff08;Stored Procedure&#xff09;是在大型数据库系统中&#xff0c;一组为了完成特定功能的SQL 语句集&#xff0c;经编译后直接存储在数据库中&#xff0c;用户调用指定存储过程的名字和传递对应的参数&#xff08;如果该…

DVWA指点迷津-XSS(Stored)

XSS(Stored) 特点 又名“存储型XSS”。攻击者的“恶意语句”会存储在服务器端数据库&#xff0c;具有很强的稳定性。每次前端调用数据库内容&#xff0c;则会触发语句。一般出现在留言板、上传资料等与数据库有交互的模块。相比反射型XSS&#xff0c;该类型的XSS带来的危害更…

XSS(Stored)

XSS(Stored) 前言 看了一个web的安全视频&#xff0c;里面有说说有的web漏洞都是输入输出的控制问题&#xff0c;虽然感觉说的太笼统了。但确实没什么毛病。sql注入来说&#xff0c;对用户的输入做好处理&#xff0c;对服务端的输出做好处理&#xff0c;对于我这样的菜鸡来说…

linux重启java项目

1.java项目占用的8888端口&#xff0c; 首先查看该进程的进程号&#xff1a; netstat -tunlp|grep 88882.占用8888端口的进程id为4179&#xff0c;杀死该进程&#xff1a; kill -9 41793.启动java项目&#xff1a; nohup java -jar demo-0.0.1-SNAPSHOT.jar &nohup 意思…

linux 如何重启oracle,Linux重启oracle数据库的三大技巧

Linux系统下网站出现问题的时候,可通过重启oracle数据库进行处理,而重启oracle数据库的方法有好多种,可登陆数据库进行操作,也可在终端操作,具体的随小编一起来了解下吧。 网站的服务中断了,重启下发现是oralce服务不存在,又不想重启机器,就重新启动下oralce,再重启服…

Linux重启nginx服务

1.方法一 到nginx下面的sbin目录下执行 ./nginx -s reload2.方法二 如果第一种不生效&#xff0c;&#xff08;项目背景&#xff09;实际项目不生效&#xff0c;也即部署到nginx下面的vue项目&#xff0c;已经更换为最新版本&#xff0c;但是仍然没有生效&#xff0c;可以使用…