沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

生产环境频繁内存溢出,原来就是因为这个String类

7月23日 囍孤女投稿
  摘要:如果在程序中创建了比较大的对象,并且我们基于这个大对象生成了一些其他的信息,此时,一定要释放和这个大对象的引用关系,否则,就会埋下内存溢出的隐患。
  本文分享自华为云社区《【高并发】你敢信?String类竟然是导致生产环境频繁内存溢出的罪魁祸首!!》,作者:冰河。
  最近,一名小伙伴跟我说:他写的程序在测试环境一点问题没有,但是发到生产环境却会频繁出现内存溢出的情况,这个问题都困扰他一周多了。于是乎,周末我便开始帮他排查各种问题。小伙伴的疑问
  问题确定
  在排查问题的过程中,我发现这位小伙伴使用的JDK还是1。6版本。开始,我也没想那么多,继续排查他写的代码,也没找出什么问题。但是一旦启动生产环境的程序,没过多久,JVM就抛出了内存溢出的异常。
  这就奇怪了,怎么回事呢?
  启动程序时加上合理的JVM参数,问题依然存在
  没办法,继续看他的代码吧!无意间,我发现他写的代码中,大量使用了String类的substring()方法来截取字符串。于是,我便跟到JDK中的代码查看传递进来的参数。
  这无意间点进来的一次查看,竟然找到了问题所在!!JDK1。6中String类的坑
  经过分析,竟然发现了JDK1。6中String类的一个大坑!为啥说它是个坑呢?就是因为它的substring()方法会把人坑惨!不多说了,我们先来看下JDK1。6中的String类的substring()方法。
  publicStringsubstring(intbedinIndex,intendIndex){if(beginIndex0){thrownewStringIndexOutOfBoundsException(beginIndex);}if(endIndexcount){thrownewStringIndexOutOfBoundsException(endIndex);}if(beginIndexendIndex){thrownewStringIndexOutOfBoundsException(endIndexbeginIndex);}return((beginIndex0)(endIndexcount))?this:newString(offsetbeginIndex,endIndexbeginIndex,value);}
  接下来,我们来看看JDK1。6中的String类的一个构造方法,如下所示。String(intoffset,intcount,char〔〕value){this。this。this。}
  看到,这里,相信细心的小伙伴已经发现了问题,导致问题的罪魁祸首就是下面的一行代码。this。
  在JDK1。6中,使用String类的构造函数创建子字符串的时候,并不只是简单的拷贝所需要的对象,而是每次都会把整个value引用进来。如果原来的字符串比较大,即使这个字符串不再被应用,这个字符串所分配的内存也不会被释放。这也是我经过长时间的分析代码得出的结论,确实是太坑了!!
  既然问题找到了,那我们就要解决这个问题。升级JDK
  既然JDK1。6中的String类存在如此巨大的坑,那最直接有效的方式就是升级JDK。于是,我便跟小伙伴说明了情况,让他将JDK升级到JDK1。8。
  同样的,我们也来看下JDK1。8中的String类的substring()方法。
  publicStringsubstring(intbeginIndex,intendIndex){if(beginIndex0){thrownewStringIndexOutOfBoundsException(beginIndex);}if(endIndexvalue。length){thrownewStringIndexOutOfBoundsException(endIndex);}intsubLenendIndexbeginIif(subLen0){thrownewStringIndexOutOfBoundsException(subLen);}return((beginIndex0)(endIndexvalue。length))?this:newString(value,beginIndex,subLen);}
  在JDK1。8中的String类的substring()方法中,也调用了String类的构造方法来生成子字符串,我们来看看这个构造方法,如下所示。
  publicString(charvalue〔〕,intoffset,intcount){if(offset0){thrownewStringIndexOutOfBoundsException(offset);}if(count0){if(count0){thrownewStringIndexOutOfBoundsException(count);}if(offsetvalue。length){this。value。}}Note:offsetorcountmightbenear11。if(offsetvalue。lengthcount){thrownewStringIndexOutOfBoundsException(offsetcount);}this。valueArrays。copyOfRange(value,offset,offsetcount);}
  在JDK1。8中,当我们需要一个子字符串的时候,substring生成了一个新的字符串,这个字符串通过构造函数的Arrays。copyOfRange函数进行构造。这个是没啥问题。优化JVM启动参数
  这里,为了更好的提升系统的性能,我也帮这位小伙伴优化了JVM启动参数。
  经小伙伴授权,我简单列下他们的业务规模和服务器配置:整套系统采用分布式架构,架构中的各业务服务采用集群部署,日均访问量上亿,日均交易订单50W100W,订单系统的各服务器节点配置为4核8G。目前已将JDK升级到1。8版本。
  根据上述条件,我给出了JVM调优后的参数配置。Xms3072MXmx3072MXmn2048MXss1MXX:MetaspaceSize256MXX:MaxMetaspaceSize256M
  至于,为啥会给出上述JVM参数配置,后续我会单独写文章来具体分析如何根据实际业务场景来进行JVM参数调优。
  经过分析和解决问题,小伙伴的程序在生产环境下运行的很平稳,至少目前还未出现内存溢出的情况!!结论
  如果在程序中创建了比较大的对象,并且我们基于这个大对象生成了一些其他的信息,此时,一定要释放和这个大对象的引用关系,否则,就会埋下内存溢出的隐患。
  JVM优化的目标就是:尽可能让对象都在新生代里分配和回收,尽量别让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃圾回收。
  原文地址:https:www。cnblogs。comhuaweiyunp16075738。html
投诉 评论 转载

32。2!装备制造业全部八个大类行业利润均提高央视网消息:国家统计局11月27日发布数据显示,今年前10个月,全国规模以上工业企业营业收入同比增长7。6,继续保持较快增长。受国内疫情散发多发等因素影响,工业企业利润有所下降……你家孩子爱吃油炸食品吗?想要孩子长得好,应该这样吃香喷喷的油炸食品,是不少孩子的心头好。一些家长可能还会耐不住孩子的磨人功夫,时常应孩子要求买炸鸡薯条来当正餐或零食。从健康角度来看,常吃油炸食品对正处于生长发育关键期的学……生产环境频繁内存溢出,原来就是因为这个String类摘要:如果在程序中创建了比较大的对象,并且我们基于这个大对象生成了一些其他的信息,此时,一定要释放和这个大对象的引用关系,否则,就会埋下内存溢出的隐患。本文分享自华为云社……北京小伙儿曾昭然斩获击剑世青赛男子花剑银牌京报体育记者邓方佳当地时间4月4日,正在保加利亚进行的2023年世界击剑青年锦标赛结束了男子个人花剑项目的争夺,18岁的中国选手曾昭然获得一枚银牌。曾昭然就读于北京……SQLboy表哥表姐只有想通了这2点,才能摆脱低价值感的困扰最近,一位粉丝给我留言:作为一位数据分析师,他现在每天的工作就是满足各种取数需求和一些分析报告,但他觉得这些工作没有很高的技术含量,换个人就能随便替代,感觉找不到自己的价值,问……工业互联网步入快速成长期全国产业规模超万亿元中国信息通信研究院数据显示,我国工业互联网产业规模已超过万亿元大关。工业互联网在研发设计、生产制造、运营管理等各个环节广泛应用,特别是5G正在向生产控制环节加速延伸。工信……63岁杨丽萍近照美如画,背背篓漫步油菜花田,及腰黑发浓密似瀑饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!2月26日,杨丽萍在社交平台晒出近况并配文拥抱自然,踏花赏春,视频中她独自一人现身油菜花田,景美人更美。……希望与失望既然人都会有离去的那一天,那我们活着的意义在哪里。仿佛人懂得越多,快乐却越少。回想小时候,快乐是多么的简单。没办法,人都会有长大的一天。希望与失望会常伴在每一个角落。随着……乡约海南作家游记林雪加利坡的芳香课加利坡城堡下,是一大片盛开的翠芦莉花圃,装扮着梦幻香山,点缀乡民的幸福生活。在加利坡的植物芳香课,是从一大片盛开的翠芦莉花圃开始的。时值正午一时,人们还在香草餐厅品茶,海……从怀孕到宝宝出生要办的证件大全,一定要收藏从怀孕到宝宝出生后,你需要办理一系列和生育相关或者宝宝要用到的证件,这听起来似乎很复杂繁琐。不过不用担心,今天我们就来说说几种常见的证件该怎么办理,希望对你有帮助。生育登……天气渐热,喝点什么好?绿茶清凉饮,提神醒脑好。果汁富维生,增免疫力强。酸奶含乳酸,调肠道菌群平衡。豆浆营养高,滋润肌肤亮。柠檬水清口气,西瓜汁解口渴。可乐味道好,冰镇更加爽。啤酒酒精浓,适量更……5月楼市环比数据回暖,经济日报房地产稳经济作用正在显现今年以来,房地产市场整体下行,房地产行业发展面临胶着状态。个别房企在资金链吃紧、到期债务难以偿还的境遇中苦苦挣扎。企业拿地十分谨慎,购房者观望情绪浓厚,无论是新建住宅还是二手住……
郑州市科研院所毕业生协助示范区的唐副总说人生必看的部电影男人必看散文丨尝试修炼快乐的状态DNF7大至尊称号横向对比,天选之人最失败?不,它开启了潮流又是因为那个人孩子甲流发烧咳嗽注意事项厉害!萧山这4个节目入选杭州亚运会亚残运会开闭幕式暖场节目资未来的家乡深度反思产品的电商变现困局色彩画质好四款市售OLED电视推荐打破美元霸权,中东打响石油人民币第一枪,多国为何加速去美元化怪异的拉夫兰青蛙人人与青蛙交配的结果

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找