首页 文章 精选 留言 我的

精选列表

搜索[优化],共10000篇文章
优秀的个人博客,低调大师

【性能优化】纳尼?内存又溢出了?!是时候总结一波了!!

点击上方蓝色“冰河技术”,关注并选择“设为星标” 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址: https://github.com/sunshinelyz/mykit-delay PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。 写在前面 相信小伙伴们在平时工作的过程中,或多或少都会遇到一个场景:内存溢出。如果你没有遇到过这个场景,那就说明你是个假的程序员。哈哈,开个玩笑,平时工作过程中,我们确实会遇到这个问题。今天,我就将平时工作过程中遇到的内存溢出情况做个简单的总结,以通俗易懂的代码案例的形式直观的分享给大家。希望能够为小伙伴们带来实质性的帮助。 案例介绍 这里,我将在平时工作过程中总结的内存溢出的情况,以代码案例的形式直观的分享给大家,希望能够为小伙伴们带来实质性的帮助。 接下来,我们就以代码案例的形式来分析各种内存溢出的情况。 定义主类结构 首先,我们创建一个类叫做BlowUpJVM,所有的案例实验都是基于这个类进行。 publicclassBlowUpJVM{} 栈深度溢出 publicstaticvoidtestStackOverFlow(){BlowUpJVM.testStackOverFlow();} 栈不断递归,而且没有处理,所以虚拟机栈就不断深入不断深入,栈深度就这样溢出了。 永久代内存溢出 publicstaticvoidtestPergemOutOfMemory1(){//方法一失败List<String>list=newArrayList<String>();while(true){list.add(UUID.randomUUID().toString().intern());}} 打算把String常量池堆满,没想到失败了,JDK1.7后常量池放到了堆里,也能进行垃圾回收了。 然后换种方式,使用cglib,用Class把老年代取堆满 publicstaticvoidtestPergemOutOfMemory2(){try{while(true){Enhancerenhancer=newEnhancer();enhancer.setSuperclass(OOM.class);enhancer.setUseCache(false);enhancer.setCallback(newMethodInterceptor(){@OverridepublicObjectintercept(Objectobj,Methodmethod,Object[]args,MethodProxyproxy)throwsThrowable{returnproxy.invokeSuper(obj,args);}});enhancer.create();}}catch(Exceptione){e.printStackTrace();}} 虚拟机成功内存溢出了,那JDK动态代理产生的类能不能溢出呢? publicstaticvoidtestPergemOutOfMemory3(){while(true){finalOOMoom=newOOM();Proxy.newProxyInstance(oom.getClass().getClassLoader(),oom.getClass().getInterfaces(),newInvocationHandler(){publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{Objectresult=method.invoke(oom,args);returnresult;}});}} 事实表明,JDK动态代理差生的类不会造成内存溢出,原因是:JDK动态代理产生的类信息,不会放到永久代中,而是放在堆中。 本地方法栈溢出 publicstaticvoidtestNativeMethodOutOfMemory(){intj=0;while(true){Printer.println(j++);ExecutorServiceexecutors=Executors.newFixedThreadPool(50);inti=0;while(i++<10){executors.submit(newRunnable(){publicvoidrun(){}});}}} 这个的原理就是不断创建线程池,而每个线程池都创建10个线程,这些线程池都是在本地方法区的,久而久之,本地方法区就溢出了。 JVM栈内存溢出 publicstaticvoidtestStackOutOfMemory(){while(true){Threadthread=newThread(newRunnable(){publicvoidrun(){while(true){}}});thread.start();}} 线程的创建会直接在JVM栈中创建,但是本例子中,没看到内存溢出,主机先挂了,不是JVM挂了,真的是主机挂了,无论在mac还是在windows,都挂了。 温馨提示,这个真的会死机的。 堆溢出 publicstaticvoidtestOutOfHeapMemory(){List<StringBuffer>list=newArrayList<StringBuffer>();while(true){StringBufferB=newStringBuffer();for(inti=0;i<10000;i++){B.append(i);}list.add(B);}} 不断往堆中塞新增的StringBuffer对象,堆满了就直接溢出了。 重磅福利 微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见! 另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!! 写在最后 如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫! 留言区 本文分享自微信公众号 - 冰河技术(hacker-binghe)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

数据湖分析服务 Data Lake Analytics发布SQL监控结果展示等多项优化

控制台作为使用DLA的第一入口,本次发布了异步执行结果展示、失败SQL原因查看、同步执行结果可调整查看、开发者交流群入口等多个易用性功能,满足极致丝滑的体验。下面跟我一起操作起来: 异步执行结果展示当前支持异步执行的SQL,通过“SQL监控”可以查看结果所在的OSS路径,然后去下载或者查看 失败SQL原因查看对于失败的SQL,支持在“SQL监控”查看具体的失败原因 同步执行结果可调整查看同步执行的结果直接在页面展示,由于不同表的字段宽度不一样,现在支持拖动修改列宽度 开发者交流群入口控制台添加了钉钉,数据湖分析开发者交流群,方便大家交流 数据湖分析Data Lake Analytics简介 欢迎大家使用数据湖分析(DLA),DLA不仅仅便宜,且快,且方便,专为阿里云数据湖分析方案而生 支持自建、托管RDS、NoSQL、OSS(JSON、CSV、Parquet等格式)多种数据源分析 支持按量 按照扫描量 的计费方式,准入门槛0元,提供的Serverless的弹性服务为按需收费,不需要购买固定的资源,完全契合业务潮汐带来的资源波动,满足弹性的分析需求,同时极大地降低了运维成本和使用成本 平台底层托管大集群且自动弹性,在一定数据量情况下,分析性能比自建小集群高出400% 支持一键 把 MySQL、PG、SqlServer、PolarDb数据库 拖到DLA,再分析,解决原MySQL不敢分析的问题。 DLA 分析性能TPC-H 10G情况 比原MySQL 8c16g 等高出10倍,数据量越大,MySQL性能越差,在1TB数据量下,原MySQL基本跑不出来 产品文档:https://www.aliyun.com/product/datalakeanalytics 帮助文档:https://help.aliyun.com/document_detail/70378.html MySQL&PG&SqlServer一键同步数据到DLA:https://help.aliyun.com/document_detail/126559.html 新客户1元试用:https://common-buy.aliyun.com/?commodityCode=openanalytics_post 欢迎大家群内咨询

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册