- 博客(121)
- 问答 (3)
- 收藏
- 关注
原创 Java ThreadPoolExecutor 线程池
如果任务队列的大小有限,当任务数超过队列大小时,线程池会根据最大线程数来创建新的线程来处理任务。当提交的任务数超过核心线程数时,线程池会创建新的线程来处理任务,直到达到最大线程数。如果任务数继续增加,而线程池已经达到最大线程数,后续的任务将会被放入任务队列中等待执行。如果提交的任务数小于核心线程数,线程池会创建新的线程来处理任务。指定线程的空闲时间,即当线程池中的线程空闲时间超过该值时,多余的线程将被回收。当线程池中的线程已经达到核心线程数,并且有新的任务提交时,这些任务会被放入任务队列中等待执行。
2023-10-25 21:29:49 122
原创 Java 中 jps 命令
(Java Virtual Machine Process Status Tool)是Java开发工具包(JDK)中的一个命令行工具,用于查看Java虚拟机(JVM)中运行的Java进程的状态信息。它通常用于检查正在运行的Java应用程序的进程ID(PID)和相关信息,这对于调试和性能监控非常有用。命令的功能和选项可能会因不同的JDK版本而有所不同,因此在实际使用时,建议查阅相关版本的文档以获取准确的信息。会显示Java进程的完整命令行信息,包括主类和参数。是Java进程的PID,
2023-09-21 20:17:17 804
原创 直接内存(Direct Memory)
本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现OutOfMemoryError异常。(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
2023-09-21 15:31:21 148
原创 运行时常量池(Runtime Constant Pool)
方法可以在某些情况下节省内存,因为它确保了相同的字符串只有一个实例存在于字符串池中,而不是每次都创建新的字符串对象。文件中常量池的内容才能进入方法区运行时常 量池,运行期间也可以将新的常量放入池中,这种特性被开发人员利用得比较多的便是String。字符串池是一个存储字符串对象的特殊内存区域,它的主要目的是节省内存和提高性能。的内容("Hello")添加到字符串池中,并返回字符串池中的引用,这个引用被赋值给了。既然运行时常量池是方法区的一部分,自然受到方法区内存的限制,当常量池无法再申请到内存。
2023-09-21 15:15:10 192
原创 javap -v 命令
命令用于查看 Java 类文件的详细信息,包括类的结构、字段、方法、属性、注解等。下面是一个详细的示例,演示如何使用。我们首先需要编译这个类,以生成。接下来,我们可以使用。
2023-09-21 12:57:54 477
原创 方法区(Method Area)
表中,曾出现过的若干个严重的Bug就是由于低版本的HotSpot虚拟机对此区域未完全回收而导致内存。《Java虚拟机规范》对方法区的约束是非常宽松的,除了和Java堆一样不需要连续的内存和可以选。其是类型的卸载,条件相当苛刻,但是这部分区域的回收有时又确实是必要的。的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收效果比较难令人满意,尤。根据《Java虚拟机规范》的规定,如果方法区无法满足新的内存分配需求时,将抛出。
2023-09-21 11:57:54 259
原创 Java堆(Java Heap)
不过无论从什么角度,无论如。何划分,都不会改变Java堆中存储内容的共性,无论是哪个区域,存储的都只能是对象的实例,将Java。根据《Java虚拟机规范》的规定,Java堆可以处于物理上不连续的内存空间中,但在逻辑上它应该。Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩。对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。对象(典型的如数组对象),多数虚拟机实现出于实现简单、存储高效的考虑,很可能会要求连续的。
2023-09-21 11:31:09 121
原创 本地方法栈
本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机。栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)定,因此具体的虚拟机可以根据需要自由实现它,甚至有的Java虚拟机(譬如Hot-Spot虚拟机)直接。《Java虚拟机规范》对本地方法栈中方法使用的语言、使用方式与数据结构并没有任何强制规。就把本地方法栈和虚拟机栈合二为一。
2023-09-21 11:19:00 56
原创 Java虚拟机栈
局部变量表存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、int、地址的引用指针,也可能是指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress。Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都。
2023-09-21 11:12:53 276
原创 JVM 程序计数器
Java虚拟机(JVM, Java Virtual Machine)是一个能够执行Java字节码的虚拟机。在JVM的架构中,程序计数器(Program Counter, PC)是一个关键的组成部分。程序计数器用于存储当前正在执行的Java字节码指令的地址。每个线程在JVM中都有自己的程序计数器。每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;
2023-09-21 01:13:13 435
原创 ClassName::methodName 是一个方法引用(Method Reference)的表示形式 主要用于简化Lambda表达式
在Java中,ClassName::methodName 是一个方法引用(Method Reference)的表示形式。它允许你更简洁、更易读的方式引用一个已存在的方法。// 使用任意对象的实例方法引用。当你有一个函数式接口,并且你需要使用一个已经存在的方法来实现这个接口的时候,你可以使用方法引用。3.类的任意对象的实例方法引用:ClassName::instanceMethodName。2.某个对象的实例方法引用:instance::instanceMethodName。类的任意对象的实例方法引用。
2023-09-20 22:59:22 310
原创 Linux centOS yum install MySQL5.7
当你运行上述命令rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022时,你的系统会从给定的 URL 下载 MySQL 的公钥,并将其导入 RPM 包管理器的密钥数据库。总的来说,这个命令是将所有数据库的所有权限授予用户名为root的用户,用户可以从任何主机连接到数据库,用户的密码为密码,并且用户可以将他的权限授予给其他用户。%是一个通配符,代表所有可能的主机。的作用是将 MySQL 的公共 GPG 密钥导入到您的 RPM 包管理器。
2023-09-13 00:53:25 373
原创 Redis 软件包,在 CentOS 7 中安装 Redis
1. 解压 Redis 软件包。2. 切换到 Redis 软件包的解压目录。5. 启动 Redis 服务。4. 安装 Redis。3. 构建 Redis。
2023-07-30 10:28:00 642
原创 mybatis id字段由table自动生成 insert 时获取id
keyProperty="id" 将获取的自动生成的id 付给参数car 的 id属性。useGeneratedKeys="true" 获取自动生成的id。插入一条新的记录之后,自动生成了主键,而这个主键需要在其他地方使用时。id id字段由table自动生成。
2023-07-11 21:18:54 439
原创 mybatis 配置文件 别名 typeAliases
如果一个包下的类太多,每个类都要起别名,会导致typeAlias标签配置较多,所以mybatis用提供package的配置方式,只需要指定包名,该包下的所有类都自动起别名,别名就是简类名。Car 作为 com.wsd.mybatis.pojo.Car 的别名,在mapper.xml 映射文件中的resultType="com.wsd.mybatis.pojo.Car"alias是大小写不敏感的。也就是说假设alias="Car",再用的时候,可以CAR,也可以car,也可以Car,都行。
2023-07-10 21:45:35 507
原创 javassist implements interface 模拟mybatis 生成代理类
mybatis 框架中的sqlSession.getMapper(接口类) 可以生成代理对象。//sqlsession.getMapper生成代理对象。获取sqlsession的工具类。封装数据的 pojo class。动态创建代理对象的工具类。mybatis 配置文件。
2023-07-09 00:32:35 254
原创 javassist 02 implement interface
利用 javassist 生产一个 类A, Class A implements AccountDao。在实现接口中的方法时,并不能预先知晓接口中有哪些类,那么如何实现接口中的方法?创建 interface。
2023-07-08 17:26:11 186
原创 javassit 01
类似地,这个参数将 java.base 模块中的 sun.net.util 包打开,使得所有未命名模块可以访问这个包中的类。这对于 Javassist 在操作 Java 17 字节码时可能需要访问 sun.net.util 包中的一些类是必要的。这个参数将 java.base 模块中的 java.lang 包打开,使得所有未命名模块(即,未通过模块系统明确指定的模块)可以访问这个包中的类。在 Java 9 及以后的版本中,模块系统(Jigsaw)的引入为 Java 平台带来了更严格的封装。
2023-07-05 20:17:19 173
原创 mybatis web使用02
或则 修改idea 控制台的 编码方式为 utf-8,使与tomcat log 使用的 编码方式保持一致。菜单Help -> Edit Custom VM Options,在末尾增加如下代码,重启 idea。tomcat的/conf/logging.properties。定义 MoneyNotEnoughExcecption。在IDEA里修改idea64.exe.vmoptions。处理 transfer 请求的 servlet。转账操作时,余额不足的情况下使用。操作数据库失败时使用的异常。
2023-07-02 19:55:43 182
原创 mybatis web使用01
在 "New Module" 窗口中,选择左侧 "Maven" 选项。勾选 "Create from archetype",然后从列表中选择 "org.apache.maven.archetypes:maven-archetype-webapp"。- **GroupId**: 项目的组织标识,通常为公司或组织的域名反转(如:com.example)- **ArtifactId**: 项目的独特标识,例如:my-webapp。- **Version**: 项目的版本号,默认为 1.0-SNAPSHOT。
2023-07-02 00:50:39 169
原创 mybatis模拟05
/调用 setter method,将查询结果的 一个字段的值 赋值给 resultType 对应的属性。//将 #{} 替换为?//调用 getter method 获取 属性值。//获取get 方法的 method name。//获取get 方法的 method name。//将查询结果的某个字段的值赋值给对应的属性。//通过 get 方法 获取对应的属性值。//通过 get 方法 获取对应的属性值。//获取 #{value} 中的 value。//获取 #{value} 中的 value。
2023-07-01 09:12:06 147
原创 mybatis模拟04
/创建SqlSession instance,将 this 作为参数传给SqlSession instance ,sqlSession 就可以使用 SqlSessionFactory 的属性。//分割后sqlArray[0]没有需要的内容,需要的内容再 #{ 之后,所以 从 sqlArray[0] 开始。,"#\\{[0-9A-Za-z_$]*}" 是匹配 #{} 的正则表达式。,"#\\{[0-9A-Za-z_$]*}" 是匹配 #{} 的正则表达式。//获取 #{value} 中的 value。
2023-06-25 21:36:51 255
原创 mybatis模拟02
The build method of SqlSessionFactoryBuilder 的作用是通过配置文件的输入流来解析配置文件,根据配置文件的内容创建相应的SqlSessionFactory 实例对象。MappedStatement :封装mapper 文件中的一个sql标签的信息。
2023-06-24 15:48:03 210
原创 mybatis模拟01
基于 DataSource 规范,可以用不同的数据库连接池实现替换底层的数据库驱动程序,从而提供更好的连接管理和性能优化。通过使用 DataSource 接口,可以在应用程序中配置和管理数据库连接池,并通过获取连接对象执行 SQL 查询和更新操作。通过使用 DataSource 接口,可以实现数据库连接的池化管理,提高数据库操作的性能和效率。2. `getConnection(username, password)`:以指定的用户名和密码获取一个数据库连接对象。这样可以实现基于身份验证的数据库连接。
2023-06-23 21:42:03 369
原创 dom4j解析 mybatis config XML文件
这个方法在dom4j中是常用的解析XML文档的方式之一,适用于处理较大的XML文件,因为它可以边读取边解析,避免将整个XML文档加载到内存中。综上所述,Jaxen是一个用于XPath查询的Java库,它提供了一种简单和强大的方式来在XML文档中进行查询和筛选。总的来说,dom4j是一个功能强大且易于使用的XML解析库,可以帮助开发者轻松地处理和操作XML文档,包括解析、读取、查询、创建和生成XML文档,以及验证等功能。它提供了丰富的选择器和操作符,使得在XML文档中选择和定位节点更加灵活和精确。
2023-06-22 15:35:33 266
原创 mybatis 配置文件
这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。id:给当前环境一个唯一标识,该标识用在environments的default后面,用来指定默认环境的选择。default属性:表示默认使用的是哪个环境,default后面填写的是environment的id。如果没有管理事务的容器,则没有事务。
2023-06-19 21:05:06 305
原创 mybatis02 CRUD
Car{id=null, carNum='null', brand='丰田霸道', guidePrice=32.0, produceTime='2020-11-11', carType='燃油车'}Car{id=null, carNum='null', brand='大众速腾', guidePrice=30.0, produceTime='2020-11-11', carType='燃油车'}
2023-06-18 12:51:38 164
原创 MyBatis工具类SqlSessionUtil的封装
2023-06-17 18:04:29.569 [main] DEBUG car.insertCar - ==> Preparing: insert into t_car (id,car_num,brand,guide_price,produce_time,car_type) values (null,'102','霸图',50.30,'2024-11-05','新能源')
2023-06-17 19:22:36 674
原创 MyBatis junit 日志框架logback
2023-06-17 14:03:33.176 [main] DEBUG car.insertCar - ==> Preparing: insert into t_car (id,car_num,brand,guide_price,produce_time,car_type) values (null,'102','皇风',40.30,'2024-10-05','新能源')引入日志框架的目的是为了看清楚mybatis执行的具体sql。--日志文件输出的文件名-->-- junit依赖 -->
2023-06-17 17:39:29 2279
原创 MyBatis01
pom.xml mybatis – MyBatis 3 | 简介要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryB
2023-06-16 06:47:25 243
原创 spring Mybatis
6月 11, 2023 2:17:03 下午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info。放在类的根路径下,只开启日志,其他配置到spring.xml中。mapper.xml 与mapper接口同名且同目录下。信息: {dataSource-1} inited。mybatis-config.xml配置文件。jdbc.properties配置文件。spring.xml配置文件。service接口实现类。
2023-06-11 17:04:03 561
原创 Spring对JUnit的支持
3. 导入依赖:使用 `@RunWith(SpringJUnit4ClassRunner.class)` 需要导入 JUnit 4.x 和 Spring Test 相关的依赖,而使用 `@ExtendWith(SpringExtension.class)` 需要导入 JUnit 5.x 和 Spring Test 相关的依赖。在使用 JUnit 5.x 的情况下,建议使用 `@ExtendWith(SpringExtension.class)` 注解来实现 Spring 的整合。
2023-06-10 19:51:14 1015
原创 spring 只读事务 设置异常回滚事务
不使用 @Transactional(noRollbackFor = NullPointerException.class)将当前事务设置为只读事务,在该事务执行过程中只允许select语句执行,delete insert update均不可执行。表示发生NullPointerException或该异常的子类异常不回滚,其他异常则回滚。表示只有发生RuntimeException异常或该异常的子类异常才回滚。发生NullPointerException异常时不回滚。事务回滚,数据未更新。
2023-06-10 19:14:55 1264
原创 spring 事务超时
再最后一条DML语句之前,休眠20秒, 会计入 timeout 时间之内,事务超时,回滚。如果最后一条DML语句后面还有很多业务逻辑,这些业务代码执行的时间不被计入超时时间。表示超过10秒如果该事务中所有的DML语句还没有执行完毕的话,最终结果会选择回滚。这里睡眠的 20 秒在最后一条DML语句之后,不计入 timeout 时间之内。表示设置事务的超时时间为10秒。默认值-1,表示没有时间限制。
2023-06-10 17:11:54 3472
springboot文件上传云服务器出错,无法写入磁盘
2021-05-28
springboot文件上传到云服务器错误?
2021-05-27
springboot项目部署到阿里云服务器后文件上传功能无法实现,如何解决?
2021-05-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人