自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 问答 (1)
  • 收藏
  • 关注

原创 【Redis】发布与订阅

除订阅频道外,客户端还可以通过执行PUBSCRIBE命令订阅一个或多个模式,从而成为这些模式的订阅者,每当有其它客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,还会被发送给所有与这个频道相匹配的模式的订阅者。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者,每当有其它客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。执行UNSUBCRIBE命令订阅频道。执行PSUBSCRIBR命令订阅模式。执行SUBCRIBE命令订阅频道。.....

2022-08-10 13:46:39 511 1

原创 【Redis】集群

因为集群中的每个节点都会将自己的solts数组通过消息发送给集群中的其它节点,并且每个接收到slots数组的节点都会将数组保存到相应节点的clusterNodw结构里面,因此,集群中的每个节点都会知道数据库中的16384个槽分别被指派给了集群中的哪些节点。集群中的每个节点都会定期向集群中其他节点发送PING消息,以此来检测对方是否在线,如果接受PING消息的节点没有在规定时间内,向发送PING消息的节点返回PONG消息,那么发送PING消息的节点就会接受PING消息的节点标记为疑似下线。.........

2022-08-10 13:46:25 461

原创 【Redis】Sentinel

当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,最先向目标Sentinel发送设置要求的源Sentinel将成为目标Sentinel的局部领头Sentinel,而之后接受到的所有设置要求都会被拒绝,如果由某个Sentinel被半数以上的Sentinel设置成了局部领头Sentinel,那么这个Sentinel成为领头Sentinel,并由这个Sentinel对下线主服务器执行故障转移操作。根据这些信息,Sentinel会对从服务器的实例结构进行更新。.........

2022-08-10 13:46:11 398

原创 【Redis】复制

为了让主从服务器再次回到一致状态,主服务器需要对从服务器执行命令传播操作:主服务器会将自己执行的写命令,也即是造成主从服务器不一致的那条写命令,发送给从服务器执行,当从服务器执行了相同的写命令后,主从服务器将再次回到一致状态,:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态。主服务器会将自己的运行ID传送给从服务器,而从服务器则会将这个运行ID保存起来。...

2022-08-09 17:15:00 461

原创 【Redis】服务器

Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。在完成对服务器状态server变量的初始化之后,服务器需要载入RDB文件或者AOF文件,并根据文件记录的内容来还原服务器的数据库状态,Redis服务器中的severCron函数默认每隔100毫秒执行一次,这个函数负责管理服务器的资源,并保持服务器自身的良好运转。根据客户端状态的argv[0]参数,在命令表中查找参数所指定的命令。至此,服务器初始化工作完成。.

2022-08-09 17:00:00 216

原创 【Redis】客户端

如果输出缓冲区的大小超过了软性限制所设置的大小,但小于硬性限制, 那么服务器将使用客户端状态结构的obuf_soft_limit_reached_time属性记录下客户端到达软性限制的起始时间;如果客户端时通过网络连接与服务器进行连接的普通客户端,那么在客户端使用connect函数连接到服务器时,服务器就会调用连接事件处理器,为客户端创建相应的客户端状态,并将这个新的客户端状态添加到服务器状态结构clients链表的末尾。,每个客户端都有两个输出缓冲区可用,一个缓冲区大小固定,另一个缓冲区的大小可变。..

2022-08-09 16:45:00 330

原创 【Redis】事件

当Redis服务器进行初始化时,程序会将这个连接应答处理器和服务器监听套接字的AE_READABLE事件关联起来,当有客户端用sys/socket.h/connect函数连接服务器监听套接字的时候,套接字就会产生AE_READABLE事件,引发连接应答处理器执行。当服务器有命令恢复需要传送给客户端时,服务器会将客户端套接字的AE_WRITABLE事件和命令回复处理器关联起来,当客户端准备好接收服务器传回的命令回复时,就会产生AE_WRITABLE事件,引发命令回复处理器执行,并执行相应的套接字写入操作。..

2022-08-09 16:30:00 263

原创 【Redis】AOF持久化

因为服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以在服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将aof_buf缓冲区中的内容写入和保存到AOF文件里面。通过AOF重写功能,Redis服务器可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个AOF文件所保存的数据库状态相同,但新AOF文件不会包含任何浪费空间的冗余命令,所以新AOF文件的体积通常会比旧AOF文件的体积要小很多。...

2022-08-09 16:15:00 198

原创 【Redis】RDB持久化

Redis的服务器周期性操作函数serverCron默认每隔100ms就会执行一次,该函数用于对正在运行的服务器进行维护,其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足,就会执行BGSAVE。RDB文件载入工作是在服务器启动时自动执行的,只要Redis服务器在启动时检测到RDB文件存在,它就会自动载入RDB文件。,它将自己的数据库状态储存在内存里面,所以一旦服务器进程退出,服务器中的数据库状态也会消失不见。在BGSAVE命令执行期间,客户端发送的BGSAVE命令会被服务器拒绝。...

2022-08-09 16:00:00 316

原创 【Redis】数据库

在过期键比较多的情况下,删除过期键这一行为可能会占用相当一部分CPU时间,在内存不紧张但是CPU时间非常紧张的情况下,将CPU时间用在删除和当前无关的过期键上,无疑会对服务器的响应时间和吞吐量造成影响。放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除改键,如果没有过期,就返回该键。在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作。每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。...

2022-08-09 11:52:57 133

原创 【Redis】对象

字符串对象值相对更加复杂,而一个共享对象保存的值越复杂,验证共享对象和目标对象是否相同所需的复杂度就会越高,消耗的CPU时间也会越多,因此,尽管共享更复杂的对象可以节约更多的内存,但受到CPU时间的限制,Redis只对包含整数值的字符串对象进行共享。Redis会在初始化服务器时,创建一万个字符串对象,这些对象包含了从0到9999的所有整数值,当服务器需要用到值为0到9999的字符串对象时,服务器就会使用这些共享对象,而不是新对象。字符串对象是Redis五种类型的对象中唯一一种会被其它四种对象嵌套的对象。..

2022-08-09 11:50:15 568

原创 【Redis】跳跃表、整数集合与压缩列表

如果在一个多个连续的、长度介于250字节到253字节之间的节点e1至eN的压缩列表中将一个长度大于等于254字节的新节点new设置为压缩列表的表头结点,那么程序就会不断地对压缩列表执行空间重分配操作,直至eN为止。只要我们拥有了一个指向某个节点起始地址的指针,那么通过这个指针以及这个节点的previous_entry_length属性,程序就可以一直向前一个节点回溯,最终到达压缩列表的表头结点。,成员对象较小的节点会排在前面(靠近表头的方向),而成员对象较大的节点则会排在后面(靠近表尾的方向),...

2022-08-09 11:45:19 472

原创 【Redis】简单动态字符串、链表与字典

SDS遵循C字符串以空字符结尾的惯例,保存空字符的1字节空间不计算在SDS的len属性中,并且为空字符分配额外的1字节空间,这么做的好处是SDS可以直接重用一部分C字符串函数库里面的函数。

2022-08-09 11:39:44 418

原创 【MySQL】查询性能优化

用户自定义变量是一个用来存储内容的临时容器,在连接MySQL的整个过程中都存在可以使用下面的SET和SELECT语句来定义他们正在上传…重新上传取消。

2022-08-08 21:45:00 2006

原创 【MySQL】创建高性能的索引

换句话说,底层存储引擎的操作是”从索引的开头开始获取满足条件actor_id

2022-08-08 21:15:00 670

原创 【MySQL】Schema与数据类型优化

例如IPv4,人们经常用VARCHAR(15)列来存储IP地址,然而,它们实际上是32位无符号整数,不是字符串,用小数点将地址分成四段的表示方法只是为了让人阅读容易,所以应该用无符号整数存储IP地址。可以存储精确的小数,也可以存储比 BIGINT 还大的整数,支持精确计算。当需要在枚举列表中增加一个新的值时,就要做一次ALTER TABLE操作,在MySQL5.0以及更早的版本中ALTER TABLE是一种阻塞操作,在后续版本中,如果不是在列表的末尾增加值也会一样需要ALTER TABLE。...

2022-08-08 21:00:00 454

原创 【MySQL】MySQL架构(二)

创建MyISAM表的时候,如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区(in-memory key buffer),只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入到磁盘。因此,若表上的索引较多的话,主键应当尽可能的小。1. InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。...

2022-08-08 20:30:00 813

原创 【网络协议】TCP的拥塞控制机制

通常在刚开始发送报文段时,先把拥塞窗口设置为一个最大报文段MSS的数值,而在每收到对上一轮报文段(,每次加倍后的报文段的个数,可能不止一个报文段)的确认后,就把拥塞窗口的数值。发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度,动态地变化,而发送窗口一般取拥塞窗口和对方给出的接收窗口的最小值。当拥塞窗口的值小于慢开始门限时,使用慢开始算法,一旦拥塞窗口的值大于慢开始门限的值,就改用拥塞避免算法。(有收到重复确认,说明后面的报文段都送达了,只有中间丢失的报文段没送达)。拥塞控制是一个全局性的过程。.

2022-08-08 20:00:00 559

原创 【MySQL】MySQL架构(一)

所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)。事务A、B并发执行时,当A事务update后,B事务select读取到A尚未提交的数据,此时A事务rollback,则B读到的数据是无效的"脏"数据。,也就是说一个写锁会阻塞其他的写锁和读锁,这是出于安全策略的考虑,只有这样,才能确保在给定的时间里,只有一个用户能执行写入,并防止其他用户读取正在写入的同一资源。前面描述的锁定都是隐式锁定,...

2022-08-08 15:59:25 625

原创 【网络协议】TCP中的四大定时器

以后每隔75秒发送一次,如果连续发送10次探测报文段后仍没有收到客户端的响应,服务器就认为客户端出现了故障,就可以终止这个连接。3、该探测报文发出后,会同时启动重传定时器,如果重传定时器的时间到期,还没有收到接收到发来的响应,则超时重传探测报文。2、对方在收到探测报文段后,在对该报文段的确认中给出现在的窗口值,如果窗口不为零,那么死锁的僵局就被打破了。在一定时间内没有收到对方的确认报文段,就重传发送的报文,并将计时器重置,如果收到确认报文,则撤销计时器。,则收到这个报文段的一方将坚持定时器的值。......

2022-08-08 15:52:44 395

原创 【网络协议】TCP的流量控制机制

设想一种情况,TCP接收方的缓存已满,而应用进程一次只从接收缓存中读取1字节(这样就使接收缓存空间仅腾出1字节),然后向发送方发送确认,并把窗口设置为1个字节(但发送的数据报为40字节长)。这样,网络的效率很低。我们考虑一种特殊情况,如果B在向A发送了零窗口报文段后不久,B的接收缓存又有了一些存储空间,于是B向A发送了一个rwnd=400的报文段,然而这个报文段在传送过程中丢失了,A就一直等待B发送非零窗口的报文通知,而B一直等待A发送数据,如果没有任何措施的话,这话死锁的局面会一直延续下去。...

2022-08-07 14:37:23 1803

原创 【网络协议】TCP的交互数据流和成块数据流

传输控制协议,位于传输层,提供一种可靠的,面向连接的数据传输服务应用程序被分割为适合传输的数据块,UDP不会,UDP只有与IP首部组成IP数据报时才会被IP分片。TCP发送一个报文段后,会启动一个计时器,如果固定时间内没有收到接收方的确认,则会重发一份报文段。TCP接收端收到发送端发送的数据报后,会返回一个确认,这个确认不是立即发送的,而是延迟后发送的。TCP会维持其首部和数据的校验和,这是一个端到端的校验和,如果接收端的校验和有差错,则会丢弃这个报文,发送端在超时后会重新发送。...

2022-08-07 14:36:29 481

原创 【网络协议】UDP协议

可以修改Traceroute来确定MTU,要做的是发送分组,不开启IP数据报分片,发送的第一个数据报长度与出口MTU相等,若返回ICMP差错报文,则减小MTU,直到确定出最小MTU。理论上IP数据报的最大长度为65535字节,因此理论上的UDP数据报的最大长度为65507(65535-20-8)字节,但是,大多数实现所提供的长度比这个最大值小。UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都会产生一个UDP数据报,并组装成一份待发送的IP数据报。UDP校验首部和数据部分,TCP也是。...

2022-08-07 14:34:02 828

原创 【网络协议】TCP分段与IP分片

最后一点,对IP分片的数据报来说,即使只丢失一片数据也要重新传整个数据报(既然有重传,说明运输层使用的是具有重传功能的协议,如TCP协议)。当来自TCP报文段的某一段(在IP数据报的某一片中)丢失后,TCP在超时后会重发整个TCP报文段,该报文段对应于一份IP数据报(可能有多个IP分片),无法只重传数据报中的一个数据分片。分片传输的IP数据报不一定按序到达,IP首部的信息能让分片按序组装,IP数据报的分片与重组实在网络层中发生的。MSS是TCP里的一个概念(首部的选项字段中)。...

2022-08-07 14:31:03 1285

原创 【网络协议】ICMP协议、Ping、Traceroute

Traceroute使用ICMP报文和IP首部中的TTL字段,其原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。ICMP是一个网络层的协议,用来传递差错报文和其它需要注意的信息,ICMP通常被IP层或更高层使用,它在IP数据报内传输。不是IP分片的第一片。.

2022-08-07 14:30:03 1155

原创 【网络协议】IP协议、ARP协议、RARP协议

前20个字节和选项是IP数据报的首部,前20个字节是固定的,可有可无,首部的每一行是32位,最高位在左边,为0bit,最低位在右边,为31bit,32bit按照以下顺序传输,0-7,8-15,16-23,24-31,这种传输顺序称为big endian,TCP/IP协议首部所有二进制都要求按照这种顺序传输,所以其又被称为网络字节序。,另外,子网对于子网内部的路由器是不透明的,也就是说IP数据报传到该网络的网关时,网关再将该数据报传送到子网的默认路由器上,最后通过该路由器再交付给该主机。...

2022-08-07 14:28:51 536

原创 【网络协议】数据链路层

ARP协议就是将ip地址转换为MAC地址,RAARP模块就是将MAC地址转换为ip地址,这两个都位于网络层,都具有各自的以太网数据帧类型(即传入以太网中要加上各自的MAC)TCP/IP支持多种不同的数据链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI、RS-232串行线路等,当今TCP/IP采用的主要局网技术是以太网。两台电脑进行网络通信要经过多个网络的数据链路层,不同网络的数据链路层的MTU又不同,所以要取路径中最小的MTU,这个MTU就被称为路径MTU。数据链路层主要有3个目的。...

2022-08-07 14:27:43 204

原创 【网络协议】TCP连接的建立和释放

如果这时候第一次发送的请求报文段延迟了一段时间后,又到了服务端,很显然,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。两端都发送FIN数据段,FIN=1,seq=i、FIN=1,seq=j,都进入FIN WAIT 1状态,再收到各自的ACK报文段,ACK=1,seq=j+1,ack=i+1、ACK=1,seq=i+1,ack=j+1,都进入TIME WAIT状态,等待2MSL后,进入CLOSED状态,最终释放整个TCP传输。...

2022-08-07 14:25:44 1495

原创 【网络协议】互联网协议入门(二)

因为接收方的MAC地址是FF-FF-FF-FF-FF-FF,看不出是发给谁的,所以每台收到这个包的计算机,还必须分析这个包的IP地址,才能确定是不是发给自己的。这个响应包的结构也是类似的,以太网标头的MAC地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。(2)后面的"IP标头",设置发出方的IP地址和接收方的IP地址。...

2022-08-07 14:23:06 112

原创 【网络协议】互联网协议入门(一)

确定了0和1的分组方式以太网协议。

2022-08-07 14:21:31 445

原创 【JUC】并发编程(五)阻塞队列

第一件事将入队节点设置为当前队列尾节点的下一个节点,第二是更新tail节点,如果tai节点的next节点不为空,则入队节点变为tail节点,如果为空,则入队节点设置为tail节点的next节点,所以tail节点并不总是tail节点。:并不是每次出队时都更新head节点,当head节点里有元素时,直接弹出head节点里的元素,而不会更新head节点,当head节点没有元素时,出队才会更新head节点,如图。Thread拿到的是复制的ArrayList,对其进行的操作实在复制的新ArrayList上操作的,..

2022-08-05 21:09:01 217

原创 【JUC】并发编程(四) 并发工具类

这时 Thread-0 还停在 594 处,即e=1,next=35,随后Thread-0开始扩容,1先被放入新表,e更新为35,因为此时新的链为(35)->(1)->null,所以next更新为1。因为是线程安全的hashtable,防止其他线程对线程搬迁工作(从后往前)产生影响,在对节点处理完后,会在其对应的下标下加一个ForwardingNode,其他线程访问发现是ForwardingNode,则说明已经处理过了,则不会在对链表做其它操作。随后,1先被放入新表的桶下标1中,接着35被放入新表。....

2022-08-05 11:12:44 147

原创 【JUC】并发编程(三)

使用此注解的对象或字段的前后各增加128字节大小的padding,从而让CPU将对象预读至缓存时不用占用不同的缓存行,不会造成对方缓存行为的失效,防止一个缓存行有多个cell对象。一个线程对主存中的一个变量进行修改,另一个线程不可见,因为其是从缓存中读取值的,缓存中的值是开始运行时从主存中读取的未修改前的值。// 将x的值赋值给i。只要其它线程动过了共享变量,如果自己的cas就算失败,这时,仅比较值是不够的,需要再加一个版本号。需要新加两个参数,版本号以及对版本号的修改,如果版本号一致,则返回修改值。...

2022-08-04 13:16:03 115

原创 【JUC】并发编程(二)

偏向锁第一次使用CAS时就将线程ID设置到对象头的MaekWord中,之后发现这个线程ID是自己的,就不会重新CAS,以后只要不发生竞争,这个对象就归该线程所有。如果在尝试加轻量级锁过程中,操作无法成功,这时一种情况是其它线程为此对象加上了轻量级锁,这时要进行锁膨胀,将轻量级锁变为重量级锁。当撤销偏向锁阈值超过40次后,jvm会觉得偏向错了,不该偏向,于是整个类的所有对象都变为不可偏向,新建的对象也不可偏向。创建锁记录对象,每个线程的栈帧都会包含一个锁记录的结构,内部可以存储锁定对象的MarkWord。..

2022-08-03 12:42:51 88

原创 【JUC】并发编程(一)

启动一个线程,只是进入就绪状态,里面的代码要线程分到时间片时才能执行,每个线程对象的start方法只能调用一次,调用多次会出现异常。打断正常运行的线程,不会清空打断状态(True),线程依然会运行,可以根据打断标记写一段让它停止运行的代码。打断park线程,不会清空打断状态,线程可以继续运行,一旦打断标记为true,再想让它停就不能停下来了。守护线程,只要非守护线程全部结束了,即使守护线程没运行完,整个java进程也会强制结束。多核CPU下,每个核都可以调度运行线程,这时候线程是并行的。...

2022-08-03 09:16:10 80

原创 【JVM】虚拟机字节码执行引擎

在Son类在创建的时候,首先隐式调用了Father的构造函数,Father构造函数中对showmethemoney()调用是一次虚方法调用,所以执行的是son的版本,这时父类中的money被初始化为2,但此时调用的是子类的字段,son没初始化完成,所以为0,之后子类进行初始化,输出为4,最后为编译期就确定的静态类型访问父类的money,所以为2。操作数栈具有先入后出的特点,当一个方法刚开始执行的时候,这个方法的操作数栈为空,在这个方法的执行过程中,会有各种字节码指令往操作数栈中写入和提取内容。...

2022-08-01 16:30:10 260

原创 【JVM】虚拟机类加载机制

准备阶段是正式为类中定义的变量(静态变量,也叫类变量,被static修饰)分配内存并设置类变量初始值的阶段,概念上讲,这些变量所使用的内存都应该在方法区中分配,JDK8之后,类变量则随着Class对象一起存放在Java堆中。否则,在C实现的接口列标及它们的父接口中递归查找是否有简单名称和字段描述符与目标相匹配的方法,如果有,则说明类C是一个抽象类(方法在接口中有定义,自身却没有定义,则只可能是抽象类),查找结束,抛出异常。5.接口中不能使用静态语句块,但仍然有变量赋值操作,所以也会有()方法。......

2022-08-01 11:43:06 447

原创 【JVM】垃圾收集器与内存分配(二)

在进行MinorGC之前,虚拟机要判断新生代中所有对象的空间是否小于老年代最大可用连续空间,若成立,那这次MinorGC可以确保是安全的,如果大于,则检查担保失败参数是否开启,如果开启,则判断历次进入老年代对象的平均大小是否大于老年代剩余可用连续空间,如果小于,则尝试进行一次MinorGC(这次GC有风险),如果大于或未开启担保失败,则直接进行FullGC。标记一下和GCRoots直接关联的对象,并修改TAMS的值,让下一阶段并发运行时,能够在Region中分配新对象。...

2022-07-31 16:10:59 143

原创 【JVM】垃圾收集器与内存分配(一)

垃圾收集器应用于堆内存与方法区,因为这两个区域在内存分配时是不确定的,只有在运行期间我们才能知道创建哪些对象,创建了多少对象,这部分的内存分配与回收也是动态的,垃圾回收关注的正式这部分内存该如何管理。......

2022-07-31 12:15:26 477

原创 【JVM】自动内存管理机制

进行加载检查,之后进行对象内存分配,对于规整的JAVA堆进行“指针碰撞”(指针向空闲的空间挪一段距离),不规整的使用空闲列表(分配一块空间对象,并在列表上记录内存块的状态)JAVA虚拟机栈也是线程私有的,栈是内存的一种,每个方法被执行时,虚拟机会创建一个栈帧,栈帧中包含了局部变量表、操作数栈等信息,每个方法从调用到执行完毕,就是一个栈帧从入栈到出栈的过程。从分配角度看,被线程共享的堆可以划分出多个线程私有的分配缓冲区(TLAB),以提升对象分配的效率,但不管怎么划分,堆中存储的都只能是对象的实例。.....

2022-07-31 11:47:43 564 1

空空如也

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

TA关注的人

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