Java学习笔记
文章平均质量分 73
车猫君
沉默着,走了有,多遥远;
抬起头,忽然间,才发现;
展开
-
Java-对象头详解
引言这里只介绍64位虚拟机的对象头的结构和内容,主要是分为以下四种状态介绍,无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。对象头的基本结构如下图所示对象的结构和内容我这里就暂且不提了,本章主要讲述的对象头的内容。对象头分为三个部分:一、Mark Word部分,从名字就能知道它是一个记录和描述对象的部分。这也是我接下来主要讲解的部分,因为其他的内容,基本没有多大的变化情况。占八字节内存。二、类型指针部分,也叫元数据指针什么的,主要是存储元数据的地址,对于对象的类型信息,指向方法区的类信息部原创 2021-01-11 14:48:47 · 1723 阅读 · 0 评论 -
Java——String类详解
引言这里主要从虚拟机层面完整的讲解一下String类的对象存储位置。以及看似相同的String类的对象的比较。在此,针对一个对象的初始化的过程,我就不细讲了,其实可以参考我的另外一篇博客,虽然没有讲得很细,但是大体的逻辑过程是没有问题,待以后有时间再去细化和完善。随便提一下,在jdk1.6及以下版本,字符串常量池是放在方法区的运行时常量池中的,静态变量也是存储于方法区的,但是在jdk1.7及以上版本,字符串常量池和静态变量被放入了Java堆内存区域中,所以,我以下的讲解中,会两种版本对比着讲解。我会尽可能原创 2021-01-03 00:29:29 · 182 阅读 · 0 评论 -
学习笔记——CMS收集器
CSM收集器CSM收集器是一种以获取最短回收停顿时间为目标的收集器。很大一部分应用都会很关注服务的响应速度,以给用户带来良好的交互体验。CMS收集器就非常符合这类应用的需求。CMS(mark-sweep)从名字上就可以看出它是基于标记——清除算法实现的,整个过程分为以下四个步骤。一、初始标记(CMS init mark)二、并发标记(CMS concurrent mark)三、重新标记(CMS remark)四、并发清除(CMS concurrent sweep)初始标记和重新标记阶段需要ST原创 2020-12-15 12:33:08 · 392 阅读 · 0 评论 -
学习笔记——Parallel Scavenge和Parallel Old
前言本章节是以读书笔记的目的来创作的,随时补充和更新,待学习比较深入以后,会后续补充作者自己的理解和思考总结Parallel Scavenge收集器Parallel Scavenge收集器也是一款新生代收集器,基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器。其目标为达到一个可控制的吞吐量,所谓吞吐量,程序实际运行时间比上总时间,总时间为程序实际运行时间加上GC时间,所以,吞吐量越接近于一,说明实际效果越好。因为停顿时间越短就越合适需要与用户交互或需要保证服务响应质量的程序,良好的响应速原创 2020-12-11 14:47:11 · 1186 阅读 · 0 评论 -
学习笔记——Redis持久化和主从复制
前言本文是通过各种杂七杂八的渠道整理的相关知识,都是说明性知识点,暂时没有作者自己太多的思考和简要升华。Redis持久化机制Redis持久化机制分为两种,rdb持久化和aof持久化。rdb持久化方式,在一定时间间隔内对数据库内数据集生成快照,写入磁盘,所谓快照方式,你可以理解为,要生成当前数据集的写命令集合生成到文件。然后操作系统安装这些写命令向磁盘写入数据。默认文件为dump.rdb。aof持久化方式,redis会将每一个收到的写命令通过write函数追加到文件。然后操作系统安装这些写命令向磁盘原创 2020-12-10 10:22:53 · 73 阅读 · 0 评论 -
学习笔记——spring循环依赖
前言主要讲诉的解决spring循环依赖的逻辑和思想,并不打算从springboot具体的代码实现角度,以后研究整理过后再尝试补充。什么是spring的循环依赖首先申明两个bean的资源类,BeanA和BeanB,所谓spring的循环依赖就是,BeanA类里有一个字段属性是自动装配的BeanB,同样BeanB类的一个字段属性是自动装配的BeanA。这样在spring对bean初始化管理的时候,就会造成循环依赖现象。这里先补充一下bean的初始化的一个过程,这里的过程省略掉很多细节,只是简单的抽象说明原创 2020-12-07 17:24:21 · 79 阅读 · 0 评论 -
学习笔记——springboot系列_自动装配
前言所谓spring boot框架,归根结底就是一个bean工厂,将资源类通过一系列的操作装配成各种各样的bean来方便功能的实现。本文想要讲诉清楚的便是一系列的操作过程的逻辑和实现。就当前的层次来说,可以理解为,无非还是Java虚拟机加载目标class文件,通过封装以后作为资源注册到beanFactory。通过注解的方式来确定目标class文件springboot框架说白了就是,封装了spring框架繁杂的配置文件内容,用注解的形式来达到相同的目的。主要分为三种类型的注解:第一种为@compo原创 2020-12-01 17:27:26 · 143 阅读 · 1 评论 -
读书笔记——ConcurrentHashMap的补充说明
前言之前写过一篇关于ConcurrentHashMap的原理的文章,觉得看完以后应该大致理解ConcurrentHashMap是一个什么东西,但是对于其细节的部分,觉得读者自己去看看也比较好理解,就没去多说,现在回顾这个知识点的时候,发现细节部分有些遗忘,出于严谨和增加自己的记忆,觉得有必要再写一遍文章来说明Concurrent的细节部分。ConcurrentHashMapdd...原创 2020-11-30 16:12:23 · 108 阅读 · 0 评论 -
基础知识笔记——OOP七大原则
开闭原则:对扩展开发,对修改关闭。个人认为最重要的一个原则,尽可能的不对资源类进行操作,而是对资源类的操作类进行操作。里氏替换原则:继承必须确保超类所拥有的性质在子类依然成立。也就是说,子类继承父类的时候,尽可能的去添加方法实现,想要的功能,而不是去覆盖父类的方法。否则,多继承的情况下,想想都挺糟糕的。依赖倒置原则:面向接口编程,而不是面向实现编程。单一职责原则:控制类的力度大小,将对象解耦,提高棋内聚性。也就是说,一个类的方法,最好只干一件事,尽可能的避免和其他的方法干的事有联系,降低耦合。原创 2020-11-30 11:25:18 · 110 阅读 · 0 评论 -
浅谈动态代理的个人思考和理解
前言这篇文章主要谈的是自己各种反复学习的过程中,目前的一个思想和认知的总结,个人也很烦把写博客当成水经验的,和水论文数量的大部分人。我的内容基本是一个东西认知的思想精华和总结,基本不含代码,因为作者在学习阶段,代码和初学者的水平高不了一个等级,市面上有关动态代理的代码很多,能读我文章的人,也默认其有一定基础,但是好像又对这个东西模模糊糊,这类读者收获应该是最大的。什么是动态代理所谓动态代理就是,把一些类似于重复的日志,时间等大量重复的代码,利用切面的思维方式,提取出来,做成一个加工包装的工具,在要使用原创 2020-11-04 23:33:08 · 134 阅读 · 0 评论 -
读书笔记——Java对象
前言本文探讨的是new对象时的内存分配情况,主要是书本知识的总结和提炼,不过作者的另外一篇博客提到了对new对象时初始化的总结和理解,比较适合一起看。链接:https://editor.csdn.net/md/?articleId=108236252对象的创建类加载检查通过后,虚拟机将会为新生对象分配内存,对象所需的内存在类加载完成后便可以完全确定。假设Java堆完全规整,使用过的内存和未使用的内存中间放着一个指针作为分界点的指示器,所分配的内存就仅仅时把那个指针向空闲空间方向挪动一段与对象大小相等原创 2020-10-22 10:21:19 · 125 阅读 · 2 评论 -
JVM读书笔记一Java内存区域
运行时数据区域前言:本文主要是基于书上内容的总结提取,并不包含作者的思考和理解,作者的思考和理解有单独博客。一、程序计数器线程私有,可以看作是当前线程所执行的字节码的信号指示器,记录的是正在执行的虚拟机的字节码的地址。如果正在执行的是本地方法,则计数器应该为空,此内存区域是唯一一个在Java虚拟机规范中唯一没有规定任何OutOfMemoryError情况的区域。二、Java虚拟机栈线程私有,生命周期和线程相同,是Java方法执行的内存模型,每个方法被执行的时候,Java虚拟机会同步创建一个栈帧,原创 2020-10-21 16:29:38 · 166 阅读 · 0 评论 -
学习笔记——初始化个人理解
对象引用this关键字:只能在方法的内部使用,表示对调用方法的对象的引用。synchronized关键字,锁的是依旧是调用方法的对象。初始化类的静态属性会在类加载过程的准备阶段初始化后有初始化值,运行时可以直接通过类.静态字段打印初始化值。此时类并没有被初始化!!**类的非静态属性运行时可以通过创建对象打印类的属性初始化的值。**基本数据类型会自动初始化为0。创建对象时,先初始化类的属性,接下来才是类的方法。初始化类的属性时先初始化静态属性,静态属性和静态代码块的属性,按程序的先后顺序执行初始原创 2020-08-27 11:36:55 · 284 阅读 · 0 评论