Java
文章平均质量分 52
Oasen
黑森林法则
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
笔记H《JVM&GC》
文章目录JVMJVM 内存结构垃圾回收算法GC RootJVM参数配置查看当前运行程序的配置查看JVM默认值参数常见参数GC日志JVMJVM 内存结构垃圾回收算法引用计数复制标记清除标记整理GC Root什么是垃圾:内存中已经不在被使用到的空间就是垃圾,要进行垃圾回收,首先需要判断一个对象是否可以被回收。如何判断一个对象是否可以被回收:引用计数;Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回原创 2020-07-04 15:04:00 · 1084 阅读 · 0 评论 -
笔记G《线程池》
文章目录Callable 接口Callable 演示线程池示例ThreadPoolExecutor线程池的工作原理handler 拒绝策略死锁Callable 接口Java创建线程的4中方式:继承Thread类:浪费仅有的一次继承机会实现Runnable接口:无返回值实现Callable接口:可以有返回值,可抛出异常,可中断通过线程池创建:线程复用,但是实际开发中应该自己实现线程池相对于Runnable接口而言,Callable接口的优势在于:判断线程任务是否完成或者被取消能够中断任原创 2020-07-04 01:22:23 · 358 阅读 · 0 评论 -
笔记F《阻塞队列》
文章目录阻塞队列BlockingQueue阻塞队列阻塞队列,首先是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图:当阻塞队列是空,从队列中获取元素的操作将会被阻塞;当阻塞队列为满,往队列中添加元素的操作将会被阻塞。阻塞,在多线程环境中会挂起线程(线程阻塞),一旦条件满足,被挂起的线程会被自动唤醒。BlockingQueueBlockingQueue让我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程:继承树:ArrayBlockingQueue由数原创 2020-07-03 22:49:03 · 421 阅读 · 0 评论 -
笔记E《CountDownLatch/CyclicBarrier/Semaphore》
文章目录CountDownLatchCyclicBarrierSemaphoreCountDownLatch让一些线程阻塞直到另外一些完成后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await方法时,调用线程会被阻塞.其他线程调用 countDown 方法计数器减1(调用 countDown 方法时线程不会阻塞),当计数器的值变为0,因调用await方法被阻塞的线程会被唤醒,继续执行。public class CountDownLatchDemo { pu原创 2020-07-03 20:16:45 · 218 阅读 · 0 评论 -
笔记D《公平锁/非公平锁/可重入锁/递归锁/自旋锁》
文章目录公平锁 & 非公平锁可重入锁(递归锁)自旋锁独占锁 & 共享锁公平锁 & 非公平锁公平锁公平锁是指多个线程按照申请所的顺序来获取,先来先得。在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列。如果为空,或者当前线程是等待队列的第一个,就占有锁,佛则就加入到等待队列中,按照 FIFO 的规则取出。非公平锁非公平锁是指在多线程获取锁的顺序并不是按照申请锁的顺序,而是一种抢占式的方式来获取锁。synchronized,ReentrantLock 都原创 2020-07-03 19:25:30 · 178 阅读 · 0 评论 -
笔记B《CAS》
文章目录CAS缺点ABA 问题CASCAS: compare and swap,比较并交换。先来看如下代码,原子类的写操作是先比较在设置。当且仅当对象偏移量V上的值和预期值A相等时,才会用更新值B更新V内存上的值,否则不执行更新。但是无论是否更新了V内存上的值,最终都会返回V内存上的旧值。public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = n原创 2020-07-03 17:20:33 · 308 阅读 · 0 评论 -
笔记A《volatile 的理解》
volatile 关键字原创 2020-07-03 16:22:44 · 699 阅读 · 0 评论 -
git -- 根据时间查看提交的代码量
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --since ==2020-4-1 --until=2020-4-17 --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed l原创 2020-06-08 11:19:41 · 1784 阅读 · 0 评论 -
Json 解析学习
数据:{“name”:“userGroup”, “users”: [{“password”:“123123”,“username”:“zhangsan”}, {“password”:“321321”,“username”:“lisi”}]}需要创建两个 JavaBean,第一个 JavaBean 包括 String 类型的 name,和 List 类型 的 users。因为 users 有中括号...原创 2020-06-08 11:18:02 · 450 阅读 · 0 评论 -
多线程复习归纳
并行:多个任务可以同时执行;并发:多个任务在一个极短的时间间隔交替执行,但是这依然给人一种多个任务同时执行的感觉。并行一定是并发的,但是并发不是并行。并行基本可以看作是一种理想情况下的操作。线程创建线程创建实际上有三种方式:继承 Thread 类实现 Runnable 接口实现 Callable 接口public static void main(String[] args) ...原创 2019-09-29 10:16:21 · 472 阅读 · 0 评论 -
HashMap 分析
HashMap 在 JDK1.8 之前使用了 “数据 + 链表” 的结构,数组是 HashMap 的主体,链表主要是解决 哈希冲突而处在的。在 JDK 1.8 以后采用了 “数组+链表+红黑树” 的结构,当链表长度大于阈值,就可以将链表转化成红黑树。如果所示这是 JDK1.7 基于 “数据+链表” 的 HashMap 结构。在 JDK 1.8 中,当链表长度大于阈值时,就会将 “链表” 转化...原创 2019-09-27 23:56:55 · 217 阅读 · 0 评论 -
二叉树
文章目录二叉树完全二叉树满二叉树平衡二叉树红黑树B-tree(B tree)二叉树二叉树是节点最多有两个子树(左子树,右子树)的树结构。完全二叉树设二叉树的深度为 h,其它(1 ~ h-1)各层的节点数都达到了最大(两个子树),同时第 h 层的所有节点都连续集中在最左侧。即为 完全二叉树。叶子节点只能出现在 h 层和 (h-1)层;h 层的节点都集中在改层的最左侧;(h-1)层的部...原创 2019-09-20 16:05:43 · 343 阅读 · 0 评论 -
JVM 总结
Java 虚拟机在执行 java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。可以分为:线程私有,线程共享两个区域。线程私有的数据区域的生命周期与线程生命周期相同,依赖于用户线程的“启动、结束”而“创建、销毁”。因此线程私有内存与线程紧密相关。程序计数器一块较小的内存空间,是当前线程所执行的字节码的行号指示器。 每个线程都有一个单独,独立的程序计数器。程序计数器是唯一一个...原创 2019-08-16 02:35:46 · 132 阅读 · 0 评论 -
java 集合初涉
java 集合主要有三类:set、list、mapset:只是简单地将不相同元素添加到集合中,没有顺序可言。list:代表一个元素有序、元素可重复的集合。map:用于保存具有映射关系的数据。<key,value>原创 2019-06-18 17:28:25 · 293 阅读 · 0 评论 -
JVM调优(转载)
转载 FromJVM调优总结(一)-- 一些概念JVM调优总结(二)-一些概念JVM调优总结(三)-基本垃圾回收算法JVM调优总结(四)-- 垃圾回收面临的问题JVM调优总结(五)-- 分代垃圾回收详述1JVM调优总结(六)-- 分代垃圾回收详述2JVM调优总结(七)-- 典型配置举例1JVM调优总结(八)-- 典型配置举例2JVM调优总结(九)-- 新一代的垃圾回收算法JV...转载 2019-03-21 13:15:23 · 234 阅读 · 0 评论 -
冒泡、插入、选择、归并、快速、希尔、堆、基数排序总结
冒泡排序插入排序选择排序归并排序快速排序希尔排序堆排序基数排序原创 2020-06-08 11:04:00 · 521 阅读 · 0 评论
分享