如何排查jvm问题的方法 开发运维 2023-12-11 Escape 手机阅读 对于还在正常运行的系统: 可以使用jmap来查看JVM中各个区域的使用情况 可以通过jstack来查看线程的运行情况,比如哪些线程阻塞、是否出现了死锁 可以通过jstat命令来查看垃圾回收的情况,特别是fullgc,如果发现fullgc比较频繁,那么就得进行调优了 通过各个命令的结果,或者jvisualvm等工具来进行分析 首先,初步猜测频繁发送fullgc的原因,如果频繁发生fullgc但是又一直没有出现内存溢出,那么表示fullgc实际上是回收了很多对象了,所以这些对象最好能在younggc过程中就直接回收掉,避免这些对象进入到老年代,对于这种情况,就要考虑这些存活时间不⻓的对象是不是比较大,导致年轻代放不下,直接进入到了老年代,尝试加大年轻代的大小,如果改完之后,fullgc减少,则证明修改有效 同时,还可以找到占用CPU最多的线程,定位到具体的方法,优化这个方法的执行,看是否能避免某些对象的创建,从而节省内存 对于已经发生了OOM的系统: 一般生产系统中都会设置当系统发生了OOM时,生成当时的dump文件(-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/base) 我们可以利用jsisualvm等工具来分析dump文件 根据dump文件找到异常的实例对象,和异常的线程(占用CPU高),定位到具体的代码 然后再进行详细的分析和调试 总之,调优不是一蹴而就的,需要分析、推理、实践、总结、再分析,最终定位到具体的问题
10 天 996 写出的语言 JavaScript 在 JavaScript 之前,网页主要是静态的,任何交互性都必须在服务器端处理,导致用户体验笨拙和缓慢。JavaScript 的发明是由于需要向网页添加更多动态和交互功能。 1995 年 5 月,Brendan Eich 被指派开发一种新的脚本语言,这种语言将补充 Java 的功能,使Web 浏览器能够实现动态内容和交互性。Eich 在短短 10 天内完成了这种语言的首个版本。这种快速开发是为了 开发运维 2024-03-20 Escape
Java21新特性——虚拟线程 Java21最重要的新特性之一是虚拟线程(Virtual Threads)。 传统的Java线程受制于操作系统的线程数,并发能力和可伸缩性有限,许多时候资源无法充分利用。而虚拟线程则提供了一种更高效、更轻量级的线程模型。虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,它们可以比传统线程 开发运维 2023-10-23 Escape
结合单例模式聊聊并发编程的有序性问题 大家好,我是Bivin,最近在重温并发编程方面的内容,发现有的小伙伴还是对并发编程中的原子性、可见性、有序性等问题不是很了解,这几个问题不仅是学习并发编程非常重要的基础内容,而且是近几年后端工程师面试的重点,今天Bivin就熬夜给大家认真聊聊有序性问题吧(现在晚上11点多了), 学完面试官交给你面试两天!对了,喜欢的话可以关注Bivin,后面会持续分享并发编程相关的内容哦!开干! 有序性问题 有序 开发运维 2023-08-15 Escape
程序员如何通过插件规范 Git commit message 的提交? Git 相信大家在日常的工作中经常会使用到,在我们完成一个需求开发或者 bug 修复的时候都会将变动的代码文件进行 commit 提交到远程。 那么问题来了,仔细看下你的提交记录,里面是不是有很多 test ,fix,update,add 等等丝毫看不出任何含义的 commit message。 commit message 的提交很多时候都只依赖开发人员的自我规范,而开发人员往往在需求紧急或者 开发运维 2023-07-18 Escape
如何在Java 9中使用StackWalker API过滤堆栈帧? StackWalkerAPI 在程序执行期间提供堆栈跟踪中的信息流。此 API 需要虚拟机来捕获整个堆栈的快照并返回用于过滤目的的元素数组。我们需要使用 walk() 方法来跳过、删除和限制堆栈帧。我们还可以使用 filter() 方法按类过滤堆栈帧以获取第一个匹配帧以及所有匹配帧。 在下面的示例中,我们可以使用 StackWalker API 来过滤堆栈帧。 示例 import java.lan 开发运维 2023-09-14 Escape