首页
学习
活动
专区
工具
TVP
发布

JVM优化系列-------

引言 前面几章内容我们学习了JVM的内存回收和JVM参数等系列,今天墨白给大家分享的是jmap的使用以及内存溢出分析等详情,话不多说,正文开始; 昨天我们通过jstat可以对JVM堆的内存进行统计分析,...在写这篇文章的时候我发现了一个问题,新版的Linux系统加入了 ptrace-scope 机制....这种机制为了防止用户访问当前正在运行的进程的内存和状态, 而一些调试软件本身就是利用 ptrace 来进行获取某进程的内存状态的(包括GDB),所以在新版本的Linux系统, 默认情况下不允许再访问了,...所以我们无法使用之前的jmap -heap这个命令了,今天我们用-clstats这个命令来查看JVM内存分析; 先查看下jmap的命令: Example: jmap -dump:live,format...D double F float I int J long Z boolean [ 数组,如[I表示int[] [L+类名 其他对象 我们还可以将内存使用情况dump到文件中: 有些时候我们需要将jvm

96050
您找到你想要的搜索结果了吗?
是的
没有找到

JVM优化系列-------

正文 引言: 最近墨白在学习jvm优化相关的技术,所以我准备出一个jvm优化系列的文章,最近也是比较忙,抽空我就会更新,文章内有代码和命令建议大家手敲增加印象,最好能理解,不明白的可以后台留言或者在群里提问...; 我们为什么要对jvm进行优化....在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负载突然升高 在多线程应用下,如何分配线程的数量...说明:本系列文章使用的jdk版本Windows为1.8,Linux是1.9 了解jvm的运行参数 在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。...-Xcomp参数与它(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化

1.4K20

JVM优化系列-------

查看jvm的运行参数 有些时候我们需要查看jvm的运行参数,这个需求可能会存在2种情况: 第一,运行java命令时打印出运行参数; 第二,查看正在运行的java进程的参数; 运行java命令时打印参数...9.0.4+11) 16Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode) 查看正在运行的java进程的参数 如果想要查看正在运行的jvm...就需要借助于jinfo命令查看,首先,启动一个tomcat用于测试,来观察下运行的jvm参数; tomcat安装流程: 1== 安装tomcat流程 2rz 上传tomcat 3== 解压到/usr...sun.tools.jps.Jps == 查看所有的参数,命令:jinfo ‐flags 1[root@localhost bin]# jinfo -flags 29210 2== 控制台打印jvm...运行的参数 3VM Flags: 4== -XX:InitialHeapSize: jvm指定了堆内存初始大小,大概16兆 5== -XX:MaxHeapSize: jvm指定了堆内存最大值,大概

78460

JVM优化系列-------

我们为什么要对jvm进行优化 在本地开发环境中我们很少会遇到需要对jvm进行优化的需求,但是到了生产环境,我们可能将有下面的需求: 运行的应用“卡住了”,日志不输出,程序没有反应 服务器的CPU负载突然升高...(说明:本系列文章使用的jdk版本Windows为1.8,Linux是1.9) 了解jvm的运行参数 在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行。...用Linux编译运行,通过-D设置属性参数 1== 根目录下创建test文件夹存放java文件 2[root@localhost ~]# mkdir test 3== 查看目录内容 4[root...JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM。 32位操作系统 1.如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。...-Xcomp参数与它(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化

67480

JVM 优化思路

尽量避免 Full GC Full GC 的成本远高于 Mirror GC 因此某些情况下,尽量让对象进入新生代,虽然大部分情况下,JVM 会尝试在 Eden 区分配对象,但是由于空间紧张,新生代的数据会提前进入老年代...在年轻代分配大对象,很可能导致空间不足,为了足够的空间容纳大对象,JVM 不得不将年轻代中的年轻对象放到年老代。因为大对象占用空间多,很可能需要移动大量小的年轻对象进入年老代。...当堆空间的空闲内存小于这个数值时,JVM 便会扩展堆空间。-XX:MaxHeapFreeRatio 参数用来设置堆空间最大空闲比例,默认值是 70。...假设这里把最小堆减少为最大堆的一半,即 m,那么 JVM 会尽可能在 MB 堆空间中运行,如果这样,发生 GC 的可能性就会比较高; -Xss128k:减少线程栈的大小,这样可以使剩余的系统内存支持更多的线程

1K10

JVM性能优化专题

JVM加载Class文件的原理机制1. 编译阶段,Java源文件被编译成.class文件,包含字节码和元数据。2. 类加载阶段,.class文件由类加载器加载进JVM。...链接阶段,将类的二进制数据合并到JVM运行状态之中的过程。包含验证、准备和解析三个步骤。- 验证:确保加载的类满足JVM规范,没有安全方面的问题。- 准备:为类的静态变量分配内存,并设置默认初始化值。...使用阶段,实例化对象和调用方法等,Class对象在JVM中一直有效,直到JVM退出。6. 卸载阶段,不会主动卸载Class对象。但是如果一个类的所有实例都被回收,对应的Class对象有可能被卸载。...每个加载的Class在JVM中都有一个对应的Class对象,存储了类的结构信息,方法,变量等数据。这个Class对象一直存在于JVM中,为后续的实例化,反射等提供支持。GC是什么?为什么要有GC?...System.gc():建议JVM进行垃圾回收。JVM会根据系统运行情况自行决定是否执行回收。2. Runtime.getRuntime().gc():同上,尝试建议JVM进行回收。3.

32220

简单理解JVM优化

指内联函数的优化,何为内联函数呢,即一个方法里面调用了另外一个方法,JVM在编译的时候把被调用的方法合入到调用的方法里面,这样就能减少栈帧的创建(因为每一个方法执行时都会创建一个栈帧),节约内存 使用示例...,JVM在编译的时候会编译成如下形式 private void getA(){ system.out.print("getB"); } 参数设置: getter方法优化,-XX:UseFastAccessorMethods...---- 4、降低线程优先级 Linux不能设置,需要root权限 ---- 5、热度衰减与半衰周期 ---- 内存优化 1、将新对象预留在年轻代 参数设置: -XX:TargetSurvivorRatio...---- JVM优化配置示例 服务器:8 cpu, 8G mem e.g. java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio...-Xms5g:设置JVM初始内存为5G。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小为2G。

60120

JVM-锁优化

优化 文章已同步至GitHub开源项目: JVM底层原理解析 ​ 高效并发是JDK5升级到JDK6后一项重要的改进,HotSpot虚拟机开发团队在这个版本上花费了巨大的资源去实现各种锁优化。...因为字符串是不可变的,在编译阶段会对String的连接自动优化。也就是用StringBuilder来连接。...后言 ​ 偏向锁可以提高带有同步但是无竞争的程序性能,但是它同样是一个带有权衡效益的优化。如果程序中大多数的锁总是被不同的线程访问,那么偏向模式就是多余的。...具体问题分析之后,我们可以使用参数-XX:-UseBiasedLocking来禁止使用偏向锁优化从而提高程序的运行速度。需要具体问题,具体分析。...文章已同步至GitHub开源项目: JVM底层原理解析

31940

JVM--循环优化

一切伟大的行动和思想,都有一个微不足道的开始 -- 佚名 我们代码开发中会使用到很多的循环,为了提高效率,循环在JVM里面也进行了优化。...循环优化分四种: 1.循环无关代码(Loop-invariant Code)外提 所谓的循环无关代码(Loop-invariant Code),指的是循环中值不变的表达式。...理想情况下,上面这段代码经过循环无关代码外提之后,等同于下面这一手工优化版本。...4.循环剥离(Loop peeling) 循环剥离指的是将循环的前几个迭代或者后几个迭代剥离出循环的优化方式。一般来说,循环的前几个迭代或者后几个迭代都包含特殊处理。...通过将这几个特殊的迭代剥离出去,可以使原本的循环体的规律性更加明显,从而触发进一步的优化

54420

JVM-锁优化

优化 文章已同步至GitHub开源项目: JVM底层原理解析 ​ 高效并发是JDK5升级到JDK6后一项重要的改进,HotSpot虚拟机开发团队在这个版本上花费了巨大的资源去实现各种锁优化。...因为字符串是不可变的,在编译阶段会对String的连接自动优化。也就是用StringBuilder来连接。...后言 ​ 偏向锁可以提高带有同步但是无竞争的程序性能,但是它同样是一个带有权衡效益的优化。如果程序中大多数的锁总是被不同的线程访问,那么偏向模式就是多余的。...具体问题分析之后,我们可以使用参数-XX:-UseBiasedLocking来禁止使用偏向锁优化从而提高程序的运行速度。需要具体问题,具体分析。...文章已同步至GitHub开源项目: JVM底层原理解析

21350

JVM优化指南

JVM优化指南 如何将新对象预留在年轻代 如何让大对象进入年老代 如何设置对象进入年老代的年龄 稳定的 Java 堆 VS 动荡的 Java 堆 增大吞吐量提升系统性能 尝试使用大的内存分页 使用非占有的垃圾回收器...我认为优化JVM一定要抓住两点,第一点 :怎样缩短单次GC的时间;第二点 :怎样缩短GC频率。...虽然在大部分情况下,JVM会尝试在Eden区分配对象,但是由于空间紧张等问题,很可能不得不将部分年轻对象提前向年老代压缩。...在拥有高性能的计算机上,进行吞吐量优先优化,可以使用参数: java –Xmx3800m –Xms3800m –Xmn2G –Xss128k –XX:+UseParallelGC –XX:ParallelGC-Threads...mhq=JVM优化&mhsrc=ibmsearch_a

39730

JVM(五)JVM优化之工具「建议收藏」

前言 本章讲解JVM优化中常见的工具的使用 方法 1.概念 在JVM优化的道路上,任重道远,我们需要借助JDK本身的工具进行分析。...1)jps:JVM Process Status Tool,显示系统内所有的JVM进程 语法: -q 只输出LVMID,省略主类名称; -m 输出虚拟机进程启动时传给主类函数的参数;...-l 输出主类的完成package名称或者jar包完整路径名; -v 输出虚拟机启动时的JVM参数 使用示例: 2)jstat:JVM Statistics Monitoring Tool...jinfo:Configuration Info for Java,显示JVM配置信息; jmap:Memory Map for Java,用于生成JVM的内存快照; jhat:JVM Heap...前面的都是虾兵蟹将,接下来出场的才是重头戏,也就是融合了前面所有工具功能的图形化用户界面:jvisualvm 该工具极其强大,是JVM分析的首选!

21010

性能优化-JVM字节码

2、JVM字节码 前面我们通过tomcat本身的参数以及jvm的参数对tomcat做了优化,其实要想将应用程 序跑的更快、效率更高,除了对tomcat容器以及jvm优化外,应用程序代码本身如果写的效率不高的...,那么也是不行的,所以,对于程序本身的优化也就很重要了。...对于程序本身的优化,可以借鉴很多前辈们的经验,但是有些时候,在从源码角度方面 分析的话,不好鉴别出哪个效率高,如对字符串拼接的操作,是直接“+”号拼接效率高还是使用StringBuilder效率高?...我们都知道,java编写应用,需要先通过javac命令编译成class文件,再通过jvm执行,jvm执行时是需要将class文件中的字节码载入到jvm进行运行的。...可以更好的对我们的代码做优化。让程序执行效率更高。

38510
领券