Java核心知识
文章平均质量分 82
Java核心知识
Coudy Hou
这个作者很懒,什么都没留下…
展开
-
Java核心01-JVM内存区域
Java虚拟机栈,线程私有的,生命周期与线程一致。每次方法调用的数据都是通过栈传递; 堆 Java虚拟机所管理的内存中最大的一块。在虚拟机启动时创建,堆是线程共享的。 唯一目的是存放对象实例,及数组的内存分配。JDK1.8后将运行时常量池也存放在堆中了。原创 2023-10-07 09:15:56 · 35 阅读 · 0 评论 -
Java核心02-HotSpot 虚拟机对象
JVM在给线程中的对象分配内存时,首先在TLAB分配,当对象大于TLAB中的剩余内存,或TLAB的内存已用尽时,再采用上述的CAS+重试 进行内存分配。对象所需的内存大小在类加载完成后便可知,为对象分配空间的任务等同于把一块确定大小的内存,从Java堆中划分出来。比如这个对象是哪个实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息,存放在对象头中。Java堆中将会划分出一块内存来作为句柄池,栈上的reference中存储的就是对象的句柄地址。原创 2023-10-08 09:25:27 · 42 阅读 · 0 评论 -
Java核心03-锁的升级
同步代码一直被一个线程所访问,锁总是由同一个线程多次获得,不存在多线程竞争,那么该线程会自动获取锁,降低获取锁的代价。轻量级锁适应的是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀为重量级锁。访问Mark Word 中是否偏向锁的标识是否设置为1,且锁的标志位是否为01,是,则确认为可偏向状态。偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,同时升级为轻量级锁,Mark Word 中存储的是指向重量级锁的指针,此时等待锁的线程都会进入阻塞状态。原创 2023-09-27 09:43:28 · 94 阅读 · 0 评论 -
Java核心04-乐观锁&悲观锁&自旋锁&可重入锁
Java锁-乐观锁&悲观锁&自旋锁&可重入锁原创 2023-09-26 10:01:09 · 56 阅读 · 0 评论 -
Java核心05-AQS&ReentrantLock&Synchronized等锁原理
AQS的核心思想是,如果被请求的共享资源是空闲,则将当前请求资源的线程设置为有效的工作线程(exclusiveOwnerThread),并且将共享资源设置为锁定状态。AQS 使用state 同步状态字段(0代表无锁,1代表有锁),并暴露出 getState、setState 以及 compareAndSet 操作来读取和更新这个状态,使得仅当同步状态拥有一个期望值时,才会被原子地设置成新值。公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,synchronized 锁是非公平锁。原创 2023-09-27 09:57:46 · 78 阅读 · 0 评论 -
Java核心06-ReentrantLock类源码分析
ReentrantLock类,主要利用CAS+AQS(AbstractQueueSynchronizer)队列来实现,实现了Lock锁; 基本实现过程:先通过CAS尝试获取锁,如果此时已经有线程占据了锁,那就加入AQS队列并且挂起。当锁被释放之后,排在列队首的线程会被唤醒,然后CAS再次尝试获取锁。 ReentrantLock中包含内部类有: 1)继承了AbstractQ...原创 2020-01-20 14:57:22 · 147 阅读 · 1 评论 -
Java核心07-并发包-java.util.concurrent.*
表示当某个任务执行完成后执行的回调方法,会将执行结果和执行期间抛出的异常传递给回调方法。回调方法对应的CompletableFuture 的result 和该任务一致,如果该任务正常执行,则get 方法返回执行结果,如果是执行异常,则get 方法抛出异常。执行awite() 方法时,其实同样采用CAS 方式,是去获取state 的值,当state=0时,跳出循环,执行结束。表示某个任务执行完成后执行的动作,即回调方法,会将该任务的执行结果即方法返回值作为入参传递到回调方法中,带有返回值。原创 2023-09-28 10:11:16 · 79 阅读 · 0 评论 -
Java核心08-JVM内存结构垃圾回收机制
JVM内存结构,JVM垃圾回收机制。G1,CMS收集器原创 2023-10-10 10:01:46 · 105 阅读 · 0 评论 -
Java核心09-JVM性能调优
JVM性能调优,JVM性能调优工具,CPU飙升原创 2023-10-11 09:08:47 · 57 阅读 · 0 评论