频繁 FullGC 的原因竟然是 “开源代码”?
前言 首先java语言的特性是不需像C和C++那样自己手动释放内存,因为java本身有垃圾回收机制(垃圾回收称为GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。JVM运行时占用内存最大的空间就是堆内存,另外栈区和方法区也会占用空间但是占用有限本章就不探究了。那么堆中的空间又分为年轻代和老年代,所以我们粗略的把垃圾回收分为两种:年轻代的垃圾回收称为Young GC,老年代的垃圾回收称为Full GC,实际上此处的Full GC也包含了新生代,老年代,元空间等的回收。 因为Full GC的回收过程会使系统的所有线程STW(Stop The World),那么我们一定希望让系统尽量不要进行Full GC,或者必须要进行FullGC的时候执行的时间越短越好。下面我们主要探究Full GC的角度出发分析我在开发运营后台的时候遇到的频繁Full GC过程。 事件背景 项目介绍: 我们团队做的是一个后台管理系统,因为针对不同用户负责的功能不同那么需要的权限也就不一样,所以引入了主流的shiro框架做权限控制,该框架可以控制菜单栏,按钮,操作框等。在引入这个框架时一并引入了辅助组件shiro-r...
