- 博客(25)
- 收藏
- 关注
原创 JVM内存模型
JVM简单了解Java的跨平台性Java的跨平台性,能够实现跨平台的是Java程序,而不是JVM,JVM是用C/C++开发,是编译之后的机器码,无法实现跨平台,不同的平台下需要安装不同的JVM.而写好的Java程序,编译之后会生成字节码文件,即.class文件,JVM就是负责将字节码文件翻译成特定平台下的机器码然后运行,在不同的平台上安装对应的JVM,就可以来U运行字节码文件,通过这一“中间层”,在不同平台上运行Java程序,实现“一次编译,到处运行”的目的JVM概念JVM 即Java Virtu
2021-02-22 19:38:43
254
原创 JVM类加载和双亲委派模型
类加载子系统作用:将字节码文件加载到居jvm中,在类第一次被使用时,是需要初始化类文件过程:装载、链接、初始化装载:功能就是来加载类,使用到了三个类加载器,分别是Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader链接:1、验证:字节码验证器将验证生成字节码是否正确,如果验证失败,将得到验证错误2、准备:对于所有的静态变量,进行分配内存并给定默认值 tmp分配内存,并给定默认值null3、解析: 将所有的符号
2021-02-22 18:45:23
175
原创 JVM垃圾回收
JVM垃圾回收垃圾回收基本原理四种回收类型对象被标记为垃圾的方法引用计数法可达性分析垃圾回收算法标记-清除算法缺点复制算法标记-整理算法分代回收算法内存的分配和回收分配策略:内存分配担保机制:垃圾回收基本原理GC(Garbage Collection:垃圾回收)基本原理:将内存中不在使用的对象进行回收,GC中用户回收的方法称之为回收器,由于GC需要消耗一定的资源和时间的,GC主要作用于堆空间,根据对象的生命周期的特征进行分析按照新生代,老年代的方式来对对象进行收集,尽可能少的缩短GC操作对应用程序的暂停
2021-02-22 18:32:39
122
原创 redis事务
Redis 事务简介Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞,允许在一次单独的步骤中执行一组命令)。一个事务从开始到执行会经历三个阶段:开始事务。命令入队。执行事务。redis事务特点:1、批量操作在发送EXEC命令前被放入队列缓存。2、收到EXEC命令之后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。3、在事务执行过程,其它客户端提交命令请求不会被插入到事务执行命令的序列中。redis事务基本语句:multi //标
2020-11-10 21:07:17
105
原创 redis的内存维护策略
redis的内存维护策略原因:内存维护解决方案设置超时时间LRULFULRU与LFU差别:原因:redis作为优秀的中间缓存件,时常会存储大量的数据,即使采取了集群部署来动态扩容,也应该即使的整理内存,维持系统性能。Redis官方也给出警告,当内存不足时,Redis会根据配置的缓存策略淘汰大部分keys,以保证写入成功。当无淘汰策略时或没有找到合适的key时,Redis直接返回out of memory错误。内存维护解决方案设置超时时间设置超时时间,超过规定时间就会过期expire key s
2020-11-10 19:57:05
126
原创 redis持久化
redis持久化原因通常情况,redis数据全部存储在内存中,数据库一旦发生故障数据会丢失,造成很大损失,因此需要进行持久化。redis持久化功能在于能够有效的避免因进程异常退出造成的数据丢失问题,若数据库发生故障,在下次重启时利用持久化的文件即可实现数据恢复。进行持久化后,数据将存放在磁盘中,断电后数据依旧存在,在恢复故障环境下的数据库有着非常重要的意义redis持久化方案:RDB是快照式的数据存储方式,会周期性保存当前时间点的redis数据并放入磁盘AOF是追加式的数据存储方式,会实时记录
2020-11-10 19:12:16
111
原创 redis基本操作
redis基本语句key基本操作设置key的生存时间value的基本操作:String类型:list类型:set类型Zset类型:hash类型:清空redis所有keykey基本操作1、exists key //确认一个key是否存在,存在为1,不存在为02、set key value //设置key和value3、get key //获取key和value4、del key //删除一个key5、type key //返回值的类型6、keys pattern
2020-11-10 13:11:47
170
原创 Linux文件简单操作
Linux文件简单操作查看文件创建文件删除文件文件复制与重命名文件复制粘贴文件移动压缩打包文件查看命令文本查看vim命令查看文件ls 查看当前目录下的文件如:-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出-r 将文件以相反次序显示(原定依英文字母次序)-t 将文件依建立时间之先后次序列出-A 同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)-F 在列出
2020-10-24 16:45:15
160
原创 Linux文件类型及权限
文件类型及操作文件类型查看文件类型文件权限修改文件权限文件类型Linux 下所有的东西(包括内存、网卡、外部设备等等)都可以看做文件,Linux 将文件 分为以下五种类型:1、普通文件 第一个属性为‘-’Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.2、目录文件 第一个属性为‘d’即目录, 能用 # cd 命令进入的3、管道文件 第一个属性为 ‘p’主要的目的是,解决多个程序同时存取一个文件所
2020-10-24 15:04:16
516
原创 Linux目录结构简单介绍
Linux目录Linux目录结构常见目录说明路径绝对路径与相对路径路径切换查看目录下的文件Linux家目录Linux根目录和家目录的区别用户切换添加用户删除用户Linux目录结构Linux 系统的目录结构是一颗倒状树:/:目录结构起始 ,根目录常见目录说明/bin 存放常用命令/boot 系统内核及启动有关的文件/dev 存放设备文件广义上的文件,键盘鼠标都可以抽象为文件然后获取消息。/etc 存放系统配置文件系统的运行相关的属性 参数等/proc 这个目录是一个虚拟的目录,进程在
2020-10-24 14:02:45
176
原创 初识Linux
初识Linux:Linux简介Linux 就是一组软件,而软件分为操作系统软件和应用软件,当然 Linux 属于操作系统软件。计算机是由一堆硬件组成的,为了有效的控制这些硬件资源,于是乎就有了操作系统的 产生,操作系统除了有效的控制这些硬件资源的分配,并提供计算机运作所需要的功能(如网络功能)之外,为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一 组系统调用的接口。而 Linux就是一款十分成熟的操作系统软件。操作系统软件作用: 1、控制硬件资源 2、提供计算机运作所需要的功能 3
2020-10-10 15:46:51
272
原创 ConcurrentHashMap简单了解
1、ConcurrentHashMap基本特点:1、和HashMap功能基本一致,主要解决HashMap的线程不安全问题2、不允许有空值和空键,否则抛出异常2、ConcurrentHashMap底层数据结构JDK1.8之前:ConcurrentHashMap通过segments来实现,segments继承自ReentrantLock,在ConcurrentHashMap中充当分段锁,每一个table(桶)都有一个segments,可以提高并发效率。table(桶)相对于HashMap中数组,桶中
2020-07-23 16:39:21
189
原创 死锁 简单了解
1、什么是死锁1.1:死锁定义:死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。1.2:死锁产生条件:1)互斥条件:某个资源某一时刻只能由一个线程占用2)不可抢占条件:资源申请者不能从资源占有者手中抢夺资源3)占有且申请:线程至少已经占有一个资源,但又去申请新的资源,新资源被占用,该线程会阻塞4)循环等待:一个线程等待另外一个线程释放资
2020-07-22 20:29:24
279
原创 阻塞队列 简单了解
BlockingQueue(阻塞队列):在生产者和消费者模型中,通过队列可以实现两者数据共享,若在某个时间段内,生产出的数据的速度大于消费速度时,就会发生阻塞,为处理这种情况,这时就需要阻塞队列。在多线程中,阻塞就是在某种情况下挂起线程,满足条件后,就要唤醒。BlockingQueue基本方法:1.放入数据(1)offer(anObject):表示如果可以容纳的话,将元素添加进队列中,返回true,否则返回false. (2)offer(E o, long timeout, TimeU
2020-07-07 20:16:26
220
原创 Java wait()、notify()、notifyAll() 和 await()、signal()、signalAll() 简单了解
Java wait()、notify()、notifyAll() 和 await()、signal()、signalAll() 简单了解:1、wait()、notify()、notifyAll() :这三个方法都属于Object的一部分,而不属于Thread,只能在同步方法或者同步控制块中使用,否则会抛出IllegalMonitorStateException。wait():让线程处于等待状态notify():唤醒一个处于wait的线程notifyAll():唤醒所有处于wait状态的线程wa
2020-07-07 18:48:16
982
原创 ReentrantLock 简单理解
ReentrantLock在Java中是可重入锁可重入锁:即递归锁,指的是在同一线程,外层函数获得锁之后,内层递归函数仍然有获得该锁的代码,但不受影响ReentrantLock公平锁和非公平锁:ReentrantLock锁实现了Lock接口,里面具体锁的实现使用了抽象内部类Sync。Sync有两个实现类,NonfairSync和FairSync,即公平锁和非公平锁。public ReentrantLock() { sync = new NonfairSync();}public Reen
2020-07-07 16:45:30
170
原创 synchronized 简单介绍
synchronized线程安全是Java并发编程重点,synchronized是Java中的关键字,是一种同步锁,可以有效解决线程安全问题。在Java中,synchronized关键字可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,并且使得一个线程中,共享数据的变化可以被其他线程看到(可见性,代替volatile功能),synchronized为互斥锁(存在多个线程操作共享数据时,其他线程必须等待该线程处理完之后再进行)。1、Java对象的组成在jvm中,对象在内存中的布局分为3部分
2020-07-07 14:38:55
198
原创 线程安全问题 volatile
线程安全问题和volatile线程安全问题volatile线程安全问题线程不安全:多个线程共享一个全局变量,当一个线程对其进行操作可能会受到其他线程的干扰,这是就是线程不安全;线程安全:多个线程共享一个全局变量,不管通过怎样的调用方式,其结果都是预想的结果,这就是线程安全。线程安全问题出现条件:1、有多个线程运行2、多个线程有同一共享资源3、对共享的资源进行非原子性操作比如进行10000次循环,线程安全的应该输出10000,但线程不安全的输出不为10000,没有得到期望结果import j
2020-07-07 11:51:02
315
原创 Java集合 WeakHashMap
WeakHashMap和HashMap一样,是一个散列表,存储的内容也是键值对(key-value)映射,键和值都可以为null。区别是WeakHashMap的键是“弱键”(当WeakHashMap某个键不再正常使用时,会被从WeakHashMap自动删除)WeakHashMap的继承关系public class WeakHashMap<K,V> extends A...
2020-04-12 19:58:05
97
原创 Java集合 HashMap
HashMap实际上是一个散列表结构的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体。jdk1.8之前,是数组和链表实现jdk1.8之后,采用数组加链表加红黑树实现,当链表的长度超过阈值8时,链表转为红黑树。HashMap是基于哈希表的Map接口实现(Map是存储键值对的容器,底层基于哈希表实现,对于Map的键可以是任意类型的对象,但不能够有重复的键,每个键对应一个值)哈希冲...
2020-04-04 16:34:24
120
原创 Java集合 PrioityQueue
PriorityQueue简介:优先级队列PriorityQueue是0或者多个元素的集合,每一个元素都有一个优先权,一般执行的操作有查找,插入,删除等,与队列不同的是每次从优先级队列中取出的都是具有最高优先权的元素。使用特点:1、不能添加null元素,默认构建是小根堆;2、不允许使用null元素,且对象必须是可比较的;3、放置元素时,包含判断元素是否重复。继承关系:public c...
2020-04-04 13:25:14
233
原创 Java 集合 LinkedList
LinkedList集合底层是基于双向链表实现的,有头结点和尾节点,所以我们可以从头遍历或从尾部逆向遍历,特点是删除和添加元素的效率高,查询效率低,线程不安全。LinkedList的继承关系:public class LinkedList<E> extends AbstractSequentialList<E> implements ...
2020-04-03 18:47:06
98
原创 反射和注解
注解注解(元数据)为我们在代码中添加信息提供一种形式化的方法,我们可以在某个时刻非常方便的使用这些数据。将的通俗一点,就是为这个方法增加的说明或功能。注解都有父接口 Annotation.java表明当前注解作用类型 ElementType.java表明当前注解的作用域 RetentionPolicy.javaSOURCE - 当前注解仅仅能存在源码中,只能存在于编译期间CLASS...
2019-12-07 21:45:42
102
原创 封装继承多态
封装是什么? 简单的讲就是把对象的不能让和不需要让外部看见和更改的成员变得不可见。为何要封装? 增加访问限制,只让外界使用本类所想提供的功能,让外界不能随意破坏对象。封装的优点: 1. 良好的封装能够减少耦合。 2. 类内部的结构可以自由修改。 3. 可以对成员变量进行更精确的控制 4. 隐藏信息,实现细节。继承:继承...
2019-11-29 23:12:46
102
翻译 Java数组的复制
import java.util.Arrays;import java.util.Random;/** * 使用for循环、clone、Arrays.copyOf()、System.arrayCopy()实现二维数组的拷贝。 */public class kaoBei { public static void main(String[] args){ Rand...
2019-11-08 18:33:24
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人