范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

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

网络游戏防沉迷新规施行腾讯网易股价呈上涨趋势中国游戏巨头腾讯控股(OTCTCEHYHKEX00700)和网易公司(NasdaqNTESHKEX09999)周二股价转向上涨,此前有报道称,游戏玩家已经找到了规避9月1日生效的新iPhone13和iPhone13Pro的主要差别和选购建议主要的区别就在于以下几点影像方面计算摄影提升,夜景拍摄优化。续航方面电池容量提升,看一下到时候具体的优化怎么样,毕竟要上高刷和5G,容量肯定会提升。屏幕方面Pro以上有高刷,目前得你什么时候开始用华为设备?到如今产品体验如何?还会继续支持吗?应该是从2017年吧,或者更早的时候?记不清楚了,我现在的华为手机用了快三年了现在升级鸿蒙系统了应该还能在用个一年半载的吧,后续应该还用华为手机或者是华为的其他产品吧,习惯了捂脸从京东迎来新掌门,但卸任的刘强东并不轻松在今年互联网大佬纷纷激流勇退的大潮中,徐雷出任京东集团总裁,接替刘强东成为京东集团下一任掌舵人的消息似乎并没有太多意外,但细品之下,可以发现大厂新旧更替中的一些有趣规律相比于很多传三星可能会在2025年前推出5。76亿像素的传感器,走在追求高像素的路上前一段时间,三星还发布了旗下首款2亿像素图像传感器ISOCELLHP1,要比1亿像素的ISOCELLHMX(0。8m)拥有更小的单个像素面积(0。64m)。这也是全球首款2亿像素的8月新能源销量排行榜比亚迪霸榜,Model3降价之后没人买了?据乘联会最新零售销量数据显示8月份国内狭义乘用车市场销量达145。1万辆,同比下降14。8,环比下降3。418月份累计销量1289。9万辆,同比增长17。1。新能源市场新能源市场当新能源汽车劲增,自主品牌出彩,合资车下滑,8月汽车销量出炉文凌清刘帅图车宇世界网络温馨提示车宇世界,只做最真实的车评。本文为车宇世界鉴车系列文章,为车宇世界原创,转载请注明,侵权必究。继6月份7月份中国车市呈现同比环比双双下滑之后,8月份新能源小型电动车哪个好?五菱宏光MINIEV精致也靠谱近年来人们对于环境保护的意识在不断提高,出行工具的选择上也开始对新能源车型有了更高的接受度。在解决了充电续航等问题后,新能源小型电动车成了不少人出行代步的新选择。小型电动汽车更好开都2021年了,还排斥千元机?绿厂销冠系列推出新品,入门机型也能打如今手机行业内卷严重,厂商们推出各种秀肌肉的旗舰机型,而我们讨论的往往也是这些黑科技综合体。然而销量最多的往往是那些配置不起眼的千元机,对于很多消费者来说,手机是两三年就需要换的消iPhone13还没发布,iPhone14Pro就曝光对于现在手机行业的突飞猛进的发展,蚕豆只想说完全是跟风跟不上的态势,为什么会跟不上?其实关键还是得益于兜里的钱不够,就这么简单,蚕豆上班,月薪也就千把来块钱,要吃饭,要交房租,而随刘作虎拒绝妥协,顶级机皇降至新低,12256G版本售价亲民众所周知手机市场竞争十分激烈,尤其是现在来到九月份,马上就是苹果iPhone13系列发布的日子,作为最受关注的智能手机,相信也在牵动友商的心,其中刘作虎就拒绝妥协,为了趁早出货,目
新MacbookPro已进入量产阶段GPU媲美RTX3070每年910月都是广大果粉最为激动的日子,毕竟苹果的王炸级新品都会在秋季新品发布会上亮相,今年的主角毫无疑问将是流海进行修整的iPhone13,除此之外,最新版本的MacbookPr电动车迎来劲敌,多款氢动车将上市,网友希望快点普及电动车又称为电瓶车,从名称就能理解,它是依赖于电驱动的车型,而目前这种电动车拥有多款车型,包括了两轮电动车三轮电动车低速电动车以及电动汽车,其中,老百姓所说的电动车或电瓶车,泛指两七夕送什么礼物?平价又好用的蓝牙耳机推荐七夕送什么礼物?我觉得送蓝牙耳机挺不错,现在大家对蓝牙耳机的使用率也非常高,在这里就推荐一份平价好用蓝牙耳机清单,让更多的人知道蓝牙耳机什么牌子好用,下面大家来看看吧!1XisemOPPO概念新机,骁龙888Plus旗舰芯片加持,拥有极高的流畅度自手机行业进入全面屏时代后,手机的设计风格就开始变得多种多样,而各大手机厂商为了迎合消费者们的喜爱,一度在手机设计上花费了大心思,在种种原因下,促进了全面屏的飞速发展,目前最受年轻七夕,看大神怎么用iPhone拍爱情电影还有几天就是七夕佳节了,在这个属于情人们的日子里,相信不少人都为另一半精心准备了礼物。其实,礼物每年都是那些,香水巧克力鲜花今年为什么不来点不一样的呢?知名摄影师视频博主古天鸡的旅够用,就够了吗?三星Galaxy新一代惊艳之作今晚发布目前,三星在折叠屏领域中已经走在了行业的前沿,而新品发布对于三星而言,只是一次自我超越的过程。也正因为对于创新科技的追求,三星的每一款折叠屏新机都顺理成章地成为行业中的标杆。今晚,七夕女友礼物选啥?今年颜值手感最佳的三款手机1,vivoS10Pro机身轻薄,女生上手肯定会爱,特别是后盖采用的光致变色技术,在阳光的3秒照射下,就能呈现另一种颜色,真的好看!影像方面,前摄4400万的主摄加800万超广角,2021年秋季开学,哪些宿舍数码装备值得入手?看看这份推荐清单吧虽说离开学还有一段时间,但其实学习(娱乐)准备已经可以开始制备起来了。特别是一些准备用满整个4年的大件确实值得好好挑选一番。而打造一个舒服的宿舍,最核心的应该就是桌面了。毕竟除了上荣耀X20超前上手全屏硬核实力,竞速超级快充每年吸引粉丝万千期待的一款手机产品,不得不说一定有荣耀的X系列。从早期定义千元机旗舰新标准,到荣耀9X时快由芯生的震撼,再到去年荣耀X10所掀起的超能科技,5G风暴,X系列产品总是华为P60Pro曝光!有哪些惊喜呢?对于华为P50系列,很多用户最大的遗憾就是没能用上5G处理器,但也有消息称华为在后续会推出5G版本,不过可能性目前来看是比较低的。因此不少用户也是寄希望于下一代华为P60系列,P6图赏你不知道的人类高颜值阅读器有谁知道人类高颜值阅读器是什么样吗?无论是黛青勾勒的朦胧远山,还是羽灰描摹的马头高墙,美色当前,想百分百吸引回头率!海信TOUCH音乐阅读器带你立马体验。美色,触手可得海信TOUC