自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM角度理解重写和重载

两个概念方法调用:确定被调用方法的版本解析:类加载期间确定,由符号引用转为直接引用,invokestatic(调用静态方法)invokespecial(调用实例构造器init方法、私有方法、父类中的方法)分派:运行期间确定,确定目标方法的直接引用invokevirtual(调用虚方法)invokeinterface(调用接口方法,在运行时确定一个实现该接口的对象)invokedynamic(运行时动态解析出调用点限定符所引用的方法,然后再执行该方法)方法执行:由执行引擎执行此方法解析

2022-03-23 06:47:10 272

原创 RedisObject

对象和编码Redis并没有直接采用底层数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象这五种不同类型的对象。Redis在执行命令之前首先会根据对象的类型来判断一个对象是否可以执行给定的命令。然后再根据编码类型选择具体的底层实现。适用对象的好处是:可以针对不同的适用场景,为对象设置不同的数据结构底层实现,以优化对象在不同场景下的使用效率对象的类型与编码Redis使用Redis的对象RedisObject来表示数据

2022-03-21 21:07:30 203

原创 Redis3.0底层数据结构

底层数据结构简单动态字符串SDS的定义len:SDS的总长度alloc:已分配的长度buf:存放实际的字符串(末尾要加一位的结束符)SDS与C字符串的区别SDS封装了C字符串,用空间换效率,满足了Redis要求的安全性、效率性以及功能方面的要求1.常数复杂度获得字符串长度通过len属性直接获取字符串的长度,len长度在SDS的API执行时自动修改2.避免缓冲区溢出SDS的空间分配策略杜绝了发生缓冲区溢出的可能性当需要对SDS进行修改时,会先检查SDS的空间是否满足修改所需的大小

2022-03-21 18:00:21 1044

原创 Java内存模型与线程

多线程的出现计算机的运算能力太强大了,它的运算速度和它的通信子系统的速度差距太大,大部分时间都花费在磁盘IO、网络通信或者访问数据库上。为了避免这部分浪费,将IO等待的时间利用起来,就必须采用多线程的方案。硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,所以现代计算机系统都不得不加入一层或多层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速地进行,当运算结束后能再从缓存同步回内存之中,这样

2022-03-17 15:45:21 312

原创 Java运行时数据区域

运行时数据区域程序计数器(与解释器配合工作)程序计数器是一块较小的内存空间,可以看做是当前线程所执行字节码的行号显示器。在Java虚拟机的概念模型中,字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,包括分支循环跳转异常处理等基本功能如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址如果线程正在执行的是一个本地(Native)方法,这个计数器的值则应该为空(Undefined)此内存区域永远不会出现OOM

2022-03-17 15:29:41 1062

原创 Java对象的创建及布局

对象的创建在Java虚拟机中当遇到一条字节码的new指令时1.检查类是否被加载首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那就必须先执行相应的类加载过程。2.分配内存空间在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配内存空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来(空间分配管理有以下两种算法 1.指针碰撞法 2.空闲

2022-03-17 15:28:57 875

原创 JVM角度的线程安全以及JDK6之后Synchronized部分优化

线程安全当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。Java语言中的线程安全各种操作共享的数据可以按照安全程度由强到弱分为以下五类不可变:只要一个不可变的对象被正确的构建出来,那其外部的可见状态都永远不会改变,如String绝对线程安全Java API中标注自己是线程安全的类,大多数也都不是绝对的线程安全相对线程安全相对线程

2022-03-15 13:00:49 566

原创 Java垃圾回收机制

哪些内存需要回收程序计数器、虚拟机栈、本地方法栈三个区域随线程生而生,随线程死而死。而且每一个栈桢中分配多少内存基本上是在类结构确定下来的时候就已知的,当方法结束或线程结束内存自然而然就回收了而堆和方法区这两个区域则有着很显著的不确定性一个接口的多个实现类需要的内存可能会不一样一个方法所执行的不同条件分支所需要的内存也可能不一样只有处于运行期间,我们才能知道程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。垃圾收集器所关注的也正是这部分内存应该如何管理是否回收方法区方

2022-03-14 23:31:18 887

原创 简要了解servlet

概要学习目的本人是学校的咸鱼一条,这学期在学校学习了web的开发,期间老师带我们手写了一个简易的servlet容器。我发现对这块还挺有兴趣的,就去搜索,发现有很多人推荐这本《How Tomcat Works》,就下载了一本,打算一边学习,一边在csdn上与大家分享学习的经历,本人文笔不太好,编程这一块能力有限,有时候文章中会出现一些错误,欢迎各位大佬来指正简介《How Tomcat Works》这本书剖析了TomCat4.1.12和5.0.18版本,解释了它的servlet容器的内部的运行机制。To

2021-06-26 00:11:04 156

空空如也

空空如也

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

TA关注的人

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