原文转载自美团从实际案例聊聊Java应用的GC优化,感谢原作者的贡献 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度. 即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法.本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: 优化前准备: 简单回顾JVM相关知识.介绍GC优化的一些通用策略.优化…
转自美团点评技术博客:https://tech.meituan.com/jvm_optimize.html 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度.即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法.本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: 优化前准备: 简单回顾JVM相关知…
https://tech.meituan.com/jvm_optimize.html 当Java程序性能达不到既定目标,且其他优化手段都已经穷尽时,通常需要调整垃圾回收器来进一步提高性能,称为GC优化.但GC算法复杂,影响GC性能的参数众多,且参数调整又依赖于应用各自的特点,这些因素很大程度上增加了GC优化的难度.即便如此,GC调优也不是无章可循,仍然有一些通用的思考方法.本篇会介绍这些通用的GC优化策略和相关实践案例,主要包括如下内容: 优化前准备: 简单回顾JVM相关知识.介绍GC优化的一些…
本篇原文作者是 LinkedIn 的 Swapnil Ghike,这篇文章讲述了 LinkedIn 的 Feed 产品的 GC 优化过程,虽然文章写作于 April 8, 2014,但其中的很多内容和知识点非常有学习和参考意义. 背景 高性能应用构成了现代网络的支柱.LinkedIn 内部有许多高吞吐量服务来满足每秒成千上万的用户请求.为了获得最佳的用户体验,以低延迟响应这些请求是非常重要的. 例如,我们的用户经常使用的产品是 Feed -- 它是一个不断更新的专业活动和内容的列表.Feed 在…
GC调优对我们开发人员来说,如果你想要技术方面一直发展下去,这部分内容的了解是必不可少的,jvm对于工作.面试来说都很重要,GC调优的问题 更是重中之重,因为是对你jvm学习内容的实践,知识只有应用实践出来才有意义,否则知识纸上谈兵. 首先,我们需要了解的内容,包括: 1.jvm内存结构:java虚拟(一)--java内存区域和常量池概念 2.垃圾收集算法:java虚拟机(五)--垃圾回收机制GC 3.常见的垃圾收集器:java虚拟机(六)--垃圾收集器和内存分配策略 4.GC日志分析:java…
Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题.以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决. 这话其实也没有太大问题,的确,大部分场景下关心内存.GC的问题,显得有点“杞人忧天”了,高老爷说过: 过早优化是万恶之源. 但另一方面,什么才是“过早优化”? If we coul…
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能. 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能.本篇文章首先简单介绍GC的工…
android studio Error:java.lang.OutOfMemoryError: GC overhead limit exceeded 在app下的build.gradle中找到android,并添加如下配置 dexOptions { javaMaxHeapSize "4g" } 如: android { ... ... dexOptions { javaMaxHeapSize "4g" } ... ... }…
第六章 并行GC The Parallel Collector The parallel collector (also referred to here as the throughput collector) is a generational collector similar to the serial collector; the primary difference is that multiple threads are used to speed up garbage colle…
Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要的疑惑在于这么几点: 为什么需要 GC ? 虚拟机(JVM) 与 垃圾回收(GC) 的关系? GC 的原理有哪些? 哪些 对象容易被 GC ? 等等 带着这些问题往下看: 1. 为什么需要 GC ? GC: 是Garbage Collection 的英文缩略,垃圾收集的意思. 为什么需要 GC? 主…
聊聊java基础,int值强制类型转换成byte 知识点:byte.short.char在表达式中会自动提升为int 之前做一个应用时,打印IP地址,因为是用4个byte存储的,所以打印的时候值范围是-128~127,考虑了下怎么快速转换成int值.然后今天抽空把整个完整的过程思考下,然后写下来. 首先int强制类型转换成byte,直接取低8位,这个大家可以自己试试,不管int值是多少,转化后的byte二进制与int的第八位二进制一样.所以如果int的第八位是1,转成byte就是负值,否则就是正…
过去的一年里,我们准备在Ali-HBase上突破这个被普遍认知的痛点,为此进行了深度分析及全面创新的工作,获得了一些比较好的效果.以蚂蚁风控场景为例,HBase的线上young GC时间从120ms减少到15ms,结合阿里巴巴JDK团队提供的利器--AliGC,进一步在实验室压测环境做到了5ms.本文主要介绍我们过去在这方面的一些工作和技术思想. 背景 JVM的GC机制对开发者屏蔽了内存管理的细节,提高了开发效率.说起GC,很多人的第一反应可能是JVM长时间停顿或者FGC导致进程卡死不可服务的情…
简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们主要也是从一下几个方面探讨一下,主要是第三点. 一.final修饰类和方法 final修饰的类不可被继承(例如: String, Integer, Double, ....): final修饰的方法不可被重写(例如: AtomicInteger中的大部分方法) 二.final修饰数据 1. fina…
java既然存在gc线程,为什么还存在内存泄漏? 1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢?这个问题,我们需要知道 GC 在什么时候回收内存对象,什么样的内存对象会被 GC 认为是“不再使用”的. Java中对内存对象的访问,使用的是引用的方式.在 Java 代码中我们维护一个内存对象的引用变量,通过这个引用变量的值,我们可以访问到对应的内存地址中的内存对象空间.在 Java 程序中,这个引用变量本身既可以存放堆内存中,又可以放在代码栈的内存中(与基本数…
登录JIRA访问打开缓慢,查询日志出现下述提示:java.lang.OutOfMemoryError: GC overhead limit exceeded 修改setenv.sh文件中的JVM配置,/data/atlassian/jira/bin 是我JIRA安装的路径 #cd  /data/atlassian/jira/bin #vi  setenv.sh 编辑保存后,重启JIRA的服务即可. 参考链接:https://www.cnblogs.com/ding2016/p/7568436.h…
void java.lang.System.gc() Runs the garbage collector. Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When contro…
前端请求:{"code":400,"message":"Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space"}后台日志: at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433) ~[…
为什么需要优化GC? JAVA的GC是面试必考的题目,可是在实际项目中什么时候使用GC哪?或者应该什么时候优化GC哪?有句名言:“GC优化永远是最后一项任务”. 在使用GC之前,应该考虑一下进行GC的最根本原因:垃圾收集器需要清除在程序中创建的对象,GC执行的次数即需要被垃圾收集器清理的对象个数,与创建对象的数量成正比,因此,首先应该减少创建对象的数量,我们应该从小事做起,比如需要使用StringBuilder 或者StringBuffer 来替代String:应该尽量少的输出日志: 但是,我们…
at javax.servlet.http.HttpServlet.service(HttpServlet.java:705) at javax.servlet.http.HttpServlet.service(HttpServlet.java:814) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler.hand…
帮助客户排查java.lang.OutOfMemoryError: GC overhead limit exceeded错误记录: 具体网址: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=269134815562958&id=1554559.1&displayIndex=2&_afrWindowMode=0&_adf.ctrl-state=2t8bqbn6s_165 文档id: 155455…
一.异常如下: Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded 二.解释: JDK6新增错误类型.当GC为释放很小空间占用大量时间时抛出. 一般是因为堆太小.导致异常的原因:没有足够的内存. 三.解决方案: 1.查看系统是否有使用大内存的代码或死循环. 2.可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit     cnblogs - …
最近一个上线运行良好的项目出现用户无法登录或者执行某个操作时,有卡顿现象.查看了日志,出现了大量的java.lang.OutOfMemoryError: GC overhead limit exceeded错误. oracle官方给出了这个错误产生的原因和解决方法: Exception in thread thread_name: java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause: The detail message "G…
本文示例工程下载:https://files.cnblogs.com/files/xiandedanteng/WebFileDownload20191026.rar 制作一个Webapp,让其中一个网页提供下载链接,以使用户能下载本地文件或是临时生成的文件,这些都不是难事,网上也有很多既存的解决方案. 但是,这个问题难点在,但生成文件过大时,产生java.lang.OutOfMemoryError异常怎么办?有人提出修改JVM内存参数,如-Xms<min>m -Xmx<max>m方…
今天写程序遇到个之前从没遇到的异常-----java.lang.OutOfMemoryError: GC overhead limit exceeded,下面附上解决方法 异常: 解决方法: 鼠标右击项目>>Run as>>Run Configurations>>Arguments>>Program arguments>>-Xmx4096m 这样就把运行内存设置为4G,解决了Out of memory的问题…
聊聊Java 笔记源于 视频教程Bilibili:狂神说Java 关注公众号:狂神说 能干嘛? 热度 TIOBE 狂神计划 三高:高可用.高性能.高并发 全球几千万的程序员都会Java,真正精通的不到1%,其余的99%都只停留在会用. 前期准备 写博客总结 MarkDown 标题级别 #的个数 空格 标题 在typora的快捷键是 Ctrl + 数字 字体 ** 加粗 * 斜体 ~~ 划线 Ctrl B Ctrl I 引用 摘抄别人文章时,用这个引用 行首写 > 分割线 三个 - 或三个 * 图…
本节主要描述关于垃圾回收器性能的三个指标,三个关于垃圾回收器优化的基本原则,以及优化HotSpot VM的垃圾回收器的信息收集,在这些指标中权衡以及信息的收集是非常重要的. 性能指标    吞吐量:衡量垃圾回收器运行在性能峰值的时候不需要关心垃圾回收器暂停的时间或者需要占用内存的能力.    延迟:衡量垃圾回收器最小化甚至消灭由垃圾回收器引起的暂停时间和应用抖动的能力.    内存占用:衡量为了高效的运行,垃圾回收器需要的内存.        一项指标的提升,往往需要牺牲其他一项或者两项指标.换…
Java 进阶7 并行优化 JDK多任务执行框架技术 20131114          Java 语言本身就是支持多线程机制的,他提供了 Thread 类 Runnable 接口等简单的多线程支持工具,同时为了进一步改善并发程序的性能,在 JDK中还提供了用于多线程管理的线程池概念.并行优化中,一个重要的知识点就是 线程池技术. ExecutorService exe = Executors.newCachedThreadPool(); 1. 无限制线程的缺陷           多线程设计的…
一.上文回顾 上回我们主要从图片的合并.压缩等方面介绍前端性能优化问题(详见Java Web 前端高性能优化(一)) 本次我们主要从图像BASE64 编码.GZIP压缩.懒加载与预加载以及 OneAPM Browser Insight 的定位分析功能四个方面介绍前端优化方法 二.图像的 BASE64 编码 不管如何,图片的下载始终都要向服务器发出请求,要是图片的下载不用向服务器发出请求,而可以随着 HTML 的下载同时下载到本地那就太好了.而目前,浏览器已经支持了该特性,我们可以将图片数据编码成…
protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建.它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发.protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过…
Java多线程--锁的优化 提高锁的性能 减少锁的持有时间 一个线程如果持有锁太长时间,其他线程就必须等待相应的时间,如果有多个线程都在等待该资源,整体性能必然下降.所有有必要减少单个线程持有锁的时间.比如下面的代码: public synchronized void someMethods() { fun1(); fun2(); // other code funNeedToSync(); // other code fun3(); fun4(); } 如果fun1~fun4都是耗时任务的话,…