03 2022 档案

摘要:1、垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。 1-1、垃圾收集器组合 JDK7/8后,HotSpot虚拟机所有收集器及组合( 阅读全文
posted @ 2022-03-11 16:20 高压锅里的大萝卜 阅读(239) 评论(0) 推荐(0) 编辑
摘要:即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方 阅读全文
posted @ 2022-03-11 15:12 高压锅里的大萝卜 阅读(140) 评论(0) 推荐(0) 编辑
摘要:对象的访问定位的两种方式 java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象。 由于reference类型在java虚拟机规范中只规定了一个对象的引用,并没有定义这个这个引用应该通过那种方式去定位、访问java堆中的具体对象实例,所以一般的访问方式也 阅读全文
posted @ 2022-03-11 14:54 高压锅里的大萝卜 阅读(522) 评论(0) 推荐(0) 编辑
摘要:不要说精通Java、Spring,能掌握70%就很不错了,其他的高级特性。。。 我们平常开发java程序时,总想开发一个代理程序监视记录类的运行情况,比如性能监控或运维人员很需要,比如调用业务方法时记录日志、计时等,除了AOP实现之外,还有一种实现,那就是基于java高级特性Instrumentat 阅读全文
posted @ 2022-03-11 14:40 高压锅里的大萝卜 阅读(401) 评论(0) 推荐(0) 编辑
摘要:1 基础知识 普通对象的结构如下,按64位机器的长度计算1. 对象头(_mark), 8个字节2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节3. 数据区4. Padding(内存对齐),按照8的倍数对齐 数组对象结构是1. 对象头(_mark), 8个字节2. Oop指针, 阅读全文
posted @ 2022-03-11 14:36 高压锅里的大萝卜 阅读(3491) 评论(3) 推荐(1) 编辑
摘要:最主要的区别就是栈内存用来存储局部变量和方法调用。 而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。 独有还是共享 栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。 而堆内存 阅读全文
posted @ 2022-03-11 14:06 高压锅里的大萝卜 阅读(299) 评论(0) 推荐(0) 编辑
摘要:1.类加载器(Class Loader):加载类文件到内存。Class loader只管加载,只要符合文件结构就加载,至于能否运行,它不负责,那是有Exectution Engine 负责的。 2.执行引擎(Execution Engine):也叫解释器,负责解释命令,交由操作系统执行。 3.本地库 阅读全文
posted @ 2022-03-11 13:55 高压锅里的大萝卜 阅读(442) 评论(0) 推荐(0) 编辑
摘要:Java线程池 - (二)内置线程池ExecutorService接口是Java内置的线程池接口,整体的继承关系如下: 其常用方法有: void shutdown() - 启动一次顺序关闭,执行以前提交的任务,但不接受新任务 List<Runnable> shutdownNow() - 停止所有正在 阅读全文
posted @ 2022-03-11 10:24 高压锅里的大萝卜 阅读(89) 评论(0) 推荐(0) 编辑
摘要:1.Java编程思想 *** 2.深入理解jvm虚拟机 ** 3.Java并发编程实战 ** 4.Effective Java ** 5.Java性能调优指南 ** 6.Tomcat架构解析 7.Spring实战 ** 8.Spring源码深度解析 *** 9. Maven实战 10.深入浅出MyS 阅读全文
posted @ 2022-03-10 15:32 高压锅里的大萝卜 阅读(17) 评论(0) 推荐(0) 编辑
摘要:为了引出 ConcurrentSkipListMap,先来简单理解下什么是跳表。 对于单链表,即使链表是有序的,如果想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。但一个重要 阅读全文
posted @ 2022-03-10 09:36 高压锅里的大萝卜 阅读(339) 评论(0) 推荐(0) 编辑
摘要:本文摘自,如有侵权,请联系我!!! 这是《死磕Java并发编程》系列的第7篇文章 我们在一起来看看 读写锁 ReentrantReadWriteLock 的源码分析,基于Java8。 阅读建议:由于Java并发包中的锁都是基于AQS实现的,本篇的读写锁也不例外。如果你还不了解的话,阅读起来会比较吃力 阅读全文
posted @ 2022-03-09 17:11 高压锅里的大萝卜 阅读(189) 评论(0) 推荐(0) 编辑
摘要:一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLo 阅读全文
posted @ 2022-03-09 16:15 高压锅里的大萝卜 阅读(149) 评论(0) 推荐(0) 编辑
摘要:1:为什么会出现Atomic类 在多线程或者并发环境中,我们常常会遇到这种情况 int i=0; i++ 稍有经验的同学都知道这种写法是线程不安全的。为了达到线程安全的目的,我们通常会用synchronized来修饰对应的代码块。现在我们有了新的方法,就是使用J.U.C包下的atomic类。 2:A 阅读全文
posted @ 2022-03-09 14:43 高压锅里的大萝卜 阅读(301) 评论(0) 推荐(0) 编辑
摘要:何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。 悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这 阅读全文
posted @ 2022-03-09 13:55 高压锅里的大萝卜 阅读(24) 评论(0) 推荐(1) 编辑
摘要:ReentrantLock在并发情况下只允许单个线程执行受保护的代码,而在大部分应用中都是读多写少,所以,如果使用ReentrantLock实现这种对共享数据的并发访问控制,将严重影响整体的性能。ReentrantReadWriteLock中提供的读取锁(ReadLock)可以实现并发访问下的多读, 阅读全文
posted @ 2022-03-09 13:40 高压锅里的大萝卜 阅读(62) 评论(0) 推荐(0) 编辑
摘要:1.同步关键字 Synchronized 2.并发包中锁 Lock 3.object对象等待通知 ObjectMonitor wait notify 4.锁对应的条件变量 并发包中锁的条件变量 condition await signal 5.并发包中的阻塞队列 BlockingQueue6.并发包 阅读全文
posted @ 2022-03-09 11:30 高压锅里的大萝卜 阅读(848) 评论(0) 推荐(0) 编辑
摘要:之前笔者分析了synchronized的偏向锁源码,我们今天继续来看synchronized的轻量级锁逻辑。关于轻量级锁,网上有很多说法都是轻量级锁在发生竞争时会进行自旋,但是经过笔者对源码的学习,并没有发现轻量级锁的自旋逻辑。笔者甚至去jdk6和jdk15中都进行了一番搜索,发现也不存在自旋的逻辑 阅读全文
posted @ 2022-03-08 15:28 高压锅里的大萝卜 阅读(658) 评论(0) 推荐(0) 编辑
摘要:什么是ThreadLocal? ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 测试代码: package com.javaBase.LineDistance; /** * 〈一句话功能简述〉; * 〈功能详 阅读全文
posted @ 2022-03-08 09:13 高压锅里的大萝卜 阅读(62) 评论(0) 推荐(0) 编辑
摘要:注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。 一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高 阅读全文
posted @ 2022-03-07 16:22 高压锅里的大萝卜 阅读(63) 评论(0) 推荐(0) 编辑
摘要:hotspot x86平台上的内存屏障的实现依赖于lock指令,而Intel的lock指令的实现依赖于缓存一致性协议(例如MESI)。 本文只介绍hotspot X86平台的内存屏障的实现,没有任何关于其他平台是怎么实现内存屏障的内容。 一、字节码解释器源码分析验证hotspot字节码解释器在处理p 阅读全文
posted @ 2022-03-07 09:31 高压锅里的大萝卜 阅读(393) 评论(0) 推荐(0) 编辑
摘要:首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。 所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。 而 Thread.interrupt 的作用其实也不是中断线程,而是「通知线程应该中断了」, 具体到底中断还是继 阅读全文
posted @ 2022-03-04 17:39 高压锅里的大萝卜 阅读(410) 评论(0) 推荐(0) 编辑
摘要:为什么会有happens-before 规则? 因为jvm会对代码进行编译优化,指令会出现重排序的情况,为了避免编译优化对并发编程安全性的影响,需要happens-before规则定义一些禁止编译优化的场景,保证并发编程的正确性。 主要解决多线程的可见性和排序性,解决不了原子性 public cla 阅读全文
posted @ 2022-03-04 16:31 高压锅里的大萝卜 阅读(62) 评论(0) 推荐(0) 编辑
摘要:Collection<E>是Java集合框架中的基本接口; Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作或返回集合的静态方法。 1) 排序(Sort)使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 阅读全文
posted @ 2022-03-04 15:03 高压锅里的大萝卜 阅读(173) 评论(0) 推荐(0) 编辑
摘要:package java.util; public interface Enumeration<E> { boolean hasMoreElements(); E nextElement(); } public interface Iterator<E> { boolean hasNext(); E 阅读全文
posted @ 2022-03-04 14:34 高压锅里的大萝卜 阅读(125) 评论(0) 推荐(0) 编辑
摘要:我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。 但是在使用的时候也是有不同的。List和Set都有iterator()来取得其迭代器。对List来说,你也可以 阅读全文
posted @ 2022-03-04 14:30 高压锅里的大萝卜 阅读(47) 评论(0) 推荐(0) 编辑
摘要:HashSet是最常用的Set集合之一,可以保证元素的唯一性。 底层原理 HashSet底层完全就是在HashMap的基础上包了一层,只不过存储的时候value是默认存储了一个Object的静态常量,取的时候也是只返回key,所以看起来就像List一样。 构造方法 可以看到四个构造方法都是初始化一个 阅读全文
posted @ 2022-03-04 13:57 高压锅里的大萝卜 阅读(535) 评论(0) 推荐(0) 编辑
摘要:本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识。happens-before相关内容参见:JLS §17.4.5. Happens-before Order、深入理解Java内存模型以及Happens b 阅读全文
posted @ 2022-03-04 13:20 高压锅里的大萝卜 阅读(191) 评论(0) 推荐(1) 编辑
摘要:我们关注的操作有:get,put,remove 这3个操作。 对于哈希表,Java中采用链表的方式来解决hash冲突的。一个HashMap的数据结构看起来类似下图: 实现了同步的HashTable也是这样的结构,它的同步使用锁来保证的,并且所有同步操作使用的是同一个锁对象。这样若有n个线程同时在ge 阅读全文
posted @ 2022-03-04 11:38 高压锅里的大萝卜 阅读(31) 评论(0) 推荐(0) 编辑
摘要:前言 ​ 提到双重检查锁(Double-Checked Locking)通常简称为DCL,肯定很多人第一时间想到的就是单例模式。 ​ 单例模式通常有两种方式:饿汉与懒汉模式。那么懒汉模式采用了延迟初始化来降低类创建造成的消耗,DCL是常见的延迟初始化技术,但它是一个错误的用法。下面来详细分析以下这种 阅读全文
posted @ 2022-03-03 10:46 高压锅里的大萝卜 阅读(576) 评论(0) 推荐(0) 编辑
摘要:前言我们常用的创建线程方式一般有下面 2 种: 继承Thread,重写run方法实现Runnable接口,重新run方法其实在 Executor 框架中还有一种方法可以实现异步,那就是实现 Callable 接口并重写call方法。虽然是实现 Callable ,但是在 Executor 实际运行时 阅读全文
posted @ 2022-03-01 11:45 高压锅里的大萝卜 阅读(740) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示