
JVM调优
文章平均质量分 53
以实战为线索,深入理解jvm
学亮编程手记
学亮编程手记
展开
-
YourKit Profiler介绍、安装及使用示例
适用平台与语言对于Java应用,YourKit Java Profiler提供对Java SE和Java EE应用程序的支持,可以在Windows、macOS、Linux等多个平台上运行。对于.NET应用,YourKit Profiler也有相应的.NET版本,支持对.NET Framework和.NET Core应用程序进行性能分析。主要特性CPU分析:实时跟踪Java或.NET应用的CPU使用情况,显示调用栈、热点函数、消耗时间最多的线程等详细信息。内存分析。原创 2024-03-23 18:05:04 · 1823 阅读 · 0 评论 -
jvm教程:jdk1.8大对象的阈值默认是多少
在 JDK 1.8 默认情况下,大对象的阈值为 0,也就是没有启用直接进入老年代的策略。这意味着所有的对象都会首先分配在 Eden 区域,然后根据年龄规则(如年龄达到阈值或 Survivor 区域空间不足)进行晋升到老年代。过小的阈值可能导致频繁的晋升操作,增加垃圾回收的负担,而过大的阈值可能导致老年代空间的浪费。这将使得大于等于 1MB 的对象直接在老年代进行分配,而不需要在 Eden 区域和 Survivor 区域中进行晋升。建议在调整此参数时进行实际的性能测试和观察,以确定适合您应用程序的最佳阈值。原创 2023-09-14 14:23:42 · 682 阅读 · 0 评论 -
jvm基础:如何解决大对象导致的频繁FGC问题?
使用工具进行内存分析和调优,例如使用 JVM 自带的工具(如 jstat、jmap、jvisualvm)或第三方工具(如 VisualVM、MAT)来识别内存泄漏或不必要的对象引用。通过调整新生代的大小,可以提供更大的空间来容纳大对象,减少它们进入老年代的频率。请根据具体情况选择适合的解决方法,并进行实际的性能测试和观察来验证效果。如果可以将大对象分割成更小的对象,可以减少其对内存的占用,并提高垃圾回收的效率。: 对于频繁使用的大对象,考虑使用对象池或缓存来重复利用对象实例,减少对象的频繁创建和销毁。原创 2023-09-14 14:23:06 · 1113 阅读 · 0 评论 -
arthas jvm相关命令使用示例:jvm、sysprop
jvm命令sysprop命令总结原创 2020-09-06 15:59:33 · 621 阅读 · 0 评论 -
arthas jvm相关命令使用示例:sysenv、getstatic、vmoption、ognl
sysenv命令vmoption命令getstatic命令ognl是getstatic的替代品。ognl命令ognl是getstatic的替代品。原创 2020-09-06 12:47:26 · 1064 阅读 · 0 评论 -
Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令
在前面的例子里我们之所以可以在一个 JVM 中发送指令让另一个 JVM 加载 Agent,是因为 JVM 通过 Attach 机制提供了一种进程间通信的方式,可以看到,现在正在运行的字节码和我们从源码编译过来的相比多了两行,多的这两行正是 Arthas 插装的代码,Arthas 的一切魔法都从这里开始。给运行中的代码插装新的代码片段,这个特性 JVM 从 SE6 就已经开始支持了,所有有关代码插装的 API 都在。就可以,默认的需要删掉框中的路径,否则,打出来的 MANIFEST.MF 文件不会生效。原创 2022-09-14 17:31:10 · 620 阅读 · 0 评论 -
arthas的安装(在线/离线)和卸载
原创 2020-09-06 17:01:59 · 1330 阅读 · 0 评论 -
jvm类加载之<clinit>() 与 <init>() 的区别
Java 类加载的初始化过程中,编译器按语句在源文件中出现的顺序,依次自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生 ()` 方法。并且 不需要显式调用父类(接口除外,接口不需要调用父接口的初始化方法,只有使用到父接口中的静态变量时才需要调用)的初始化方法 ,虚拟机会保证在子类的 方法执行之前,父类的 方法已经执行完毕。对象构造时用以初始化对象的,构造器以及非静态初始化块中的代码。直接看代码输出信息如下:虚拟机首先执行的是类加载初始化过程中的 () 方法,也就是静态变量赋值以及静态原创 2022-10-21 16:10:10 · 185 阅读 · 0 评论 -
jclasslib :java class字节码jvm指令分析
比如下载6.0.3注意:上述下载链接是针对Linux操作系统的,win系统请下载exe文件。原创 2022-10-21 15:56:16 · 366 阅读 · 0 评论 -
从jvm指令分析i++和++i的区别
【代码】从jvm指令分析i++和++i的区别。原创 2022-10-21 15:39:15 · 242 阅读 · 0 评论 -
JVM GC日志详解.png
JVM GC日志详解.png原创 2022-09-16 09:58:58 · 246 阅读 · 0 评论 -
JVM对象分配过程详解.png
JVM对象分配过程详解.png原创 2022-09-16 09:24:16 · 225 阅读 · 0 评论 -
java应用诊断工具bistoury本地源码编译、构建及启动完整步骤
执行 /D/Workspace/Java/bistoury/bistoury-proxy/target/bistoury-proxy-bin/bin/bistoury-proxy.sh start 启动之前先修改bistoury-proxy-env.sh中JAVA_HOME的值。,并导入script/schema.sql script/data.sql 两个脚本。第二步:执行构建脚本 script/build.sh 检查根目录下.mvn目录是否存在,不存在就从源工程中cp。原创 2022-09-06 14:19:50 · 932 阅读 · 0 评论 -
jvm jstack的使用
有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增 高了、出现了死锁、死循环等,我们该如何分析呢?由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要 看下jvm的内部线程的执行情况,然后再进行分析查找出原因。这个时候,就需要借助于jstack命令了,jstack的作用是将正在运行的jvm的线程情况进 行快照,并且打印出来。原创 2022-09-03 16:50:05 · 423 阅读 · 0 评论 -
jvm VisualVM工具的使用:使用jvisualvm监控远程tomcat jvm进程
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。原创 2022-09-03 16:46:34 · 935 阅读 · 0 评论 -
java jvm1.8堆内存模型:年轻代 老年代 元数据区
由上图可以看出,jdk1.8的内存模型是由2部分组成,年轻代 + 年老代。原创 2022-09-03 00:17:34 · 991 阅读 · 0 评论 -
jprofiler java应用内存监控、诊断分析
很有可能造成内存溢出,方法名找到后去看源代码,告诉开发哪里写的不合理,如果不懂代码也可以了,最起码找到哪个方法有问题了,如果怀疑哪个方法有问题,就把这个方法放到Class Tracker里进行单独观察,发现full gc也没有变化,单独把这个方法放到了内存快照。参照上面的实例数或百分比都可以看出来一直在增加,实例数是950000,上面的是690000,Difference也是111%,大于上面的53%,强制进行full gc,即点击。右键cn.test.TestBean,选择第一个。...原创 2022-09-01 13:31:06 · 705 阅读 · 0 评论 -
K8S java应用jvm内存诊断解决方案:java应用诊断和在线debug利器bistoury介绍及在K8S环境中的使用
Bistoury是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力,可以让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、机器和系统属性等各个方面对应用进行诊断,提升开发人员诊断问题的效率和能力。Bistoury集成了Alibaba开源的arthas和唯品会开源的vjtools,因此arthas和vjtools相关功能都可以在Bistoury中使用。.........原创 2022-09-01 11:07:28 · 778 阅读 · 0 评论 -
什么是java双亲委派机制
什么是双亲委派机制在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身统一确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。 类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的原创 2021-03-22 22:06:42 · 379 阅读 · 0 评论 -
jvm的发展历程:classic、exact、hotspot、BEA的JRockit、IBM的J9、 KVM和CDC/CLDC Hotspot、Azul VM、Liquid VM
sun classic vm如果只使用JIT编译器,启动时会耗时过长,因为有翻译成机器指令的过程。今天的jvm经过优化,执行效率已经不亚于C和C++了。两者结合是主流的方式,吸收二者的优点。原创 2020-09-09 21:17:31 · 740 阅读 · 0 评论 -
jvm的生命周期:启动、执行、退出
原创 2020-09-09 21:08:36 · 408 阅读 · 0 评论 -
jvm的架构模型:基于栈式的架构和基于寄存器架构的特点
基于栈的架构设计,指令数量更多,但指令集小原创 2020-09-09 21:01:29 · 830 阅读 · 0 评论 -
java代码执行流程
JIT编译器将热点代码编译成机器指令给缓存起来,主要是解决性能和响应时间的问题。原创 2020-09-09 20:48:38 · 347 阅读 · 0 评论 -
jvm的整体结构图
jvm整体结构执行引擎由三部分组成:解释器JIT编译器(属于编译器的后端,javac是前端编译器)GC垃圾回收器原创 2020-09-08 21:08:50 · 428 阅读 · 0 评论 -
虚拟机和java虚拟机
虚拟机系统虚拟机程序虚拟机java虚拟机jvm的位置Android系统结构原创 2020-09-08 21:01:14 · 288 阅读 · 0 评论 -
java发展过程中的重大事件
Open JDK和Oracle JDK原创 2020-09-08 20:48:40 · 394 阅读 · 0 评论 -
jvm字节码和基于jvm的多语言混合编程
字节码IT领域的三大难题CPUOS编译器多语言混合编程如何搞懂jvm《自己动手写java虚拟机》作者使用的是go语言,比较投机取巧,因为go语言有比较完整的垃圾回收机制,如果用c语言来写那就更难了。...原创 2020-09-08 20:34:46 · 381 阅读 · 0 评论 -
java和jvm的再认识
互联网基于js人工智能基于python微服务基于go语言嵌入式、IOT基于C语言开源的jvm有Harmony,由IBM和Intel主导。java生态圈java的跨平台性jvm是跨语言的平台原创 2020-09-08 20:25:41 · 416 阅读 · 0 评论 -
oracle jvm规范官网下载及相关书籍推荐
oracle官网下载https://www.oracle.com/downloadsoracle.com/cn/java/technologies/javase-downloads.html下载地址:https://docs.oracle.com/javase/specs/index.htmljvm相关书籍推荐优先推荐《深入理解java虚拟机》原创 2020-09-08 20:12:16 · 897 阅读 · 0 评论 -
nl.basjes.parse.useragent.UserAgentAnalyzer内存泄漏问题解决
https://yauaa.basjes.nl/README-Usage.html解决办法:去掉static。原创 2020-09-08 09:24:15 · 1634 阅读 · 1 评论 -
arthas使用示例:profiler火焰图(CPU)
到指定目录直接打开即可:HTML格式的是这模样:原创 2020-09-07 20:18:46 · 5174 阅读 · 0 评论 -
arthas使用示例:options全局开关
作用案例使用总结原创 2020-09-07 20:02:56 · 581 阅读 · 0 评论 -
arthas使用示例:tt记录指定方法每次调用的入参和返回值
参数说明使用举例字段说明检索调用记录查看调用信息重做一次调用总结原创 2020-09-07 19:54:59 · 2628 阅读 · 0 评论 -
arthas使用示例:stack输出当前方法被调用的路径
参数举例原创 2020-09-07 19:38:53 · 3750 阅读 · 0 评论 -
arthas使用示例:trace追踪方法调用路径及统计方法耗时
介绍参数说明举例总结原创 2020-09-07 19:29:10 · 9960 阅读 · 0 评论 -
arthas命令使用示例:watch
watch参数说明特别说明举例使用原创 2020-09-07 19:11:17 · 846 阅读 · 0 评论 -
arthas命令使用示例:monitor监视指定方法的执行情况
monitor监控的维度说明原创 2020-09-06 17:51:01 · 2941 阅读 · 0 评论 -
arthas类和类加载器相关命令:dump、classloader
学习目标dumpclassloader-l-a-c-r-load原创 2020-09-06 17:41:17 · 2444 阅读 · 0 评论 -
arthas命令整理:基础命令、jvm相关、class相关命令
基础命令jvm相关命令class相关命令原创 2020-09-06 17:16:36 · 608 阅读 · 0 评论 -
arthas classclassloader相关命令之二:jad、mc、redifine实现代码热更新(热替换)
jadmcmc就类似于javacredefineredefine只能修改现有方法,不能增加属性和方法redefine的限制案例:redefine结合jad、mc一起使用实现代码热替换总结原创 2020-09-06 16:48:13 · 1287 阅读 · 0 评论