java
文章平均质量分 85
陌养
永远相信美好的事情正在发生
展开
-
java 继承权限相关解析
(1)类的成员的权限修饰符有public,protected,private或default,限定其他对象对该类对象成员的访问权限。(2)class的权限修饰符只可以是public或default。default:类只可以被同一个包内部的类访问。public:类可以在任何地方被访问;转载 2024-03-06 19:57:17 · 64 阅读 · 0 评论 -
类加载器详解
类加载器是一个负责加载类的对象。ClassLoader 是一个抽象类。给定类的二进制名称,类加载器应尝试定位或生成构成类定义的数据。典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。每个 Java 类都有一个引用指向加载它的 ClassLoader。类加载器是一个负责加载类的对象,用于实现类加载过程中的加载这一步。每个 Java 类都有一个引用指向加载它的 ClassLoader。转载 2024-03-05 22:36:21 · 60 阅读 · 0 评论 -
jvm的类加载机制
其中,验证、准备和解析这三个阶段可以统称为连接(Linking)。转载 2024-03-03 23:31:40 · 37 阅读 · 0 评论 -
类文件结构详解
根据 Java 虚拟机规范,Class 文件通过 ClassFile 定义,有点类似 C 语言的结构体。u4 magic;//Class 文件的标志//Class 的小版本号//Class 的大版本号//常量池的数量//常量池//Class 的访问标记//当前类//父类//接口数量//一个类可以实现多个接口//字段数量//一个类可以有多个字段//方法数量//一个类可以有个多个方法//此类的属性表中的属性数//属性表集合。转载 2024-03-03 10:07:37 · 51 阅读 · 0 评论 -
JVM垃圾回收详解
Serial 收集器 + Serial Old 收集器ParNew 收集器 +Serial Old 收集器ParNew 收集器 + CMS 收集器(老年代))Parallel Scavenge 收集器 + Parallel Old 收集器。转载 2024-03-03 00:41:43 · 77 阅读 · 0 评论 -
java引用类型总结
弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java 虚拟机就会把这个弱引用加入到与之关联的引用队列中。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,JAVA 虚拟机就会把这个软引用加入到与之关联的引用队列中。转载 2024-03-02 17:10:06 · 39 阅读 · 0 评论 -
HotSpot 虚拟机对象探秘
我们来详细的了解一下 HotSpot 虚拟机在 Java 堆中对象分配、布局和访问的全过程。转载 2024-03-02 16:06:36 · 36 阅读 · 0 评论 -
Java内存区域详解
Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。转载 2024-03-02 11:58:21 · 72 阅读 · 0 评论 -
java线程池相关核心内容_ThreadPoolExecutor 类介绍
ThreadPoolExecutor 类中提供的四个构造方法。我们来看最长的那个,其余三个都是在这个构造方法的基础上产生(其他几个构造方法说白点都是给定某些默认参数的构造方法比如默认制定拒绝策略是什么)。/*** 用给定的初始参数创建一个新的ThreadPoolExecutor。*/public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量int maximumPoolSize,//线程池的最大线程数。转载 2024-03-01 21:38:17 · 36 阅读 · 0 评论 -
java线程池Executor 执行流程解析
Executor 框架是 Java5 之后引进的,在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。Executor 框架结构主要由三大部分组成:1、任务(Runnable /Callable)执行任务需要实现的 Runnable 接口 或 Callable接口。转载 2024-02-29 00:25:26 · 109 阅读 · 0 评论 -
Atomic 原子类详解
使用原子的方式更新基本类型AtomicInteger:整型原子类AtomicLong:长整型原子类AtomicBoolean:布尔型原子类上面三个类提供的方法几乎相同,所以我们这里以 AtomicInteger 为例子来介绍。CAS 的原理是拿期望的值和原本的一个值作比较,如果相同则更新成新的值。UnSafe 类的 objectFieldOffset() 方法是一个本地方法,这个方法是用来拿到“原来的值”的内存地址。转载 2024-02-28 09:58:05 · 71 阅读 · 0 评论 -
java并发容器之线程安全的queue
Java 提供的线程安全的 Queue 可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是 BlockingQueue,非阻塞队列的典型例子是 ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。转载 2024-02-28 09:34:13 · 90 阅读 · 0 评论 -
java并发容器CopyOnWriteArrayList解析
JDK1.5 引入了 Java.util.concurrent(JUC)包,其中提供了很多线程安全且并发性能良好的容器,其中唯一的线程安全 List 实现就是 CopyOnWriteArrayList。转载 2024-02-28 09:23:32 · 42 阅读 · 0 评论 -
java并发类型容器ConcurrentHashMap解析
在 JDK1.7 的时候,ConcurrentHashMap 对整个桶数组进行了分割分段(Segment,分段锁),每一把锁只锁容器其中一部分数据(下面有示意图),多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。老数组里的数据移动到新的数组时,位置要么不变,要么变为 index+ oldSize,参数里的 node 会在扩容之后使用链表。即为当前 key 定位出的 Node,如果为空表示当前位置可以写入数据,利用 CAS 尝试写入,失败则自旋保证成功。如果是链表,遍历查找之。转载 2024-02-28 00:13:26 · 30 阅读 · 0 评论 -
AQS 解析与原理分析
同步器的设计是基于模板方法模式的。使用者继承AbstractQueuedSynchronizer 并重写指定的方法。将 AQS 组合在自定义同步组件的实现中,并调用其模板方法,而这些模板方法会调用使用者重写的方法。//独占方式。尝试获取资源,成功则返回true,失败则返回false。//独占方式。尝试释放资源,成功则返回true,失败则返回false。//共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源。//共享方式。转载 2024-02-27 00:27:55 · 39 阅读 · 0 评论 -
java中的锁
synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令,其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指明同步代码块的结束位置。synchronized 修饰的方法并没有 monitorenter 指令和 monitorexit 指令,取得代之的确实是 ACC_SYNCHRONIZED 标识,该标识指明了该方法是一个同步方法。不过两者的本质都是对对象监视器 monitor 的获取。转载 2024-02-26 23:40:45 · 28 阅读 · 0 评论 -
ThreadLocal 详解
ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个ThreadLocal变量,,这也是ThreadLocal变量名的由来。他们可以使用 get() 和 set() 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。转载 2024-02-25 16:40:00 · 35 阅读 · 0 评论 -
java线程相关内容大总结
JDK 1.2 之前,Java 线程是实现的,这是一种用户级线程(用户线程),也就是说由于绿色线程和原生线程比起来在使用时有一些限制(比如绿色线程不能直接使用操作系统提供的功能如异步 I/O、只能在一个内核线程上运行无法利用多核),在,Java 线程改为基于原生线程(Native Threads)实现,也就是说。转载 2024-02-25 16:03:59 · 28 阅读 · 0 评论 -
java集合详解-关于map系列
通过 key 的 hashcode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度,所谓扰动函数指的就是 HashMap 的 hash 方法。JDK1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。如果不指定会有默认值.解决元素冲突:拉链法。转载 2024-02-24 15:11:53 · 28 阅读 · 0 评论 -
java集合解析-Collection 类型
Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是,主要用于存放单一元素;另一个是,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue。没有stack接口,因为stack被jdk1.6引入的Deque取代。原创 2024-02-22 23:41:53 · 1008 阅读 · 0 评论 -
Java 代理模式详解
定义发送短信的接口实现发送短信的接口在 Java 动态代理机制中 InvocationHandler 接口和 Proxy 类是核心。Proxy 类中使用频率最高的方法是:newProxyInstance() ,这个方法主要用来生成一个代理对象。loader :类加载器,用于加载代理对象。interfaces : 被代理类实现的一些接口;h : 实现了 InvocationHandler 接口的对象;要实现动态代理的话,还必须需要实现InvocationHandler 来自定义处理逻辑。转载 2024-02-22 09:55:28 · 77 阅读 · 0 评论 -
java反射机制解析
缺点:让我们在运行时有了分析操作类的能力,这同样也增加了安全问题。比如可以无视泛型参数的安全检查(泛型参数的安全检查发生在编译时)。另外,反射的性能也要稍差点,不过,对于框架来说实际是影响不大的。Class 类对象将一个类的方法、变量等信息告诉运行的程序。但是我们一般是不知道具体类的,基本都是通过遍历包下面的类来获取 Class 对象,通过此方式获取 Class 对象不会进行初始化。通过类加载器获取 Class 对象不会进行初始化,意味着不进行包括初始化等一系列步骤,静态代码块和静态对象不会得到执行。转载 2024-02-21 23:40:02 · 25 阅读 · 0 评论 -
String 必知必会底层逻辑
String 类中使用 final 关键字修饰字符数组来保存字符串。原创 2024-02-21 09:08:35 · 257 阅读 · 0 评论