![](https://img-blog.csdnimg.cn/b34bda1e608f4f57b6f87177ecb182e9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入浅出JVM
文章平均质量分 90
深入浅出JVM
冬日追梦少年
越努力,越幸运!
展开
-
深入浅出JVM之垃圾回收底层原理
Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的高墙 ---《深入理解Java虚拟机》 我们知道手动管理内存意味着自由、精细化地掌控,但是却极度依赖于开发人员的水平和细心程度。 如果使用完了忘记释放内存空间就会发生内存泄露,再如释放错了内存空间或者使用了悬垂指针则会发生无法预知的问题。 这时候 Java 带着 GC 来了(GC,Garbage Collection 垃圾收集,早于 Java 提出),将内存的管理交给 GC 来做,减轻了程序员编程的负担,提升了开发效率。 所以并.转载 2022-01-12 16:37:36 · 150 阅读 · 0 评论 -
深入浅出JVM之垃圾回收机制
前言 Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这些恼人的问题,这也是 Java 能大行其道的重要原因之一,GC 真正让程序员的生产力得到了释放,但是程序员很难感知到它的存在,这就好比,我们吃完饭后在桌上放下餐盘即走,服务员会替你收拾好这些餐盘,你不会关心服务员什么时候来收,怎么收。 有人说既然 GC 已经自动我们完成了清理,不了解 GC 貌似也没啥问题。原创 2022-01-12 11:39:24 · 118 阅读 · 0 评论 -
深入浅出JVM之类加载过程
类加载过程 Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 类加载过程 加载 类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据原创 2022-01-12 10:12:19 · 46 阅读 · 0 评论 -
深入浅出JVM之排查YGC问题
在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导致服务超时,引发性能问题。 我们团队负责的广告系统承接了比较大的C端流量,平峰期间的请求量基本达到了上千QPS,过去也遇到了很多次GC相关的线上问题。 这篇文章,我分享一个更棘手的Young GC耗时过长的线上案例,同时会整理下YGC相关的知识点,希望让你有所收获。 内容分成以下2个部分: 从一次YG原创 2022-01-12 09:59:08 · 915 阅读 · 2 评论 -
深入浅出JVM之排查堆内存溢出
带大家回温一下JVM的内存模型(这玩意跟JAVA内存模型JMM可不一样,不要记错了) 今天我就直说堆,因为溢出是发送在堆中的。 JVM堆内存被分为两部分:年轻代(Young Generation)和老年代(Old Generation)。 年轻代 年轻代是所有新对象产生的地方。当年轻代内存空间被用完时,就会触发垃圾回收。这个垃圾回收叫做Minor GC。 年轻代被分为3个部分——Enden区和两个Survivor区。 年轻代空间的要点: 大多数新建的对象都位于Eden区。转载 2022-01-12 09:34:49 · 396 阅读 · 0 评论 -
深入浅出JVM之大促期间JVM堆外内存泄漏故障排查记录
记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些「JVM内存分配的原理分析」以及「常用的JVM问题排查手段和工具分享」,希望对大家有所帮助。 在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。 「本文的主要内容:」 故障描述和排查过程 故障原因和解决方案分析 JVM堆内内存和堆外内存分配原理 常用的进程内存泄漏排查指令和工具介绍和使用 故原创 2022-01-11 17:28:15 · 208 阅读 · 1 评论 -
深入浅出JVM之线上服务的FGC问题排查
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力。同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验。 过去半年时间里,我们的广告系统出现了多次和GC相关的线上问题,有Full GC过于频繁的,有Young GC耗时过长的,这些问题带来的影响是:GC过程中的程序卡顿,进一步导致服务超时从而影响到广告收入。 这篇文章,我将以一个FGC频繁的线上案例作为引子,详细介绍下GC的排查过程,另外会结合GC的运行原理给出一份实践指南,希望对你有所原创 2022-01-11 16:42:13 · 306 阅读 · 0 评论 -
深入浅出JVM之Java堆内存
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。 在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,或者网上的文章大概都是这样介绍的: 1、堆是线程共享的内存区域,栈是线程独享的内存区域。 2、堆中主要存原创 2022-01-11 16:22:08 · 261 阅读 · 0 评论 -
深入浅出JVM之JVM的结构
深入浅出JVM原创 2022-01-11 11:39:17 · 79 阅读 · 0 评论