Optimus-Xs' Blog

7种 JVM 垃圾回收器概览

堆内存详解 上面这个图大家应该已经很明白了吧。大家就可以理解成一个房子被分成了几个房间,每个房间的作用不同而已,有的是婴儿住的,有的是父母住的,有的是爷爷奶奶住的 堆内存被划分为两块,一块的年轻代,另一块是老年代。 年轻代又分为Eden和survivor。他俩空间大小比例默认为8:2, 幸存区又分为s0和s1。这两个空间大小是一模一样的,就是一对双胞胎,他俩是1:1的比...

JVM 的垃圾回收机制

哪些内存需要回收 猿们都知道JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回收都具备确定性,就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而Java堆区和方法区则不一样、不一样!(怎么不一样说的朗朗上口),这部分内存的分配和回收是动态...

Spring Bean 循环依赖为什么需要三级缓存

这里指的是单例的、非构造依赖的循环引用。很多人都知道Spring用了三层缓存来解决循环依赖,但是不知道其原因,为什么是三级缓存?二级缓存不行吗?一级缓存不可以 ? 三级缓存 Spring 解决循环依赖的核心就是提前暴露对象,而提前暴露的对象就是放置于第二级缓存中。缓存的底层都是Map,至于它们属于第几层是由Spring获取数据顺序以及其作用来表现的。 三级缓存的说明: ...

JVM类加载机制

类的加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用,卸载这7个阶段.其中其中验证、准备、解析3个部分统称为连接. 加载、验证、准备...

Spring Bean 的生命周期

生命周期的概要流程 Spring Bean 的整个生命周期 Google Spring Bean 的生命周期,大多以下图给出的流程作为答案 但是当我第一次看到这个图时,人麻了,“Aware,BeanPostProcessor……这些都是什么啊?而且这么多步骤,太多了,该怎么记啊?”。 其实要记忆该过程,还是需要我们先去理解,本文将从以下两方面去帮助理解 Bean 的生命周期 ...

Java 动态代理实现方法

动态代理作用 静态代理 要说动态代理,必须先聊聊静态代理。 假设现在项目经理有一个需求:在项目现有所有类的方法前后打印日志。 你如何在不修改已有代码的前提下,完成这个需求? 我首先想到的是静态代理。具体做法是: 1.为现有的每一个类都编写一个对应的代理类,并且让它实现和目标类相同的接口(假设都有) 2.在创建代理对象时,通过构造器塞入一个目标对象,然后在代理对象的方法内部调用目...