深入jvm内核---jvm性能优化

陈晓婵 陈晓婵     2022-12-05     497

关键词:

持久代用来防止类、类的一些常量操作

     1.类和接口的全限定名

     2、字段的名称和描述符

     3、方法和名称和描述符

     两个原则

     1.一个是将转移到老年代的对象数量降到最少

     因为老年代空间上的GC处理会花费更多的时间,减少被转移到老年代对象的数据可以显著地减少Full GC的频率。可以通过调整新生代空间的大小。

     2、另一个是减少full GC的执行时间

     FULL GC的执行时间要比Minor GC要长的多,因此如果full gc花费了太多的时间的话,一些连接可能会发生超时的错误。如果视图通过减少老年代空间来减少full GC执行的时间,可能会导致OutofMemoryError或者full gc执行的次数会增加。

 

     是否需要进行gc优化

     一般情况下,如果GC执行的时间只有0.1--0.3秒的话,就没必要浪费时间去进行GC优化,但是如果GC执行的时间在1秒或者2秒以上的话,GC将势在必行。一般下面情况下就不需要进行GC优化了

     1.Minor GC执行的很快(小于50ms)

     2.Minor GC执行的并不频繁(大概10秒一次吧)

     3.Full GC执行的很快(小于1秒)

     4.FULL GC执行的并不频繁(10分钟一次)

 

     3.调整GC类型/内存空间

      选择调整合适的GC类型和设定内存空间,针对性的优化

     4.分析结果

     调整了GC参数后,持续收集24小时日志,进行结果分析。如果幸运的话,就找到最适合系统的GC参数,反之就需要分析日志来检查内存是如何来分配的。然后需要不断的调整GC类型和内存空间大小找到最佳的参数

     5.如何设定空间大小

     一般老年代我建议设置为500M,也就是一次fullgc后,如果老年代剩余300M的话,这就是300M(程序占用)+500(老年代最小空间)+200M(空闲内存)

     至于新生代和老年代之间的比例呢一般设置为1比1

 

     代码优化

     1、尽量在合适的地方使用单例

     2、尽量避免随意使用静态变量

     例如 A类里面有一个静态变量B,此时静态变量B的声明周期与类A同步,如果A不卸载的话,对象会常驻在内存,直到程序终止

     3、尽力避免过多的创建java对象

     例如在循环中new 对象,因为系统不仅需要花费时间来创建对象,而且还需要花费时间来进行垃圾回收

     4、尽量使用final修饰符

     首先final修饰符的类是不可派生的,并且java编译器会寻找机会内联所有的final方法,能够提高性能一半

     5、尽量使用局部变量

     调用方法时,参数传递的都是临时变量,保存在栈中,其他变量入静态变量实例变量都在Heap中创建。速度较慢

     6、慎用synchronized方法

     7、尽量使用stringbuilder和stringbuffer

     8、尽量不要使用finalize方法

     9、尽量使用基本类型代替对象

     10、单线程尽量使用hashmap、arraylist

     11、尽量合理的创建hashmap,避免进行hash重构

     12、尽量使用位移来代替A/B的操作。

耗时一周深入理解jvm虚拟机异常处理字节码性能优化,全网最全面的jvm原理通俗易懂(强烈建议收藏)(代码片段)

深入JVM精益、平均的JVM虚拟机什么是Java虚拟机?为什么会在这里?Java字节码虚拟零件骄傲的,少数的,登记册方法区和程序计数器Java堆栈和相关寄存器垃圾收集堆永恒的数学:JVM模拟Java虚拟机如何处理异常... 查看详情

火遍github的这份jvm性能优化实践手册,首发下载量就已过百万

...衡量Java性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式、JVM垃圾收集、JIT编译和Java语言性能技术等。本书为读者打开了深入理解Java性能的大门,并以路标助力其优化 查看详情

深入理解jvm—性能监控工具(代码片段)

源自博客园:http://www.cnblogs.com/duanxz/p/3712734.html我们知道,在JVM编译期和加载器,甚至运行期已经做了大量的调优操作,但是那些都是JVM针对Java程序所做的通用的、简单的优化,程序在运行时由于... 查看详情

spark系列(代码片段)

...优化JVM性能优化系列-(6)晚期编译优化JVM性能优化系列-(7)深入了解性能优化SpringMVC系列:SpringMVC系列 查看详情

spark系列(代码片段)

...优化JVM性能优化系列-(6)晚期编译优化JVM性能优化系列-(7)深入了解性能优化SpringMVC系列 查看详情

写得太好了!树莓派安装docker

...优技术(JVM调优+网络调优+数据库调优+LINUX内核调优+中间件底层探索+容器环境调优)手绘板(脑图)1、JVM调优JVM调优必备理论知识-GcCOLLECTOR-三色标记垃圾回收算法串讲JVM常见参数总结JVM调优实战JV... 查看详情

深入理解jvm——jvm性能调优实战

如何在高性能服务器上进行JVM调优;以便充分利用高性能服务器的硬件资源,有两种JVM调优方案。一、       采用64位操作系统,并为JVM分配大内存分析:如果JVM中堆内存太小,那么就会频繁地发生垃圾... 查看详情

深入jvm内核

1、JVM    JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。   Java语言的一个非常重要的... 查看详情

《深入理解jvm——如何优化javagc「译」》

JVM深入理解JVM(4)——如何优化JavaGC「译」 PostedbyCrowonAugust21,2017本文翻译自SangminLee发表在Cubrid上的”BecomeaJavaGCExpert”系列文章的第三篇《HowtoTuneJavaGarbageCollection》,本文的作者是韩国人,写在JDK1.8发布之前,虽然... 查看详情

听说jvm性能优化很难?今天我小试了一把!

...客shuyi.tech,欢迎关注访问。对于Java开发的同学来说,JVM性能优化可以说是比较难掌握的知识点。这不仅因为JVM性能优化需要掌握晦涩难懂的JVM知识,还因为JVM性能优化很难有使用场景。这导致了许多人对JVM性能优化不熟悉,感... 查看详情

jvm性能优化,第2部分:编译器jvm

...家参考学习,如有不足之处,欢迎补充!Java编译器在JVM性能优化系列的第二篇文章中占据中心位置。EvaAndreasson介绍了不同种类的编译器,并比较了客户端,服务器和分层编译的性能结果。最后,她概述了常见的JVM优化,例如消... 查看详情

jvm技术专题深入研究jvm性能参数大全「介绍篇」

功能开关参数参数默认值功能-XX:-AllowUserSignalHandlers限于Linux和Solaris,默认不启用允许为java进程安装信号处理器,信号处理参见类:sun.misc.Signal,sun.misc.SignalHandler-XX:+DisableExplicitGC默认启用禁止在运行期显式地调用System.gc()-XX:&#... 查看详情

jvm性能优化

 java应用程序是应用在JVM上的,你们对JVM又有多少了解呢?JVM将内存分为三部分:NEW(年轻代)、Tenured(年老代)、Perm(永久代)。   (1)年轻代:用来存放java分配的新对象。   (2)年老代:经过垃圾... 查看详情

jvm性能调优

  JVM技术图谱 性能调优性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。性能调优基本上按照以... 查看详情

第七篇:双管齐下,jvm内部优化与jvm性能调优

目录一、前言二、编译时优化2.1Javac编译器2.2Java语法糖2.2.1泛型和泛型擦除 查看详情

第七篇:双管齐下,jvm内部优化与jvm性能调优

目录一、前言二、编译时优化2.1Javac编译器2.2Java语法糖2.2.1泛型和泛型擦除 查看详情

书籍推荐:《实战java虚拟机——jvm故障诊断与性能优化》下载

...拟机内有关“锁”的实现以及优化方法。作为对虚拟机的深入了解,本书还将详细介绍Java类的基 查看详情

深入了解jvm——运行期优化

本文为《深入理解Java虚拟机》第十一章内容的学习笔记,部分内容经过二次加工。若对相关知识感兴趣,推荐购书深入阅读。若认为文章涉嫌侵权,请联系作者及时删除。本作品采用知识共享署名-非商业性使用-相同... 查看详情