2.JVM性能调优之JVM内存模型深度剖析与优化

1 JDK体系结构

2 Java语言的跨平台特性

3 JVM整体结构及内存模型

3.1 堆内存划分

public class Demo {public static void main(String[] args) {Demo demo = new Demo();int rs = demo.compute();System.out.println(rs);}public int compute() {int a = 1;int b = 3;int c = (a + b)*10;return c;}
}

3.2 补充一个问题:

        在 minor gc 过程中对象挪动后,引用如何修改?

        对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM 内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描 s0 区域,扫到 gcroot 引用的非垃圾对象是将这些对象复制到 s1 或老年代,最后扫描完了,将 s0 区域的对象分配指针移动到区域的起始位置即可,s0 区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。

        minor gc 在根扫描过程中会记录所有被扫描到的对象引用(在年轻代这些引用很少,因为大部分都是垃圾对象不会扫描到),如果引用的对象被复制到新地址了,最后会一并更新引用指向新地址。

        这里面内部算法比较复杂,感兴趣可以参考R大的这篇文章:

https://www.zhihu.com/question/42181722/answer/145085437

HotSpot VM Serial GC的一个问题 - 讨论 - 高级语言虚拟机 - ITeye群组

4 JVM内存参数设置

        Spring Boot 程序的 JVM 参数设置格式(Tomcat启动直接加在bin目录下 catalina.sh 文件里):

java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -jar microservice-eureka-server.jar
  1. -Xss:每个线程的栈大小。
  2. -Xms:设置堆的初始可用大小,默认物理内存的1/64 。
  3. -Xmx:设置堆的最大可用大小,默认物理内存的1/4。
  4. -Xmn:新生代大小。
  5. -XX:NewRatio:默认2,表示新生代占年老代的1/2,占整个堆内存的1/3。
  6. -XX:SurvivorRatio:默认8,表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存。

        关于元空间的JVM参数有两个:-XX:MetaspaceSize=N 和 -XX:MaxMetaspaceSize=N

  • -XX:MaxMetaspaceSize: 设置元空间最大值,默认是 -1,即不限制,或者说只受限于本地内存大小。直接内存。
  • -XX:MetaspaceSize:指定元空间触发 Fullgc 的初始阈值(元空间无固定初始大小),以字节为单位,默认是 21M 左右,达到该值就会触发 full gc 进行类型卸载, 同时收集器会对该值进行调整: 如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值。这个跟早期jdk版本的 -XX:PermSize参数意思不一样,-XX:PermSize 代表永久代的初始容量。

        由于调整元空间的大小需要 Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量 Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在 JVM 参数中将 MetaspaceSize 和 MaxMetaspaceSize 设置成一样的值,并设置得比初始值要大,对于 8G 物理内存的机器来说,一般我会将这两个值都设置为 256M。

// JVM设置  -Xss128k(默认1M)
public class StackOverFlow {static int count = 0;static void redo() {count++;redo();}public static void main(String[] args) {try {redo();} catch (Throwable t) {t.printStackTrace();System.out.println(count);}}
}

        -Xss 设置越小 count 值越小,说明一个线程栈里能分配的栈帧就越少,但是对 JVM 整体来说能开启的线程数会更多。

4.1 JVM内存参数大小该如何设置?

        JVM参数大小设置并没有固定标准,需要根据实际项目情况分析。

4.2 日均百万级订单交易系统如何设置JVM参数

        结论:尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1560846.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

el-carousel-item自动重复渲染,使用nanoid让重复的元素包含不同的id

<template><div class"page-container"><div class"m-title">轮播图</div><el-carousel height"400px" :autoplay"true"><el-carousel-item v-for"(item, index) in carouselList" :key&…

FFmpeg的简单使用【Windows】

目录 一、视频生成图片 静态图片 转码过程 动态图片gif 二、图片生成视频 三、FFmpeg常用参数命令 3.1 主要参数 3.1.1、-i 3.1.2、-f 3.1.3、-ss 3.1.4、-t 3.2 音频参数 3.2.1、-aframes 3.2.2、 -b:a 3.2.3、-ar 3.2.4、-ac 3.2.5、-acodec 3.2.6、-an 3…

AI系列:10分钟在本地启动大模型

总目录 前言环境使用Ollama运行大模型使用Open WebUI访问大模型Web方式访问API方式访问 资源监测CPU/GPU内存 退出参考网页 前言 随着对AI技术尤其是大语言模型的了解和开源项目的发展&#xff0c;相信很多人已经逐渐熟悉这门技术。如果你也想尝试一下&#xff0c;不妨试试花1…

NV080D-S8 高品质otp语音芯片:让漱口水售货机更智能和人性化

随着科技的快速发展&#xff0c;自动售货机作为一种方便的购物方式&#xff0c;已经逐渐融入到人们的日常生活中。特别是近年来&#xff0c;NV080D-S8高品质OTP语音芯片的应用&#xff0c;更是为漱口水售货机这样的细分市场带来了前所未有的智能体验与人性化服务。这款芯片凭借…

【路径规划】自主机器人的路径规划和导航

摘要 本文讨论了如何利用路径规划算法对自主机器人进行路径规划和导航。自主机器人在环境中的路径规划是通过参考路径与机器人的当前位置进行比对&#xff0c;采用纯追踪算法&#xff08;Pure Pursuit&#xff09;进行路径跟踪&#xff0c;以确保机器人沿预定路线行驶。本文通…

sqli-labs通关全详解

前言 我们下面进行第一个漏洞——SQL注入的学习&#xff0c;SQL注入是十大漏洞之一&#xff0c;较为常见&#xff0c;算是Web安全入门必学漏洞。我们之前一直都以CTFHub为主线进行学习&#xff0c;但由于SQL注入细节较多&#xff0c;CTFHub的题目并不能深入学习。为探讨清楚SQ…

深入浅出之FPN (Feature Pyramid Networks for Object Detection)网络

FPN&#xff08;Feature Pyramid Network&#xff09;&#xff0c;即特征金字塔网络&#xff0c;是一种用于解决目标检测和语义分割中多尺度问题的深度学习网络结构。以下是对FPN网络的详细介绍&#xff1a; 一、概述 FPN网络是在2017年的CVPR会议上提出的&#xff0c;主要目…

时尚巨头Shein在英国的销售额飙升至 15.5 亿英镑,仅次于美国和德国,Shein怎么上架产品?

去年&#xff0c;在线时尚零售商 Shein 在英国的销售额飙升至 15.5 亿英镑&#xff08;20 亿美元&#xff09;&#xff0c;比之前的收益增长了 38%。这一增长使英国成为继美国和德国之后的 Shein 第三大市场。仅次于美国和德国。 英国公司注册局的文件显示&#xff0c;Shein税…

【vue2.7.16系列】手把手教你搭建后台系统__thinkphp6开启多应用(6)

thinkphp6开启多应用 由于多应用模式属于扩展&#xff0c;我们需要额外安装&#xff1b;composer require topthink/think-multi-app 安装后&#xff0c;创建 adminapi 和 ajpi 两个应用目录文件夹&#xff1b; adminapi作为前端后台接口应用&#xff0c;api作为前端前台接口应…

(六)、CT中的滤光片

在X射线中衰减是吸收和散射的结果。X射线可以由于光电效应而衰减&#xff0c;也可以由于康普顿效应而衰减和散射。长波长X射线对CT图像形成的贡献不显著&#xff0c;但会增加患者的剂量&#xff0c;总体的来讲就是要保留穿透能力强的X光。 光电效应是指当光子与物质中的原子相互…

带货直播这么流畅,原来是这套技术系统在支撑!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hi,大家好,我是你们的小米,今天要跟大家聊聊 社区直播带货的直播流程,这个流程看似简单,但其实背后有着许多复杂的技术支撑,今天我们就来拆解一下…

2024年上半年主要游戏安全风险

随着游戏行业的蓬勃发展&#xff0c;安全问题也日益成为行业关注的焦点。面对 2024 年上半年的游戏安全风险挑战&#xff0c;游戏行业需要不断加强技术能力&#xff0c;完善安全策略&#xff0c;与各方共同努力&#xff0c;打造一个更加安全全、公平的游戏环境。 AI 外挂&#…

vue项目开发环境关闭所有console.log

直接在main.js中加入代码&#xff1a; console.log function(){}

【微服务】负载均衡 - LoadBalancer(day4)

下述所有代码都是在订单服务中修改的&#xff0c;商品服务并不需要修改&#xff0c;只需要启动多个实例即可。 引入 在介绍Eureka组件的最后&#xff0c;留下了一个问题就是&#xff0c;无论启动多少个实例&#xff0c;只能调用第一个。原因是因为服务调用时获取的是一个实例…

若依 根据角色权限 动态添加路由 学习

源于这个问题对若依权限改造的学习&#xff0c;用ASP.NET Core Web api 做后端&#xff0c;所以不是纯净的若依前端&#xff0c;有部分改过。 ​​​​​​​若依 从字典类型跳到字典数据跳到了404-CSDN博客 从路由守卫获取到用户信息开始&#xff0c;到路由跳转结束的过程 …

JavaWebServlet09深入:注册系统01---注册界面

一套完整的网页到Java到数据库的创建&#xff1a; html&#xff1a;进行数据收集以及呈现 controller层&#xff1a;根据servlet处理前台html的响应和请求&#xff0c;对数据进行接收&#xff0c;封装和验证 service层&#xff1a;业务&#xff0c;验证是否存在调用创建的dao…

文通车牌识别算法:精准识别,畅行无忧

在当今数字化时代&#xff0c;高效准确的车牌识别技术对于交通管理、停车场管理等领域至关重要。文通车牌识别算法以其卓越的性能脱颖而出。 一、强大的识别能力 文通车牌识别算法不仅能够精准识别国内各种车牌&#xff0c;对于海外车牌也有着出色的识别效果。无论是常见的欧美…

hbuilderx上传appstore插件

在没有mac电脑的情况下&#xff0c;我们开发的ios app也需要上架&#xff0c;在hbuilderx打包好的ipa文件&#xff0c;需要一个工具上传到app store的构建版本上。 这里我们可以使用hbuilderx的香蕉云编上传插件&#xff1a; https://ext.dcloud.net.cn/plugin?id20511 使用…

EgoExoLearn智能体跨视角技能学习数据集 | CVPR 2024

在探索人工智能边界时&#xff0c;我们时常惊叹于人类孩童的学习能力 —— 可以轻易地将他人的动作映射到自己的视角&#xff0c;进而模仿并创新。当我们追求更高阶的人工智能的时候&#xff0c;无非是希望赋予机器这种与生俱来的天赋。 由上海人工智能实验室&#xff0c;南京…