Loading

摘要: Atomic原子类 Atomic原子类位于并发包java.util.concurrent下的java.util.concurrent.Atomic中。 1. 原子更新基本类型类 使用原子方式更新基本数据类型,Atomic提供以下3个类 AtomicInteger:原子更新整型 AtomicBoole 阅读全文
posted @ 2020-08-15 22:21 Chiakiiii 阅读(153) 评论(0) 推荐(0) 编辑
摘要: CAS相关 1. 概念以及特性 CAS (Compare and Swap) :比较并交换。 CAS的算法过程:CAS(V, E, N) 包含3个参数,其中V表示要更新的变量(内存值),E表示期望值(旧值),N表示新值。当且仅当V值与E值相等时,才会将V值设置为N;如果V值和E值不等,说明已有其他线 阅读全文
posted @ 2020-08-15 16:57 Chiakiiii 阅读(140) 评论(0) 推荐(0) 编辑
摘要: synchronized关键字相关 1. synchronized关键字简介 synchronized关键字解决多线程间访问资源的同步性,保证被其修饰的方法或代码块在任意时刻只能有一个线程执行。 在JDK1.6之前,synchronized是一种重量级锁,效率低下。如果要挂起或者唤醒一个线程,都需要 阅读全文
posted @ 2020-08-15 01:41 Chiakiiii 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1. volatile的特性 volatile是Java语言提供的一种轻量级的同步机制,用来确保将变量得更新操作通知到其它线程。具备三种特性: 保证变量的可见性; 对于volatile修饰的变量进行单次读/写操作可以保证原子性,对于i++这样的多次操作不保证原子性; 防止指令重排(通过在指令序列中插 阅读全文
posted @ 2020-08-13 23:42 Chiakiiii 阅读(203) 评论(0) 推荐(0) 编辑
摘要: Java内存模型(JMM) 1. 计算机内存系统 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必会涉及到数据的读取和写入。 由于在程序运行过程中,临时数据是存放在主存(物理内存)中的,这时就存在一个问题,由于CPU执行指令的速度很快,而从内存读取和写入数据的过程与其相比速度 阅读全文
posted @ 2020-08-13 00:06 Chiakiiii 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1. Java对象的创建过程 类加载检查 > 分配内存 > 初始化零值 > 设置对象头 > 执行init方法 1.1 类加载检查 虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,就必须执行相 阅读全文
posted @ 2020-08-12 00:44 Chiakiiii 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 1. JVM常用参数 配置项 例子 含义 备注 -Xmx -Xmx20m java应用最大可用内存为20M 整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 阅读全文
posted @ 2020-08-11 00:43 Chiakiiii 阅读(213) 评论(2) 推荐(1) 编辑
摘要: 1.OopMap 在正式的GC之前,要进行可达性分析来标记出将来可能要宣告死亡的对象。如果每次GC的时候都要遍历所有的引用,这样的工作量是非常大的。因为在可达性分析的时候要保证期间不发生引用关系的变化,所有执行线程要停顿等待,称为“Stop The World”,程序中的线程需要停止来配合可达性分析 阅读全文
posted @ 2020-08-10 23:54 Chiakiiii 阅读(361) 评论(0) 推荐(0) 编辑
摘要: JVM垃圾回收(GC) 1. 判断对象是否可以被回收 引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,但无法解决对象相互循环引用的问题。 // 循环引用 Node a=new Node(); Node b=new Node(); a 阅读全文
posted @ 2020-08-10 23:24 Chiakiiii 阅读(305) 评论(0) 推荐(0) 编辑
摘要: Java内存区域 1. 进程与线程 进程:进程是程序的一次执行过程。系统运行一个程序就是进程从创建到运行再到消亡的过程。 线程:一个进程中包含多个线程,线程共享进程的堆和方法区的资源以及直接内存,同时线程私有资源的包括程序计数器、虚拟机栈和本地方法栈。 2. JVM运行时区域 2.1 程序计数器: 阅读全文
posted @ 2020-08-10 21:05 Chiakiiii 阅读(208) 评论(0) 推荐(0) 编辑