一、垃圾回收器概述

  • 按线程数分为串行垃圾回收器并行垃圾回收器。

    • 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。串行回收默认被应用在客户端的Client模式下的JVM中。
    • 和串行回收相反,并行收集可以运用多个CPU同时执行垃圾回收,因此提升了应用的吞吐量,不过并行回收仍然与串行回收一样,采用独占式,使用“Stop-the-world”机制。
  • 按工作模式分为并发式垃圾回收器独占式垃圾回收器。

    • 并发式垃圾回收器与应用程序交替工作,以尽可能减少应用程序的停顿时间。
    • 独占式垃圾回收器一旦运行,就停止应用程序中的所有用户线程,直到垃圾回收过程完全结束。
Read more »

一、垃圾回收概念

1.1 System.gc()

  • 在默认情况下,通过 System.gc()或者 Runtime. getRuntime().gc()的调用,会显式触发Full GC,同时对老年代、新生代、方法区进行回收,尝试释放被丢弃对象占用的内存。
  • 然而 System. gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。
  • JVM实现者可以通过 System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc()。
Read more »

1、缓存机制简介

  • MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率。
  • MyBatis系统中默认定义了两级缓存,即一级缓存和二级缓存
    • 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。
    • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。
    • 为了提高扩展性,MyBatis定义了缓存接口Cache,我们可以通过实现Cache接口来自定义二级缓存。
Read more »

1、联合查询简介

  • 级联关系是一个数据库实体的概念,有 3 种级联关系,分别是一对一级联、一对多级联以及多对多级联。级联的优点是获取关联数据十分方便,但是级联过多会增加数据库系统的复杂度,同时降低系统的性能。 MyBatis提供了方便的一对一和多对多查询,而多对多查询可以由两个一对多查询组成。
Read more »

1、MyBatis简介

  • MyBatis原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
  • 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
  • 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • 可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
Read more »

1、局部异常处理

  • 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 而SpringMVC提供了强大的异常处理机制,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。新建一个SpringMVC项目,基础示例代码为https://perfectcode.top/2020/12/20/SpringMVC%E8%BF%90%E8%A1%8C%E6%B5%81%E7%A8%8B/

  • ①新建一个ExceptionController,编写一个异常请求以及一个异常方法,并在异常方法上标注@ExceptionHandler注解,即告诉SpringMVC此方法专门用来处理ExceptionController类发生的异常。

    Read more »

1、拦截器简介

  • Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {

    return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
    @Nullable Exception ex) throws Exception {
    }

    }
Read more »

1、mvc:annotation-driven简介

  • SpringMVC为我们提供的一个标签 <mvc:annotation-driven/>,这个标签会帮我们注入很多关键而实用的bean(主要注册HandlerMappings-路径匹配器、HandlerAdapters-路径匹配适配器、HandlerExceptionResolvers-异常解析器、AntPathMatcher-路径解析器、UrlPathHelper-请求路径获取帮助类等beans,提前为mvc做好基础的准备),并提供以下支持:

    • 支持使用 ConversionService 实例对表单参数进行类型转换。
    • 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成数据类型的格式化。
    • 支持使用 @Valid注解对 JavaBean 实例进行 JSR 303 验证。
    • 支持使用 @RequestBody和@ResponseBody注解。
Read more »

  • Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

  • 新建一个maven项目,实现一个SpringMVC测试用例:

    • ①在pom.xml中导入相关依赖:
Read more »