xuMengqi's Blog

调优理论 为什么需要调优? 提高程序运行的性能,如提高程序的吞吐量、降低程序的响应时间等。 解决程序出现的问题,如解决内存溢出、内存泄漏、死锁等问题。 > 性能问题一般需要调整程序代码,虚拟机调优是最后手段。 调优的过程是怎样的? 1. 监控虚拟机的行为,如堆的内存占用、GC次数、GC耗时等; 2. 确定目标,如降低内存占用、减小响应延迟等; 3. 制定方案,如调整虚拟机参...
2023年09月23日
徐梦旗

垃圾回收原理 什么是垃圾? 垃圾是指不再被使用的对象,也就是死亡的对象。 为什么需要垃圾回收? 由于内存空间是有限的,需要垃圾回收来释放内存空间,以保证程序的正常运行。 如何找到垃圾? 引用计数法:当对象被引用时,其引用计数器加一;当去除对象的引用时,引用计数器减一。当引用计数器的值为零时,代表该对象是垃圾对象。引用计数法不能解决循环依赖的问题。 可达性分析:当对象不能被...
2023年09月12日
徐梦旗

对象的生命周期 对象是如何创建的? 1. 通过new指令或反射等方式创建新的对象; 2. 若该对象对应的类从未被加载过,则进行类的加载; 3. 在堆中(或栈上分配)为对象分配内存空间; 4. 初始化对象的内存空间为零值; 5. 为对象设置必要的信息,如类的元数据,对象的哈希码,GC分代年龄等; 6. 执行对象的构造器方法<init>。 plantuml title 对象的创建 (*)...
2023年09月09日
徐梦旗

堆 堆中存放的是什么? 对象实例存放在Java堆[^1](Java Heap)中。堆是线程共享的。 堆内存是如何划分的? 堆内存被划分为新生代和老年代两部分,新生代又被划分为一个Eden区和两个大小相同的Survior区。将堆内存划分为新生代和老年代主要是为了提高垃圾收集的效率,基于以下两个假说: 弱分代假说:大部分对象都是朝生夕灭的。 强分代假说:熬过越多次垃圾收集的对象越...
2023年09月01日
徐梦旗

如何将一个Bean注册到IoC容器中? 如何将一个Bean注册到IoC容器中? 在Spring2.5之前的版本,可以通过XML配置的方式,也就是通过bean标签来配置Bean。 在Spring2.5及之后的版本,可以通过注解扫描的方式,也就是在类上标注@Component或其派生注解。 在Spring3.0及之后的版本,可以通过配置类的方式,也就是在类上标注@Configuratio...
2023年08月27日
徐梦旗

BeanFactory和ApplicationContext有什么区别? Bean工厂BeanFactory和应用上下文ApplicationContext两者都是IoC容器。 从功能上看,ApplicationContext是BeanFactory的超集,提供了环境,事件,资源,国际化,类型转换等一系列的企业级应用特性,这在接口的定义上也有体现。 从实现上看,Application...
2023年08月13日
徐梦旗

在Bean的实例化之后,会进行Bean的初始化,也就是会调用Bean的初始化方法。有以下几种方式指定Bean的初始化方法: 1. 标注@PostConstruct注解到初始化方法上; 2. 实现InitializingBean接口的afterPropertiesSet方法; 3. 指定BeanDefinition的初始化方法。 在Bean的销毁之前,会调用Bean的销毁方法。有以下几种方式...
2023年08月05日
徐梦旗

类加载机制 什么是类加载机制? 类加载(Class Loading)是指Java虚拟机将class字节码文件加载到内存中并生成Class对象的过程。 > 虚拟机参数:可以通过verbose:class来打印类加载的日志。 类加载有哪些步骤? 类加载有以下几个步骤: 1. 通过全限定类名获取到类的class二进制字节流,即加载[^1](Loading); 2. 验证class二进...
2023年07月31日
徐梦旗

什么是依赖注入? 宽泛地讲,依赖注入(Dependency Inject,DI)是控制反转(Inversion of Control,IoC)的一种实现方式,本质上就是将依赖的创建和管理委派给IoC容器,使用者只需要声明要注入的依赖便可完成依赖的获取。在日常开发中,最常使用的Spring注解是@Component和@Autowired(或@Resource),前者将Bean注册到Sprin...
2023年07月25日
徐梦旗

我们使用Spring是为了让Spring帮我们管理Bean(也就是依赖)。如果只是简单地使用Spring创建的Bean,便无需了解Spring内部发生了什么;但如果想要得到更定制化的Bean,便需要对Spring创建Bean的过程进行扩展,也就需要了解Bean在Spring中是如何被创建的。 > Bean,Bean定义,Bean实例有什么区别? > Bean是可重复使用的组件,也是对依赖...
2023年07月16日
徐梦旗

以XML配置文件配置的Bean为例,搞明白Bean在Spring中是如何被加载的可以使我们更了解Spring的XML配置文件中有哪些配置信息,以及各个配置信息是如何生效的。Spring的XML配置文件提供了很多标签和属性,我们不仅可以使用bean标签配置Bean,使用alias标签配置别名,还可以使用import标签导入资源,使用componentscan标签开启组件扫描等。 > 根据二八...
2023年07月05日
徐梦旗

为什么要搞清楚Bean在Spring中是如何表示的,主要有以下两个方面的原因: 1. 对于使用者来说,在使用XML或注解配置Bean时,需要知道有哪些配置项,才能进行配置; 2. 对于开发者来说,在Spring处理Bean的过程中,会依赖Bean在Spring中的表示,是阅读源码的前置知识。 如果让你设计,你会如何设计? 我们使用Spring是为了让Spring帮我们创建和管理依赖(...
2023年07月05日
徐梦旗

安装node和npm 安装hexo npm install g hexocli 新建博客文件夹 初始化hexo 项目 hexo init 新建布局 hexo new about 新建文章 hexo new title 启动服务 hexo server 一键部署 hexo clean && hexo deploy
2023年07月03日
徐梦旗