自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Spring AOP详解

什么是面向方面编程,3个过程:找到横切点:首要目标确定在程序的哪个位置进行横切逻辑横切逻辑(业务代码):横切逻辑代码,这个就是横切业务代码,与aop无关织入:将横切逻辑织入到横切点开发者主要关心的是横切逻辑的编写,只需要很少的代码编写确定横切点有哪些,而不需要去为每个横切点添加横切逻辑,不然就是面向对象编程了。既然是横向的编程,那么在我们的程序中,哪些可以作为横线切入点呢?//字段//@4//构造方法//@1.1。

2024-02-02 10:18:12 1043

原创 Spring事务传播机制详解

事务是逻辑处理原⼦性的保证⼿段,通过使⽤事务控制,可以极⼤的避免出现逻辑处理失败导致的脏数 据等问题。事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务 隔离级别定义的是事务在数据库读写⽅⾯的控制范围。

2024-02-02 10:17:22 986

原创 Spring Bean的初始化过程

因为Spring拥有很庞大的体系结构,没办法介绍的面面俱到,因此摘了部分核心代码,配合流程图讲解,基本把整个Bean的初始化乃至整个IOC容器的初始化过程,简述了出来。如果小伙伴想要更加深入的了解Spring源码,可以配合debug,走一遍IOC初始化的流程。最后再总结下整个Bean的整个生命周期过程1、Spring通过反射创建Bean对象;2、完成当前Bean的依赖注入成员变量填充);3、如果Bean有实现Aware接口,则调用各种Aware接口的方法设置属性;4、执行的前置。

2024-02-01 19:41:46 798 1

原创 JVM逃逸分析详解

StringBuffer sb是一个方法内部变量,上述代码中直接将sb返回,这样这个StringBuffer有可能被其他方法所改变,这样它的作用域就不只是在方法内部,虽然它是一个局部变量,称其逃逸到了方法外部。标量替换:如果一个对象被逃逸分析发现不会被外部方法访问,并且这个对象可以拆散,那么程序真正执行的时候将可能不去创建这个对象,而改为直接创建它的若干个比这个方法使用的成员变量来代替。一般情况下,不会逃逸的对象所占的空间比较大,如果能使用栈上的空间,那么大量的对象将随方法的结束而销毁,减少了GC的压力。

2024-02-01 19:28:29 1232 1

原创 Spring IOC控制反转原理详解

查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。

2024-01-31 15:51:03 752

原创 java编译和反编译

既然Java 编译是指将 Java 源码编译成 Java 字节码的过程那么Java 反编译简单说就是指根据 Java 字节码。

2024-01-30 18:26:46 722 1

原创 JVM内存泄漏、内存溢出详解

当谈到 JVM 内存问题时,经常听到 "内存泄漏" 和 "内存溢出" 这两个术语。

2024-01-30 16:25:23 1056 1

原创 JVM中一次完整的GC回收流程

每次执行Minor GC,会将Eden区中存活的对象放到Survivor的From区,而在From区中,仍存活的对象会根据他们的年龄值来决定去向,逃过一次Minor GC年龄。而老年代如果不够了,或者担保失败了,那么就会触发老年代的GC,一般来说,现在用的比较多的老年代的垃圾收集器是CMS或者G1,他们采用的都是三色标记法。还会发生第二件事情就是,在这个过程中,会进行对象的年龄判断,如果他经过一定次数的GC之后,还没有被回收,那么这个对象就会被放到老年代当中去。年老代中存放的都是一些生命周期较长的对象。

2024-01-29 17:40:13 1585

原创 JVM方法区详解

什么是方法区?说的简单点就是Java内存结构中的一块内存区域,用来存放一些东西,存放什么呢?主要就是存放已经被虚拟机加载的类型信息,常量以及一些静态变量等信息,另外对于方法区,还存储着非常重要的一类东西,叫做“常量池”。比如大家听说的类常量池,也即是然后再往上层去理解方法区的话,它则是《JVM规范》所定义的,,举个简单的例子,比如我们现在要造一辆汽车,有哪些规范呢?

2024-01-29 16:36:51 724

原创 JVM对象分配流程,如何保证线程安全?

为了保证Java对象的内存分配的安全性,同时提升效率,每个线程在Java堆中可以预先分配一小块内存,这部分内存称之为TLAB(Thread Local Allocation Buffer),这块内存的分配时线程独占的,读取、使用、回收是线程共享的。可以通过设置-XX:+/-UseTLAB参数来指定是否开启TLAB分配。

2024-01-29 10:00:33 1098

原创 什么是双亲委派,如何破坏?

假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。检查和加载过程以及系统提供的ClassLoader的作用如下图。文章一开始的问题,用双亲加载来解释就很容易理解用的是原生api中的String类类加载器的关系如下:

2024-01-28 11:39:51 879

原创 Java对象生命周期和类生命周期

对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)应用阶段(In Use)不可视阶段(Invisible)不可达阶段(Unreachable)可收集阶段(Collected)终结阶段(Finalized)对象空间重分配阶段(De-allocated)

2024-01-28 11:16:14 733

原创 JVM:三色标记法详解

三色标记法是一种垃圾回收法,它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的所使用垃圾回收算法即为三色标记法。

2024-01-28 10:42:37 989

原创 JVM垃圾回收算法

复制算法将内存区域均分为了两块(记为S0和S1),而每次在创建对象的时候,只使用其中的一块区域(例如S0),当S0使用完之后,便将S0上面存活的对象全部复制到S1上面去,然后将S0全部清理掉。和标记清除算法一样,先进行对象的标记,通过GC Roots节点扫描存活对象进行标记,将所有存活对象往一端空闲空间移动,按照内存地址依次排序,并更新对应引用的指针,然后清理末端内存地址以外的全部内存空间。无论是标记-清除算法还是标记-整理算法,都会涉及句柄的开销或是面对碎片化的内存回收,所以,复制算法 出现了。

2024-01-26 18:22:48 467 1

原创 JVM 运行时堆内存如何分代,为什么要分代

Java的堆内存分代是指将不同生命周期的堆内存对象存储在不同的堆内存区域中,这里的不同的堆内存区域被定义为“代”。这样做有助于提升垃圾回收的效率,因为这样的话就可以为不同的"代"设置不同的回收策略。一般来说,Java中的大部分对象都是朝生夕死的,同时也有一部分对象会持久存在。因为如果把这两部分对象放到一起分析和回收,这样效率实在是太低了。通过将不同时期的对象存储在不同的内存池中,就可以节省宝贵的时间和空间,从而改善系统的性能。

2024-01-26 18:12:00 687 1

原创 JVM的运行时内存区域是怎样的?

根据Java虚拟机规范的定义,JVM的运行时内存区域主要由Java堆、虚拟机栈、本地方法栈、方法区和程序计数器以及运行时常量池组成。其中堆、方法区以及运行时常量池是线程之间共享的区域,而栈(本地方法栈+虚拟机栈)、程序计数器都是线程独享的。而堆外内存则是开发人员手动管理,通常用于需要更高性能和更精确内存控制的场景。需要注意的是,上面的这6个区域,是虚拟机规范中定义的,但是在具体的实现上,不同的虚拟机,甚至是同一个虚拟机的不同版本,在实现细节上也是有区别的。

2024-01-26 17:30:00 717 1

原创 JIT优化技术详解

JIT(即时编译)是一种编译技术,它将程序在运行时动态地进行编译,以提高程序的执行效率。JIT编译器将程序的某些部分(通常是热点代码)从解释执行转换为本地机器码,以便直接在CPU上执行,而无需再次解释执行。这种优化技术广泛应用于动态语言、虚拟机和一些解释型语言的执行环境中。我们知道,想要把高级语言转变成计算机认识的机器语言有两种方式,分别是编译和解释,虽然Java转成机器语言的过程中有一个步骤是要编译成字节码,但是,这里的字节码并不能在机器上直接执行。

2024-01-25 20:51:03 861

原创 Java是编译型还是解释型语言

不同的国家,它们的语言是不同的,为了让它们更好的工作,我们需要安排相关的翻译人员,在整个过程中进行翻译,计算机的工作过程和这个十分的相似,开发人员在键盘上输入一串代表特殊含义的字符,这些指令一般是不能被机器直接识别的,它需要进行不断的翻译,最终变成机器可以识别的指令,并完成我们下达的命令做出响应,在这个过程中开发人员编写的代码被称为 源代码,负责翻译的程序被称为 编译程序,最终被计算机识别的代码则被称为 目标程序。因为 什么 Java 可以被放到两个类型中呢。但是,Java 字节码并。Java代码首先由。

2024-01-25 20:37:32 813

原创 Java是如何实现平台无关性的

平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处运行(Write Once ,Run Anywhere)。也就是说,用Java创建的可执行二进制程序,能够不加改变的运行于多个平台。

2024-01-25 20:29:26 885 1

毕业设计基于python实现的书籍推荐系统

书籍推荐系统是一种利用技术手段为用户提供个性化书籍推荐的软件系统。该系统通常通过分析用户的阅读偏好、历史阅读记录、社交互动以及其他相关信息,来预测用户可能感兴趣的书籍,并向其推荐。这种系统可以帮助用户更快速地发现符合其兴趣和需求的图书,丰富阅读体验。同时,它也有助于书店、图书馆等机构提高销售和借阅效率,促进优质图书的推广和传播。通过引入个性化推荐算法和大数据分析技术,书籍推荐系统能够为用户提供更精准和个性化的阅读推荐服务。

2024-01-29

毕业设计-基于SSM学生成绩管理系统源码+毕业论文

学生成绩管理系统是一种用于记录、管理和分析学生学业表现的软件系统。它通常包括学生信息录入、课程安排、成绩录入、成绩查询、报表生成等功能。该系统可以帮助学校或教育机构更好地跟踪学生的学习进展,评估教学效果,以及为学生提供必要的支持和指导。通过使用这样的系统,教师和学校管理者能够更有效地了解学生的学术表现,进行个性化指导,并为学生的学业发展提供数据支持。

2024-01-29

基于SSM实现的学生宿舍管理系统

学生宿舍管理系统是一种用于管理大学或学校内学生住宿的软件系统。 包括学生宿舍分配、入住登记、房间维护、费用管理、安全监控等功能。该系统可以帮助学校管理者更有效地分配宿舍资源,监督学生住宿情况,并提供便捷的服务和支持。通过使用这样的系统,学校可以提高宿舍管理的效率和透明度,促进学生居住环境的升级和改善。

2024-01-29

基于spring cloud alibaba sentinel实现的服务限流详解

基于spring cloud alibaba sentinel实现的服务限流详解

2024-01-29

基于SSM实现的人力资源管理系统+毕业论文

基于SSM实现的人力资源管理系统+毕业论文

2024-01-29

基于python实现的爬虫数据脚本-boss招聘网

基于python实现的爬虫数据脚本-boss

2024-01-29

基于SSM校园帮项目/校园即时服务平台

基于SSM校园帮项目/校园即时服务平台

2024-01-29

基于HTML+CSS实现的移动互联网门户网站

基于HTML+CSS实现的移动互联网门户网站

2024-01-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除