Java学习笔记
文章平均质量分 81
学习和总结。
Java-Talk
这个作者很懒,什么都没留下…
展开
-
如何理解BIO、NIO、AIO的区别?
很多文章在谈论到BIO、NIO、AIO的时候仅仅是抛出一堆定义,以及一些生动的例子。看似很好理解。但是并没有将最基础的本质原理显现出来,如果没有没有从IO的原理出发的话是很难理解这三者之间的区别的。所以本篇文章从Java是如何进行IO操作为开头进行分析。Java中的IO原理首先Java中的IO都是依赖操作系统内核进行的,我们程序中的IO读写其实调用的是操作系统内核中的read&write两大系统调用。那内核是如何进行IO交互的呢?网卡收到经过网线传来的网络数据,并将网络数据写到内.转载 2022-05-10 15:51:56 · 529 阅读 · 0 评论 -
Java 线程生命周期
Java线程生命周期原创 2022-04-21 10:45:31 · 350 阅读 · 0 评论 -
死锁以及避免死锁
主要记录死锁是什么,产生死锁的原因以及如何解决死锁问题。原创 2019-07-28 00:05:08 · 500 阅读 · 0 评论 -
Java 并发编程三要素
并发编程三要素学习。原创 2022-04-20 23:18:17 · 1385 阅读 · 3 评论 -
Java 并发笔记
Java并发学习笔记。原创 2022-04-19 21:27:01 · 668 阅读 · 0 评论 -
Optional 最佳实践
目录一 Optional 是什么二 Optional API介绍三 Optional 最佳实践3.1 不要直接返回 null,使用 Optional.empty();3.2 正确使用 ifPresent()3.3 少用 get(),多用orElse()和orElseGet()3.4 少用of(),多用ofNullable()一 Optional 是什么Optional 的作者 Brian Goetz 对这个 API 的说明:Our intention was原创 2022-04-09 17:57:50 · 900 阅读 · 1 评论 -
TP50、TP90、TP99的理解和使用
一 TP50、TP90、TP99 的概念1.1 什么是 TPTP 是 Top Percentile 的缩写,中文译作百分位。1.2 什么是百分位百分位是一个统计学的术语。如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组N个观测值按数值大小排列。如,处于P%位置的值称第P百分位数。1.3 TP50、TP90、TP99 怎么理解TP50、TP90、TP99 是工程性能指标,以网络请求耗时为例:TP50:表原创 2021-04-24 12:13:08 · 5916 阅读 · 0 评论 -
提高工作效率的利器
目录一ListUtils.partition 方法1.1 引入依赖1.2 代码演示1.3 输出结果二Lists.partition 方法2.1 引入依赖2.2 代码演示2.3 输出结果三 源码分析3.1 ListUtils.partition 源码分析3.2Lists.partition 源码分析在工作中经常遇到需要将数组分割成多个子数组,然后进行批量处理的需求。那有没有比较优雅的实现呢?经过多次实践,总结出如下两种较好实现。一ListUti...原创 2021-04-17 11:40:03 · 304 阅读 · 4 评论 -
创建线程的四种方式
四种创建方式及其比较。原创 2021-01-21 22:45:51 · 906 阅读 · 3 评论 -
java.time包优雅处理时间和日期
Java8 优雅的处理时间和日期,有了它,吃嘛嘛香。原创 2021-01-17 16:26:57 · 1455 阅读 · 1 评论 -
JMH 性能测试分析工具
一 什么是 JMH JMH 是在method层面上的 benchmark,精度可以精确到微秒级,是对热点函数进行优化时,对优化结果进行定量分析的工具。二 JMH 的应用场景典型场景:想定量地知道某个函数需要执行多长时间,以及执行时间和输入 n 的相关性。 一个函数有多种不同的实现,针对多种不同的实现,需要定量分析出那种实现性能更好。三 JMH 的使用3.1 引入依赖<properties> <jmh.version>1.14.1&...原创 2020-06-30 01:01:39 · 860 阅读 · 0 评论 -
CPU 利用率高如何分析
CPU 繁忙的原因有以下几个:线程中有比较耗时的计算。 系统发生了频繁的 Full GC。一使用 jstack 来打印异常进程的堆栈信息第一步:通过 ps -ef | grep java 找到 Java pid。第二步:top -Hp pid 找到使用CPU最高的线程 tid。第三步:printf %0x tid 将 tid转化成16进制。第三步:jstack pid | grep tid 找到线程堆栈。如果jstack 得到的线程信...原创 2020-06-27 21:25:13 · 1027 阅读 · 0 评论 -
String.join()和StringUtils.join()优雅解决数组或者集合拼接
你也许遇到过将数组或集合以某“,”、“-”、“.”等拼接字符拼接成新的字符串的需求,拼接后的字符串将会是这样 a,b,c 或者 a-b-c 或者 a.b.c 等。你可能会想遍历拼接,去除掉最后一个特殊字符。public static void main(String[] args) { List<String> list = new ArrayList<>(Arrays.asList(new String[]{"a", "b", "c"})); Strin.原创 2021-01-10 15:14:30 · 8703 阅读 · 12 评论 -
线程池原理分析和运用
目录一 什么是线程池二 为什么需要线程池三 创建线程池的四种方式四 execute() 方法执行过程一 什么是线程池 线程池就是线程集合的池子,是一种将任务添加到队列,然后创建线程后自动启动这些任务的流程。二 为什么需要线程池 使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能...原创 2019-07-25 08:55:57 · 627 阅读 · 2 评论 -
并发-学习笔记
目录1、实现原理2、Java对象头3、Monitor4、锁优化5、自旋锁6、适应自旋锁7、锁消除8、锁粗化9、轻量级锁10、偏向锁11、重量级锁 记得刚刚开始学习 Java 的时候,一遇到多线程情况就是 synchronized。对于当时的我们来说,synchronized 是如此的神奇且强大。我们赋予它一个名字“同步”...原创 2019-11-13 00:13:51 · 326 阅读 · 0 评论 -
ThreadLocal 和 InheritableThreadLocal
目录一 ThreadLocal 是什么二 ThreadLocal 实现原理三 ThreadLocal 应用场景四 参考文档一 ThreadLocal 是什么 ThreadLocal 本地线程变量,通过 set() 和 get() 方法来维护局部变量。不同线程之间局部变量彼此隔离,互不影响。二 ThreadLocal 实现原理2.1 我们可以先来看看 Th...原创 2019-07-28 15:23:53 · 479 阅读 · 0 评论 -
JVM--学习笔记
目录一、什么是类的加载1.1 加载.class文件的方式二、类的生命周期2.1 加载阶段2.2 连接阶段2.3 初始化过程2.4 JVM 结束生命周期三 类加载器3.1 站在 Java 虚拟机的角度来讲,只存在两种不同的类加载器:3.2 站在 Java 开发人员的角度来看,类加载器可以大致划分为以下三类:3.3 JVM 类加载机制四 类的加载4....原创 2019-11-19 23:04:51 · 309 阅读 · 0 评论 -
Full GC 和 Minor GC
目录Full GCFull GC的触发条件Minor GC触发条件Minor GC的过程Survivor区对象晋升位老年代对象的条件Minor GC的问题与卡表分析关于 Major GC的说明小结参考资料 & 鸣谢Full GCFull GC 就是收集整个堆,包括新生代,老年代,永久代(在JDK 1.8及以后,永久代会被移除,换为metasp...转载 2020-10-13 08:34:37 · 2088 阅读 · 0 评论