自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM内存分配机制

如果这个对象覆盖了finalize方法,finalize方法是对象脱逃死亡命运的最后一次机会,如果对象要在finalize()中成功拯救自己,只要重新与引用链上的任何的一个对象建立关联即可,譬如把自己赋值给某个类变量或对象的成员变量,那在第二次标记时它将移除出“即将回收”的集合。JDK7之后默认开启。JVM内存分配是在堆上进行分配,当对象没有被引用的时候,需要依靠GC进行回收内存,如果对象的数量较多的时候,会给GC带来较大的压力,也间接影响了应用的性能。软引用在实际中有重要的应用,例如浏览器的后退按钮。

2024-03-07 20:18:15 729 1

原创 T01类加载机制

加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表整个类的java.lang.Class对象,作为方法区整个类的各种数据的访问接口。加载某个类的时会先为委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类路径下查找并载入目标类。上面的类加载的过程主要是通过类加载器来实现的,Java里有如下的类加载器。

2024-03-07 20:15:05 1034

原创 并发锁机制之深入理解synchronized

从偏向锁的加锁过程中可以看出,当只有一个线程反复进行进入同步块时,偏向锁带来的性能开销基本可以忽略,但是当有其他线程尝试获取锁时,就需要等到safe ponit,再将偏向锁撤销为无锁状态或升级为轻量级,会消耗一定的性能,所以在多线程竞争频繁的情况下,偏向锁不仅不能提高性能,还会导致性能下降。对于没有锁竞争的场合,偏向锁有很好的优化效果。由于对象需要存储的运行时数据很多,考虑到虚拟机的内存使用,markOop被设计成一个非固定的数据结构,以便在极小的空间存储尽量多的数据,根据对象的状态复用自己的存储空间。

2024-02-24 11:04:29 646

原创 并发编程之深入理解Java线程

join可以理解成线程合并,当在一个线程调用另一个线程的join方法时,当前线程阻塞等待被调用join方法的线程执行完毕才能继续执行,所以join的好处能够保证线程的执行顺序,但是如果调用线程的join方法其实是已经失去了并行的意义,虽然存在多个线程,但是本质上还是串行的,最后join的实现是基于等待通知机制的。上下文切换通常是计算机密集型的。程序计数器是一种专门的寄存器,它指示CPU在其指令序列中的位置,并保存着正在执行的指令的地址或下一条要执行的指令的地址,这取决于具体的系统。

2024-02-22 23:00:37 741

原创 并发List、Set、ConcurrentHashMap底层原理

在HashMap中,先得到key的hashcode,hashcode是一个数字,然后通过hashcode & (table.length - 1) 运算得到一个数组下标index,是通过与运算计算出来一个数组下标的,而不是通过取余,与运算相比于取余运算速度更快,但是也有一个前提条件,就是数组的长度得是一个2的幂次方数。位置来访问记录,以加快查找的速度。特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

2024-02-19 23:22:57 989

原创 并发编程之深入理解JVM&并发三大特性

Java并发知识相关

2024-02-17 23:26:33 919

原创 T06垃圾收集器G1&ZGC

它默认的停顿目标为两百毫秒, 一般来说, 回收阶段占到几十到一百甚至接近两百毫秒都很正常, 但如果我们把停顿时间调得非常低, 譬如设置为二十毫秒, 很可能出现的结果就是由于停顿目标时间太短, 导致每次选出来的回收集只占堆内存很小的一部分, 收集器收集的速度逐渐跟不上分配器分配的速度, 导致垃圾慢慢堆积。安全点就是指代码中一些特定的位置,当线程运行到这些位置时,它的状态是确定的,这样JVM就可以安全的进行一些操作,比如GC等,所有GC不是想什么时候做就立刻触发的,是需要等待所有线程运行到安全点之后才能触发。

2024-02-03 16:56:18 616

原创 T07GC调优(一)

一般电商架构可能会使用多级缓存架构,就是redis加上JVM级缓存,有时可能为了图方便对于JVM级缓存就简单使用一个hashmap,于是不断往里面放缓存数据,但是很少考虑这个map的容量问题,结果这个缓存map越来越大,一直占用着老年代的很多空间,时间长了就会导致full gc非常频繁,这就是一种内存泄漏,对于一些老旧数据没有及时清理导致一直占用着宝贵的内存资源,时间长了除了导致full gc,还有可能导致OOM。然后利用jstack和jvisualvm来定位CPU使用较高的代码。

2024-01-28 10:21:33 900

原创 T05垃圾收集算法与垃圾收集器ParNew & CMS

对于对象年龄应该为多少才移动到老年代比较合适,本例中一次minor gc要间隔二三十秒,大多数对象一般在几秒内就会变为垃圾,完全可以将默认的15岁改小一点,比如改为5,那么意味着对象要经过5次minor gc才会进入老年代,整个时间也有一两分钟了,如果对象这么长时间都没被回收,完全可以认为这些对象是会存活的比较长的对象,可以移动到老年代,而不是继续一直占用survivor区空间。也可以反过来,标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。当前虚拟机的垃圾收集都采用分代收集算法。

2024-01-28 09:54:55 804

原创 T04JVM内存分配机制

如果这个对象覆盖了finalize方法,finalize方法是对象脱逃死亡命运的最后一次机会,如果对象要在finalize()中成功拯救自己,只要重新与引用链上的任何的一个对象建立关联即可,譬如把自己赋值给某个类变量或对象的成员变量,那在第二次标记时它将移除出“即将回收”的集合。JDK7之后默认开启。JVM内存分配是在堆上进行分配,当对象没有被引用的时候,需要依靠GC进行回收内存,如果对象的数量较多的时候,会给GC带来较大的压力,也间接影响了应用的性能。软引用在实际中有重要的应用,例如浏览器的后退按钮。

2024-01-27 22:36:34 999

原创 03Spring底层架构核心概念

BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。一个BeanPostProcessor可以在任意一个Bean的初始化前和初始化之后去额外做一些用户自定义的逻辑。可以通过设置BeanDefinition设置一个Bean的其他属性。在Spring中,可以通过以下几种方式定义Bean。先定义一个MessageSource。为什么会有FactoryBean?FactoryBean的使用场景。

2024-01-21 23:06:15 993

原创 02手写Spring底层原理

【代码】02手写Spring底层原理。

2024-01-21 16:26:15 377

原创 07深入理解MVCC与BufferPool缓存机制

对于删除的情况可以认为是update的特殊情况,会将版本链上的最新的数据复制一份, 然后将trx_id修改成删除操作的trx_id,同时在该条记录的头信息(record header)里的(deleted_flag)标记位写上true,来表示当前记录已经被删除,在查询时按照上面的规则查找对应的记录如果delete_flag标记位为true,意味着已被删除,则不返回数据。同样的SQL查询语句在一个事务里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。

2024-01-10 20:06:37 758 1

原创 01Spring底层核心原理解析

AOP进行动态代理,在创建一个Bean的过程,Spring在最后一步会去判断当前正在创建的这个Bean是不是需要进行AOP,如果需要则会进行动态代理。当我们从Spring容器中得到UserService的Bean对象时,拿到的就是UserServiceProxy对象,也就是代理对象。@Transaction,就表示该方法在调用时会开启Spring事务,而这个方法所在的类所对应的Bean对象会是该类的代理对象。AnnotationConfigApplicationContext的构造方法会做的事情。

2024-01-09 21:16:03 843

原创 06深入理解MySQL事务隔离级别与锁机制

脏读。

2024-01-06 14:41:07 833 1

原创 05SQL索引优化(2)

并且 join_buffer 里的数据是无序的,因此对表 t1 中的每一行,都要做 100 次判断,所以内存中的判断次数是 100 * 10000=对于myisam存储引擎的表不做带where条件的count查询性能很好,因为myisam存储引擎的表的总行数会被MySQL存储在磁盘上,查询不需要计算。把驱动表的数据读入到join_buffer中,然后扫描被驱动表,把被驱动表的每一行取出来跟join_buffer中的数据做对比。exists:当A表的数据集小于B表的数据集时,exists优于in。

2024-01-06 09:55:10 791 1

原创 04SQL索引优化(一)

以社交场景APP来举例,我们一般会去搜索一些好友,这里面就涉及到对用户信息的筛选,这里肯定就是对用户user表搜索了,这个表一般来说数据量会比较大,我们先不考虑分库分表的情况,比如,我们一般会筛选地区(省市),性别,年龄,身高,爱好之类的,有的APP可能用户还有评分,比如用户的受欢迎程度评分,我们可能还会根据评分来排序等等。一般来说,通过这么一个多字段的索引是能够过滤掉绝大部分数据的,就保留小部分数据下来基于磁盘文件进行order by语句的排序,最后基于limit进行分页,那么一般性能还是比较高的。

2024-01-04 15:45:15 321 1

原创 02Explain介绍以及索引最佳实践

使用Explain关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈,在select语句执行增加explain关键字,MySQL会在查询上社招一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。分析创建表语句Demo。

2024-01-01 18:14:03 961

原创 01深入MySQL索引

MySQL底层实现以及原理

2023-12-26 23:33:35 347 1

原创 Stream流式处理

【代码】Stream流式处理。

2023-12-03 16:27:47 32 1

原创 jvm相关

链接阶段:验证 -> 准备 -> 解析。加载阶段:通过IO操作读入文件的过程。类加载系统整体工作过程。

2023-11-09 23:25:14 37 1

原创 Docker安装应用

Docker安装各种应用

2023-10-22 23:39:11 30 1

原创 Java八股文

java面试题

2023-10-15 23:43:16 58

原创 java网络编程【实现简单的收发信息】

java网络编程

2022-08-08 21:55:49 350

原创 flex布局学习

flex的相关知识

2021-12-06 23:25:44 116

原创 git常见操作

git

2021-12-05 18:18:42 196

转载 java 实现线性结构

实现数组对应的代码package com.wei.array;import java.lang.reflect.Array;import java.sql.PreparedStatement;/** * @author www * @date 2021/11/3 14:32 * @description: 实现数组 */public class MyArray { private int[] data; private int size; /**

2021-11-04 11:11:17 129

原创 Java对象按照某个字段值进行排序

1 实现Comparetor接口对应的代码:package com.wei.test;import java.util.Arrays;/** * @author www * @date 2021/11/2 20:52 * @description: TODO */public class Cat1 implements Comparable<Cat1> { private String name; private int age; public C

2021-11-03 11:07:50 2135

原创 经典排序算法-JAVA实现

选择排序算法描述    首先,找到数组中最小的那个元素,其次,将它和数据中的第一个元素交换位置(如果第一个元素就是最小元素那么他就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换位置。如此往复,直到将整个数据进行排序。代码实现import com.sun.jdi.PathSearchingVirtualMachine;import java.util.ArrayList;import java.util.Arrays;im

2021-11-02 22:27:11 67

原创 mybatis编写动态SQL

      Mybati的动态SQL在XML中支持的几种标签。ifchoose(when、otherswise)trim(where、set)foreachbind数据准备INSERT INTO `sys_user` (`id`, `user_name`, `user_password`, `user_email`, `user_info`, `head_img`, `create_time`) VALUES (1, 'admin', '123456', 'a

2021-10-19 22:27:35 78

原创 mybatis的基础配置

mybatis的基础配置pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://m

2021-10-19 15:11:46 103

原创 Mybatis使用Druid的相关配置

pom.xml文件<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.14</version> </dependency>mybatis-config.xml文件<environme.

2021-10-13 21:12:33 1212

空空如也

空空如也

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

TA关注的人

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