自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 LRUCache简单实现

来源于LeetCode. 146. LRU 缓存题目要求实现一个LRUCache,我们使用get时,需要额外把该节点移动到开头;我们使用put时,如果存在该节点,我们需要把该节点删除,并且插入到开头;不存在则插入到开头,此时需要判断长度是否大于给定的capacity。并且实现这两种操作时,时间复杂度都必须为O(1);get我们使用HashMap便可以达到我们的时间复杂度,但是HashMap不是有序的,但它的子类LinkedHashMap是有序的,所以我们使用LinkedHashMap便可以达到本题的效果

2022-06-03 13:24:06 858 1

原创 ThreadLocal底层原理详解

ThreadLocal底层原理详解引言1. 什么是ThreadLocal?2. ThreadLocal的源码分析为什么Map的key要设置成弱引用呢??value怎么释放呢?引言由于在项目中使用到了ThreadLocal,所以特地花一篇文章的时间来讲讲ThreadLocal的底层实现1. 什么是ThreadLocal?简单来说就是,ThreadLocal是依附在Thread上的局部变量,可以实现线程间的隔离,线程内部的资源共享,ThreadLocal是线程私有的;2. ThreadLocal的源码

2022-05-17 11:20:37 5607

原创 RDB和AOF持久化底层原理详解

RDB和AOF持久化底层原理详解1. 导言2. RDB持久化2.1 RDB文件的创建和载入2.2 save命令和bgsave命令执行时服务器状态2.3 自动间隔保存2.4 RDB文件结构3. AOF持久化1. 导言由于我们的 Redis是一款内存性数据库,所有数据都保存在内存中。一旦断电,那么数据将会丢失,所以为了解决这个问题,Redis使用两种持久化方式进行保存,将这些内存中的数据保存到磁盘上。2. RDB持久化RDB持久化可以手动执行,也可以根据配置文件进行定期执行,该功能可以将数据库某个时间点

2022-05-14 10:32:43 661

原创 Redis数据库底层实现和过期键详解

Redis数据库底层实现和过期键详解1. 服务器中的数据库底层表示2. select切换数据库原理3. 数据库键空间4. 过期时间设置和过期键删除策略4.1 过期时间设置4.2 保存过期时间4.3 过期键的判定4.4 过期键的删除策略1. 服务器中的数据库底层表示在src/server.h中图1.1图1.1中,每一个redisDb表示一个数据库,这结构里面包含了所有数据库图1.2图1.2中,dbnum为服务器数据库的数量,默认为16个数据库图1.3图1.3中表示了一个Redis的总体结构

2022-05-12 11:32:14 629

原创 Redis五种基本数据类型底层详解(原理篇)

Redis五种基本数据类型底层详解详细介绍Redis用到的数据结构简单动态字符串SDS和C字符串的区别总结链表字典哈希表字典哈希算法解决键冲突rehash(重点)渐进式rehash跳跃表详细介绍Redis用到的数据结构各位,稍安勿躁,讲解五种基本数据类型前,我们先来这些数据类型用到的数据结构,防止后面懵逼,本文所用源码来源:Redis源码链接,版本使用6.2简单动态字符串我们都知道Redis是用C写的,但Redis中并没有直接使用C语言传统的字符串(以空字符结尾的字符数组),而是自己构建了一种名

2022-05-07 13:07:14 3714 1

原创 十大排序算法(Java版)

十大排序算法总览冒泡排序流程图Java代码复杂度分析选择排序流程图Java代码复杂度分析直接插入排序流程图Java代码复杂度分析总览冒泡排序流程图Java代码 //冒泡排序 public void bubleSort(int arr[]){ int len=arr.length; for(int i=1;i<arr.length;++i){ for(int j=0;j<len-i;++j){

2022-05-06 21:15:54 856

原创 Java并发基础概念

Java并发基础概念进程与线程进程线程进程与线程的区别并行与并发并发并行同步和异步进程与线程进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的进程是系统分配资源的最小单元线程一个进程可以有多个线程线程是cpu调度的基本单位,线程之间共享进程资源进程与线程的区别进程的独立的,而线程存在于进程内,是进程的一个子集进程拥有共享的资源,供内部的线程

2022-05-05 14:14:09 1152 1

原创 一文掌握MySQL中的锁

MySQL中锁的详细介绍解决并发事务带来的问题读-读情况写-写情况读-写或写-读情况解决并发事务带来的问题读-读情况并发事务同时对一条记录进行读取,本身不会对记录造成什么影响,所以允许这种情况的发生写-写情况并发事务同时对同一条记录进行修改的情况, 会造成脏写现象,任何一种隔离级别都不允许它的发生,所以使用加锁的方式,排队等待进行记录的修改。这个排队的实现,是通过加锁来进行实现的。这个锁结构是在内存中实现的,在事务执行前,锁并不存在。当一个事务对记录做改动时,需要先生成一个锁结构,然后在内存

2022-04-26 18:16:04 764

原创 IP协议相关技术终极详解

IP协议相关技术DNS域名解析协议概述域名的层级关系域名的解析流程ARP地址解析协议概述DNS域名解析协议概述我们在上网时,通常使用的都是域名来访问网站,因为域名更容易记住,总不可能记住一串ip地址吧。那么网络如何将域名转换成对应的ip地址呢?这就需要我们的DNS域名解析协议了域名的层级关系DNS中的域名都是靠句点来进行分割的,越靠右的层级越高,因为外国人的思维都是跟中国人相反的。根域在最顶层,它的下一层就是.com顶级域,如图所示:根域的DNS服务器信息保存在互联网中所有DNS服务器中,

2022-04-26 11:19:20 2967 1

原创 一文解决MySQL事务并发问题和事务隔离级别及MVCC原理

事务并发产生的一致性问题脏写如果一个事务修改了另一个未提交事务的修改过的数据,则称发生了脏写现象。举个例子:假设数据库中有一个数据项为x=2;事务A修改了x=1;此时事务A并没有提交,事务B此时也来修改数据项x=0;此时事务A,B提交事务B修改了事务A未提交修改过的数据,所以发生了脏写的现象脏读如果一个事务读取了另一个事务未提交的数据,则称发生了脏读现象不可重复读如果一个事务A读取了x的值,然后事务B又修改了x的值并且提交,事务A再次读取x的值时,则会与第一次x的值不同,则称发生了不可

2022-04-21 14:04:17 1282

原创 已经建立的TCP,收到SYN会发生什么?

已经建立的TCP,收到SYN会发生什么?该场景可以描述为:客户端与服务端建立连接后,突然客户端死机了,而服务器还处于establelisten状态,这时客户端开机后再次发送syn报文请求建立连接,那么服务端收到这个syn报文会做出什么反应呢??一个TCP连接是由一个四元组唯一确认的,此时源ip,目标ip,目标端口是确定的,只有源端口是不确定的。客户端SYN报文的源端口与历史端口是不一样的这样的话,相当于客户端重新建立起了一次新的连接那么服务端处于establelisten状态的连接,如果服务端

2022-04-21 13:39:19 2732

原创 SYN报文什么时候会被丢弃?

开启tcp_tw_recycle参数,并且在NAT环境下,造成syn包丢弃tcp最后挥手时,需要发起关闭方等待2MSL时间后才能关闭,Linux提供了两个系统参数可以快速回收time_wait状态的连接,这两个参数都是默认关闭的。net.ipv4.tcp_tw_reuse:如果开启该选项的话,tcp在新建连接时,会自动选择time_wait状态超过1s的连接来进行复用,该选项只适用于连接方net.ipv4_tcp_tw_recycle:如果开启该选项的话,允许处于time_wait状态的连接快速回收

2022-04-21 09:04:30 2357

原创 如何理解TCP是面向字节流协议及粘包问题解决

如何理解TCP是面向字节流协议之所以说TCP是面向字节流协议,UDP是面向报文协议。主要是因为发送方的发送消息的机制不同UDP是面向报文协议udp在发送消息时,在传输层直接就将一个消息打包成一个完整的包,组装好udp头部,不进行切割,就转发给网络层。也就是每一个UDP报文就是一个消息。服务端在接收到udp报文时,会将它放到一个队列中,一个元素就是一个udp报文。每次读取时,读取一个元素TCP是面向字节流协议当tcp在传输层发送消息时,一个消息可能会被分割成多个tcp报文进行转发给网络层。我们不

2022-04-19 11:15:13 2431

原创 TCP四次挥手详解(含常见面试题)

TCP四次挥手过程客户端发起fin位为1的FIN报文,此时客户端进入FIN_WAIT_1状态服务端接受到FIN 报文后,发送ack应答报文,此时服务端进入close_wait状态客户端接受到ack应答报文后,进入FIN_WAIT_2状态服务端处理完数据后,向客户端发送FIN报文,此时服务端进入LAST_ACK状态客户端接受到FIN报文后,客户端发送应答ack报文,进入TIME_WAIT阶段服务端接受到ack报文后,断开连接,处于close状态客户端过一段时间后,也就是2MSL后,进入clos

2022-04-19 10:09:52 23136 2

原创 TCP半连接队列和全连接队列

什么是TCP半连接队列和全连接队列?在TCP进行三次握手时,Liunx会为其维护两个队列:半连接队列,也叫syn队列全连接队列,也叫accept队列在客户端发起第一次连接时,服务端会将其加入到syn队列中,并且响应客户端syn+ack报文,等到客户端发送ack应答报文时,服务端将该连接从半连接队列中取出,并新建一个新的连接,加入到accept队列当中。等待进程调用accept请求时,将该连接取出来不管是半连接队列还是全连接队列,都有最大长度限制,超过限制时,内核会直接丢弃,或返回 RST 包

2022-04-16 09:58:51 4475

原创 TCP三次握手(含常见面试题)详解

TCP 头格式序列号:在建立连接时就由计算机随机生成,每发送一次数据,该序列号+1,用来解决网络中包乱序的问题确认应答号:表示下一次期望收到的报文序列号,表示以前的数据报都已经收到了,用来解决网络中丢包的问题控制位:ACK:该位为1时,确认应答号是有效的,除了建立连接开始的syn包时,其他包该位必须为1RST:该位为1时,表示出现异常,强制连接断开SYN: 该位为1时,表示希望建立连接,并且初始化序列号FIN: 该位为1时,希望正常断开连接,通信双方互相交换FIN,表示可以断开TCP连

2022-04-15 09:34:28 15770 6

原创 474. 一和零 Java(三维0/1背包)

开始这题讲解前,需要你掌握0/1背包滚动数组版本来看到第一眼准备用贪心的,每次取最短的字符串,不过很容易就被推翻了。便放弃了这种解法。这题我想最难的是:想到0/1背包的贪心上面,想到了0/1背包又很难想到是个三维的0/1背包,将背包容量变成了二维。我们将每个字符串看成是一个个物品,0和1的数量看做是它的容量.这样的话,就是一个三维的问题了,xy坐标为0和1的数量,z坐标为每个物品。依照0/1背包的滚动数组来做,本题可以转换为二维数组,因为z坐标是可以循环利用的。dp[i][j]代表的含义为:放..

2022-04-14 21:22:51 617

原创 LeetCode 494.目标和(回溯+动态规划[类似0/1背包])

最近开始写动态规划了,题解都少写好多!!!为啥呢?太tm难了,有些题看了题解还要想个几小时。终究还是菜狗!!不说了,继续写题解,加深理解第一种解法:回溯这个就不用我写了吧,感觉没有技术含量。用回溯我都感觉很愧疚,因为跟暴力差不多。但是没办法,不会就老老实实写这种了class Solution { int sum=0; public int findTargetSumWays(int[] nums, int target) { int length=nums.len.

2022-04-14 20:01:33 458

原创 MySQL日志之Undo日志

Undo日志redo log是事务持久性的保证,undo log是事务原子性的保证。在事务中 更新数据 的 前置操作 其实是要先写入一个 undo log 。如何理解Undo日志事务需要保证 原子性 ,也就是事务中的操作要么全部完成,要么什么也不做。但有时候事务执行到一半会出现一些情况,比如:情况一:事务执行过程中可能遇到各种错误,比如 服务器本身的错误 , 操作系统错误 ,甚至是突然 断电 导致的错误情况二:程序员可以在事务执行过程中手动输入 ROLLBACK 语句结束当前事务的执行。

2022-04-13 14:51:02 2233

原创 MySQL事务日志之redo日志

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由 锁机制 实现。事务的原子性,一致性,持久性由事务的redo日志和undo日志来保证redo log称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性undo log称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性,一致性redo日志redo的组成重做日志缓存保存在内存中,是易失的重做日志文件保存在硬盘中,是持久的redo流程第1步:先将

2022-04-12 14:39:49 1548

原创 TCP滑动窗口,流量控制,拥塞控制详解

引言我们知道TCP是每发送一个数据,都要进行一次确认应答报文的。当上一个收到应答时,才会继续发送下一个。这种方式很显然效率比较低滑动窗口窗口大小就是无需等待应答,而可以继续发送数据的最大值滑动窗口实际上就是在操作系统中开辟一个缓存空间,发送方在等待应答报文之前,必须保留前面未确定的数据。如果收到了应答,则可以从缓冲区清楚图中的 ACK 600 确认应答报文丢失,也没关系,因为可以通过下一个确认应答进行确认,只要发送方收到了 ACK 700 确认应答,就意味着 700 之前的所有数据「接收

2022-04-12 11:24:53 4321 1

原创 TCP重传机制详解

本文提纲重传机制TCP针对数据包丢失的情况,采用重传机制解决常见的重传机制:超时重传快速重传SACKD-SACK超时重传超时重传:当发送数据时,设立一个定时器,当超过指定时间后,发送端没有收到ACK应答报文,则触发超时重传机制,重发该数据超时时间设置为多少呢?也就是超时重传时间RTO假设我们设置的超时重传时间过短的话,那么就很有可能造成我们数据包还没到接收端或者应答ACK没到发送方就会重传:假设我们设置超时时间过长的话,那么就会导致数据包丢失了一段花时间,我们才重传,减低

2022-04-11 12:45:15 6866

原创 一条SQL语句在MySQL中的执行流程

MySQL的基础架构Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务 功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在 这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、 Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了 默认存储引擎。连接器在执行一条sql语句时:第一步,你会先连接到

2022-04-09 15:34:59 803

原创 Join关联查询优化及原理

采用左外连接下面开始 EXPLAIN 分析EXPLAIN SELECT SQL_NO_CACHE * FROM `type` LEFT JOIN book ON type.card = book.card;结论:type 有All添加索引优化ALTER TABLE book ADD INDEX Y ( card); #【被驱动表】,可以避免全表扫描 EXPLAIN SELECT SQL_NO_CACHE * FROM `type` LEFT JOIN book ON type.card = b

2022-04-04 18:20:48 1702

原创 LeetCode 501. 二叉搜索树中的众数(Java版暴打官方,还有谁(前序遍历+Mirrot+两次遍历真正的O(1)))

前言给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树输入:root = [1,null,2,2]输出:[2]如果树中有不止一个众数,可以按 任意顺序 返回。第一种解法:前序遍历利用二叉搜索树的性质,中序遍历一定是有序的,也就是相同的数一定会挨在一起;我们

2022-04-02 19:20:03 928

原创 索引失效的几种情况

索引失效案例表结构如下:全值匹配我最爱没有创建任何索引的情况下:explain select * from student_info where student_id=25 and name='jksf';发现它没有使用任何索引给前面一个字段建立索引create index X on student_info(student_id);explain select * from student_info where student_id=25 and name='jksf';发现它使

2022-04-02 18:01:05 2908

原创 LeetCode 437.路径总和 III(树上玩前缀+回溯)

前言:给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。本题这里有两种解法:类似暴力,可以参照113. 路径总和 II这题,只不过多了遍历整棵树这个过程而已,这种解法多了很多重复的计算前缀和,本篇文章主要讲解这种解法第一眼看到这个题目时,想的就是暴力或则前缀和来解决。暴力的话,感觉太low了,可是前

2022-03-31 00:24:06 300

原创 索引的分类,创建与设计原则

索引的分类从功能逻辑上说,索引主要有4种,分别是普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇索引。按照作用字段个数进行划分,分成单列索引和联合索引。不同的存储引擎支持的索引类型也不一样lnnoDB:支持B-tree、Full-text等索引,不支持Hash索引;MylSAM ︰支持B-tree、Full-text等索引,不支持Hash索引;Memory :支持B-tree、Hash等索引,不支持Full-text索引;NDB:支持Has

2022-03-30 19:39:06 2098

原创 InnoDB数据存储结构

数据库的存储结构:页索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎,比如Memory都不用磁盘来存储数据由于InnoDB是MySQL的默认存储引擎,所以本章剖析InnoDB存储引擎的数据存储结构。磁盘与内存交互基本单位:页InnoDB将数据划分为若干个页,InnoDB中页的大小默认为16KB。

2022-03-30 13:33:47 3601 1

原创 mysql索引的数据结构

为什么使用索引我们假如不使用索引的话,就像我们左边的这样,造成全文索引加入索引的话,像我们右边的这样,那么它的速度就会快上很多。打个比方,假如我们需要查字典的话,索引就像我们的目录一样,没有索引,我们就只能一页一页去找。而加上索引之后,我们可以根据目录来快速查找我们所需要的东西对字段Col2添加了索引,就相当于在硬盘上为col 2维护了一个索引的数据结构,即这个二叉搜索树。二叉搜索树的每个结点存储的是(K,V)结构,key是Col 2,value是该key所在行的文件指针(地址)。比如:该二

2022-03-28 12:12:13 6468 2

原创 计算机网络体系结构

计算机网络协议层数OSI的七层协议体系结构:概念清楚,理论也较完整,但是它复杂且不实用TCP/IP的四层协议体系结构:在实际中得到了广泛的应用。不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。因此在学习计算机网络原理时往往采用折中办法,即综合OSI和TCP/IP的优点,采用一种五层协议的体系结构。五层协议的体系结构:只是为了介绍计算机网络原理而设计的,实际应用还是TCP/IP四层结构应用层应用层是网络应用程序及它们的应用层协 议存留的地方。因特网的应用

2022-03-27 13:20:42 2796

原创 二叉树遍历之图解Mirror算法(莫里斯算法)

我们写二叉树的遍历时,一般有两种方式,迭代和递归。然而还有一种神奇的算法,也可以作我们的二叉树递归,且空间复杂度为O(1),要知道,我们迭代和递归都是需要额外栈空间的

2022-03-26 22:29:14 2378

原创 垃圾回收相关概念

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

2022-03-24 15:24:35 299

原创 垃圾回收概述和相关算法

垃圾回收概述Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特

2022-03-23 15:15:55 136

原创 面试中的高频知识点--String

String的基本特性String s1 = "atguigu" ; // 字面量的定义方式String s2 = new String("hello"); // new 对象的方式String被声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte

2022-03-22 17:45:16 846

原创 运行数据区--方法区(元空间)

栈、堆、方法区的交互关系Person 类的 .class 信息存放在方法区中person 变量存放在 Java 栈的局部变量表中真正的 person 对象存放在 Java 堆中在 person 对象中,有个指针指向方法区中的 person 类型数据,表明这个 person 对象是用方法区中的 Person 类 new 出来的方法区的理解方法区在哪里?《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩

2022-03-22 09:06:03 887

原创 JVM运行数据区--堆

堆的核心概述堆与进程堆针对一个JVM进程来说是唯一的。也就是一个进程只有一个JVM实例,一个JVM实例中就有一个运行时数据区,一个运行时数据区只有一个堆和一个方法区。但是进程包含多个线程,他们是共享同一堆空间的。一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为

2022-03-20 17:18:07 119

原创 本地方法接口

什么是本地方法?简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c编译器去调用一个c的函数。为什么使用Native Method?Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。与Java环境

2022-03-19 14:46:06 129

原创 运行时数据区

从这里开始,我们开始了解内存内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了CPU和磁盘之间的桥梁运行时数据区具体结构Ja

2022-03-19 13:15:41 239

原创 类加载子系统

整体架构注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有类加载子系统类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(链接阶段进行验证)。ClassLoader只负责class文件的加载,至于他是否可以运行,则有ExecutionEngline执行引擎决定的加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量

2022-03-17 18:58:24 591

计算机网络作业.docx

计算机网络实验作业,讲解了路由器的ipv4和ipv6寻址等等,计算机网络实验作业,讲解了路由器的ipv4和ipv6寻址等等

2020-05-04

空空如也

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

TA关注的人

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