自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 虚拟机性能监控、故障处理工具

<clint>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的 语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序决定的,静态语句块中只能访问 到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。这种模糊的结论在由0和1构成的计算机世界中算是个 比较稀罕的事件,产生这种模糊结论的主要原因是字面量天生的模糊性,它不需要定义,所以字面量 就没有显式的静态类型,它的静态类型只能通过语言、语法的规则去理解和推断。

2024-09-12 10:28:21 774

原创 垃圾收集器与内存分配策略

3.1 概述·哪些内存需要回收? ·什么时候回收? ·如何回收?3.2 对象已死?3.2.1 引用计数算法在对象中添加一个引用计数器,每当有一个地方 引用它时,计数器值就加一;当引用失效时,计数器值就减一。原理简单,判定效率也很高。必须要配合大量额外处理才能保证正确地工作。3.2.2 可达性分析算法这个算法的基本思路就是通过 一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过 程所走过的路径称为“引用链”(Reference

2024-09-12 10:25:34 437

原创 Java内存区域与内存溢出异常解析

如果不是内存泄漏,换句话说就是内存中的对象确实都是必须存活的,那就应当检查Java虚拟机 的堆参数(-Xmx与-Xms)设置,与机器的内存对比,看看是否还有向上调整的空间。由直接内存导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见有什么明显的异常情况,如果发现内存溢出之后产生的Dump文件很小,而程序中又直接或间接使用了 DirectMemory(典型的间接使用就是NIO),那就可以考虑重点检查一下直接内存方面的原因。另外一部分是类型指针,即对象指向它的类型元数据的指针。

2024-09-12 10:24:33 1104

原创 JAVA并发编程知识10

如果首个锁是读锁,随后的其他读请求可以并发获得读锁,但写请求必须等待所有读锁释放。如果首个锁是写锁,则后续的读锁和写锁请求都必须等待该写锁释放。在持有写锁的情况下,线程可以获取读锁,然后释放写锁,这通常用于在修改数据后,仍需要从数据结构中读取数据时。在公平锁模式下,锁倾向于授予等待时间最长的线程,而在非公平模式下,锁可能会授予请求它的任何线程。:如果锁已经被其他线程持有,当前请求锁的线程将被阻塞,直到锁被释放。在读多写少的场景下提高了性能,但在竞争激烈的环境中,读锁的获取和释放可能比预期的要高。

2024-09-12 10:09:59 505

原创 JAVA并发编程9

它不会立即关闭线程池,而是不再接受新的任务,一旦所有已提交的任务都完成执行后,才会关闭线程池。方法会尝试立即关闭线程池,它会尝试停止所有正在执行的任务,停止处理正在等待的任务,并返回等待执行的任务列表。即使线程是空闲的,线程池也会尝试维持其线程数量不低于这个值。这个方法会阻塞,直到所有任务完成或者线程池关闭,或者线程被中断。方法尝试立即停止所有正在执行的活动任务并返回未执行任务的列表。对象,通过这个对象可以获取任务的返回值或者任务的状态。方法用于执行给定的任务集合,并返回一个表示任务结果的。

2024-09-12 10:05:08 386

原创 JAVA并发编程知识8

这些类通过减少锁的使用提高了并发操作的效率,适用于高并发的统计和计数应用、状态管理等。操作的执行逻辑是:只有当内存位置的当前值与预期原值相同时,将内存位置的值更新为新值。这一操作是原子的,即在完成过程中不会被其他线程打断。这是通过使用一系列的原子操作实现的,例如,递增、递减和通过期望值进行更新。它能保证对对象引用操作的原子性,常用于无锁设计中的对象状态更新。提供了一种不使用锁的方式来实现对共享资源的同步访问,这可以减少线程阻塞和唤醒的开销。的组合来实现,如果对象在两个线程中被交替更改,它能检测到。

2024-09-12 10:04:26 450

原创 JAVA并发编程知识6

关系是一个保证,在这个关系中,一个操作的结果(内存写操作)对于另一个操作(内存读操作)是可见的,并且第一个操作在第二个操作之前完成。)在读写操作中如何与计算机的主内存和内部缓存交互,以及线程如何通过内存进行交互。可以确保单个读取和写入操作的可见性,但它不保证复合操作的原子性。可见性:一个线程对共享变量的修改,能够及时地被其他线程看到。原子性:一个或多个操作完整地执行,不会被其他线程中断。有序性:代码执行的顺序按照一定的规则进行,防止指令重排。程序代码中,每个操作(这里指的是指令)之前的操作都。

2024-09-12 09:57:29 343

原创 JAVA并发编程知识5

当线程在等待锁时,不会进入阻塞状态,因此不会引发上下文切换,可以减少线程调度的开销。对于锁持有时间非常短的情况,自旋锁可以让线程快速获得锁并继续执行,减少了线程阻塞和唤醒的时间。偏向锁是一种进一步优化,适用于只有一个线程访问同步块的场景。两个线程试图相互发送消息,当一个线程发送消息时,为了避免冲突,另一个线程决定延迟发送,然后两者不断重复这一过程。循环等待:存在一个线程—资源的循环链,每个线程持有下一个线程所需的至少一个资源。会遍历堆中所有的锁对象,并将那些原本偏向于原线程的锁重偏向于新请求锁的线程。

2024-09-12 09:52:38 668

原创 JAVA并发编程知识4

即使是同一个实例,两个静态同步方法也会串行执行,因为它们锁定的是同一个。锁定的对象不同(一个是类对象,另一个是实例对象),所以两个方法可以并行执行。synchronized (this) { // 锁定实例对象。是不同的对象,所以每个线程锁定的是不同的对象。对象,所以即使有多个实例,访问静态同步方法也会串行执行。静态同步方法和实例同步方法锁定的对象不同(静态方法锁定。对象,实例方法锁定实例对象),所以它们可以并行执行。一个同步静态方法,一个同步实例方法,一个对象。同步方法和非同步方法,一个对象。

2024-09-12 09:46:51 461

原创 JAVA并发编程知识3

如果 t1 线程中的某部分代码是在 synchronized(obj) 块中执行,而 t2 线程访问相同资源时没有使用 synchronized(obj),那么 t2 线程在访问这些资源时不会受到锁 obj 的保护。这可能导致数据不一致的问题,因为 t1 线程在保持锁的情况下可能正在修改这些资源,而 t2 线程同时也在访问或修改,从而引发竞态条件。这样做的效果是,一旦一个线程进入了这个同步块,它将执行整个循环,期间不会释放锁,也就不会有其他线程能够进入任何使用同一锁 obj 的同步代码块。

2024-09-12 09:45:49 927

原创 JAVA并发编程知识2

然后,可以创建一个 Thread 类的实例,把 Runnable 类的实例传递给 Thread 的构造器,并通过这个 Thread 实例调用 start() 方法来启动线程。在多线程环境下,每个线程维护自己的栈,线程之间的栈是独立的。- 获取线程的状态,例如 `NEW`, `RUNNABLE`, `BLOCKED`, `WAITING`, `TIMED_WAITING`, `TERMINATED`。- 定义线程执行的操作。`join()` 调用会阻塞当前线程,直到调用 `join()` 的线程结束运行。

2024-09-11 16:40:46 373

原创 JAVA并发编程知识1

并行是指多个处理器或多核处理器同时执行多个任务或一个任务的不同部分。在并行计算中,任务被分解为可以同时运行的更小的独立部分,这些部分运行在不同的处理器或不同的处理器核心上。所有并行的系统都是并发的,但并非所有并发的系统都是并行的。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程可以并发多个线程,每条线程并行执行不同的任务。进程是操作系统进行资源分配和调度的一个独立单位,是应用程序在执行过程中的一个实例。

2024-09-11 16:39:44 237

原创 TCP/IP经验5

在TCP连接中,每一方都维护一个窗口大小,这个窗口大小是根据对方的接收能力(接收缓冲区剩余空间)来调整的。当TCP关闭一个连接并发送最后一个ACK后,该连接进入TIME-WAIT状态,定时器启动。重传定时器是TCP中最关键的定时器之一,用于控制丢失数据包的重传。当TCP发送一个段后,它启动重传定时器,如果在定时器到期之前没有收到对该段的确认(ACK),TCP会重新发送该段。目的:确保最后一个ACK能够到达对方,允许旧的重复数据包在网络中消逝,从而防止将来的连接受到干扰。触发条件:接收方窗口大小为零时启动。

2024-09-11 16:33:39 375

原创 TCP/IP经验4

Nagle算法是另一种TCP协议中用于优化网络通信的技术,主要通过减少在网络上发送的小数据包的数量来减少网络拥塞。如果TCP连接上有未确认的小数据包存在,那么不允许发送新的小数据包,直到所有之前的数据包都已经得到确认。窗口大小是指在一个给定的时间内,不需要接收方发送确认(ACK),发送方可以发送的数据量。发送窗口:确定了发送方可以发送的数据量,未被确认的数据量不能超过窗口大小。接收窗口的大小直接影响发送方的发送窗口大小,因此控制着数据流的速率和量,确保接收方不会因为接收到过多数据而导致缓冲区溢出。

2024-09-11 16:33:01 421

原创 TCP/IP经验3

RARP的使用场景主要是在早期的无盘工作站,这些工作站在启动时没有存储IP配置信息的能力,因此需要通过网络获取其IP地址。然而,随着DHCP(动态主机配置协议)的推出,RARP的使用已大大减少,因为DHCP提供了更为复杂和功能完善的配置服务。当一台主机需要向同一局域网内的另一台主机发送数据包时,它会使用ARP来查询目标IP地址对应的物理地址。主机发送一个ARP请求广播包到网络上的所有设备,询问拥有特定IP地址的设备的MAC地址。协议的网络诊断命令,用来追踪数据包在到达指定主机的过程中经过的路由器。

2024-09-11 16:28:50 339

原创 TCP/IP经验2

结束确认:发起关闭的一方(客户端)接收到对方的FIN后,必须发送一个ACK段,确认收到了对方的FIN。ACK Number:服务器的响应中的确认号(ACK Number)设置为客户端的初始序列号加1,表示服务器期望接收客户端下一个数据段的序列号。同时,主机B 收到 主机A 的 SYN 包后,也发送一个 SYN-ACK 包,其中 ACK=x+1,并再次包含自己的 SYN=y。发起方完成传输:一旦接收方(服务器)也完成了数据的发送,它会发送自己的FIN段,以告知发起方(客户端),它也已经没有数据要发送。

2024-09-11 16:27:27 617

原创 TCPIP经验1

一种核心的网络通信协议,它在互联网协议套件中与IP协议(互联网协议)一起工作,提供了一种可靠的、有序的和错误检测的数据传输服务。是一个无连接的协议,它提供了一种不需要在数据传输前建立连接的方式,使得它的速度比其他需要建立连接的协议(如。协议示例:以太网(Ethernet)、点对点协议(PPP)、帧中继(Frame Relay)。协议示例:超文本传输协议(HTTP)、简单邮件传输协议(SMTP)、文件传输协议(FTP)。协议是无连接的、使用广播的方式工作的,它是局域网中不可缺少的协议,确保。

2024-09-11 16:24:03 373

原创 MYSQL优化与性能提高10

在查询中使用变量存储中间结果,减少计算开销。

2024-09-09 14:53:28 250

原创 MYSQL优化与性能提高9

在同一个表上同时查询和更新可能导致性能问题。优化器选择特定的优化策略,从而提高查询性能。:优化器在某些情况下不能有效利用索引合并。:UNION操作的性能可能不如单一查询。:优化器不能总是正确处理等值传递的情况。:有时优化器不能有效优化关联子查询。:在某些查询中不能使用松散索引扫描。:在可能的情况下,将子查询重写为。使用覆盖索引:减少数据行扫描。延迟关联:仅在最后一步才进行。对查询的并行执行支持有限。:在查询时,只在需要时使用。:优化器有时不能有效优化。在同一个表上查询和更新。优化COUNT()查询。

2024-09-09 14:48:26 392

原创 MYSQL优化与性能提高8

查询缓存可以加速相同查询的执行,但也有局限性。当向MYSQL发送请求的时候,都做了什么。数据和索引的统计信息。

2024-09-09 14:40:29 269

原创 MYSQL优化与性能提高7

为什么查询速度会慢查询速度慢的原因通常包括以下几方面:未优化的查询语句:如没有使用索引、使用低效的查询方式等。数据库设计问题:如表结构不合理、范式化过度或不足等。系统资源限制:如CPU、内存或磁盘I/O不足。并发问题:高并发访问导致的锁竞争和资源争用慢查询基础:优化数据访问是否向服务器请求了不需要的数据MySQL是否在扫描额外的记录。

2024-09-09 14:17:42 253

原创 MYSQL优化与性能提高6

INNODB和MYISAM的不同覆盖索引覆盖索引用于查询只从索引中读取数据,而不访问表中的数据行。这样可以减少I/O操作,提高查询速度。覆盖索引通常包含查询中所有需要的列。可以避免回表这一情况,使用索引扫描来做排序通过索引扫描进行排序可以避免额外的排序操作,提高查询效率。适当设计索引,使其能覆盖ORDER BY子句中的列,可以利用这一策略。压缩(前缀压缩)索引在MyISAM存储引擎中,可以使用前缀压缩索引来减少索引占用的存储空间。

2024-09-09 14:04:15 1065

原创 MYSQL优化与性能提高5

然而,需要注意多列索引的顺序,应根据查询的常用方式来决定,以使查询最大程度地利用索引。应该将选择性较高的列放在索引的最前面,这样可以更好地利用索引的过滤效果,提高查询效率。索引应该创建在独立的列上,而不是表达式或函数计算结果的列上。特点:逆序索引是一个特殊类型的索引,通过将索引键的字节顺序反转来提高某些查询的性能。中最常见的索引类型,适用于大多数存储引擎。适用场景:适用于需要对大文本数据进行搜索的应用,例如:搜索引擎、博客搜索功能等。关于某个列的范围索引后,右侧的列都无法使用索引优化查找。

2024-09-09 13:57:22 438

原创 MYSQL优化与性能提高4

选择标识符一些选择技巧糟糕的选择Schema设计的缺陷(陷阱)太多的列,太多的关联(尽量少关联),全能的枚举,变相的枚举,为了避免NULL强行设计范式和反范式范式的优点和缺点范式化的数据库设计旨在消除数据冗余和提高数据一致性。通过将数据拆分到不同的表中,范式化可以减少重复数据,从而节省存储空间并降低数据更新时的复杂性。然而,范式化也有其缺点,主要是可能导致查询变得复杂,因为需要进行多表连接来获取数据。这种复杂性可能导致查询性能下降,特别是在高并发的环境中反范式的优点和缺点。

2024-09-09 13:39:48 374

原创 MYSQL优化与性能提高3

事务提交时,新版本的数据成为最新版本,旧版本被标记为过期(但不会立即删除,以支持并发读取)。回滚时,未提交的修改会被丢弃,旧版本的数据仍然有效。当事务开始时,系统为该事务创建一个数据快照,这个快照代表事务开始时数据库的状态。新版本对其他正在进行的事务不可见,只有在事务提交后才对新开始的事务可见。类型实际上是以整数存储的,内部存储的是一个整数索引,而不是字符串本身,这样可以节省存储空间。数据项一旦写入数据库,其版本是不可变的。每个数据项有多个版本,每个版本都有一个唯一的时间戳或事务ID,用于区分不同的版本。

2024-09-09 13:11:27 721

原创 MYSQL优化与性能提高2

1. 锁机制MySQL的锁机制是并发控制的核心,它有以下几种类型:表锁 (Table Locks):读锁 (READ LOCK):多个事务可以同时读取,但不能写入。写锁 (WRITE LOCK):锁定表,只有持有锁的事务可以读写,其他事务无法读写。行锁 (Row Locks):共享锁 (Shared Locks):允许多个事务同时读取但不允许写入。排他锁 (Exclusive Locks):事务独占行锁,不允许其他事务读写。2. 事务隔离级别。

2024-09-09 12:07:39 358

原创 MYSQL优化与性能提高1

如上图所示,展示了MYSQL由客户端到存储引擎的全逻辑架构组成。

2024-09-09 11:06:59 162

空空如也

空空如也

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

TA关注的人

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