随笔分类 -  java

GC root & 使用MAT分析java堆
摘要:当我们的java程序遇到频繁full gc或者oom的时候,我们常常需要将当前的heap dump出来进行进一步的分析。 "MAT" 是用于分析heap dump的神器。 1 生成heap dump heap dump是jvm内存中某一时刻所有对象的的快照。通常用于定位java程序的内存泄露或者优化 阅读全文

posted @ 2019-06-22 17:48 吼吼吼的吼 阅读(4667) 评论(0) 推荐(0)

jinfo介绍
摘要:1. jinfo 1.1 简介 jinfo用于打印java的配置信息,这些配置信息包括: java system properties jvm命令行参数 通过查看这些配置信息,可以了解java进程的运行时环境,例如加载类的顺序、jvm配置情况等。 1.2 使用 jinfo pid . 即不加参数,j 阅读全文

posted @ 2019-05-30 00:32 吼吼吼的吼 阅读(1822) 评论(0) 推荐(0)

java线程池源码分析
摘要:我们在关闭线程池的时候会使用shutdown()和shutdownNow(),那么问题来了: 1. 这两个方法又什么区别呢? 2. 他们背后的原理是什么呢? 3. 线程池中线程超过了coresize后会怎么操作呢? 为了解决这些疑问我们需要分析java线程池的原理。 1 基本使用 1.1 继承 阅读全文

posted @ 2018-09-29 15:20 吼吼吼的吼 阅读(506) 评论(0) 推荐(0)

AQS分析笔记
摘要:1 介绍 AQS: AbstractQueuedSynchronizer,即队列同步器。是构建锁或者其他同步组件的基础框架。它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。 state的访问方式有: getState 阅读全文

posted @ 2018-09-26 20:56 吼吼吼的吼 阅读(233) 评论(0) 推荐(0)

park和unpark
摘要:1 介绍 LockSupport类是Java6(JSR166 JUC)引入的一个类,提供了基本的线程同步原语。LockSupport提供的两个主要方法就是park和unpark。 park译为“停车”,官方文档意为:许可。为了方便理解,在这里我们可以理解为阻塞,等待,挂起,而unpark我们理解 阅读全文

posted @ 2018-09-04 09:30 吼吼吼的吼 阅读(7490) 评论(0) 推荐(2)

回调函数
摘要:1 模块间调用 模块间调用分为三种 1. 同步调用:A类的方法a()直接调用B类的b()方法。 2. 异步调用:类A的方法方法a()通过新起线程的方式调用类B的方法b(),代码接着直接往下执行。 3. 回调:类A在a()中调用类B的b()方法,b()方法中又调用了在类A中定义的方法。 2 阅读全文

posted @ 2018-05-06 01:02 吼吼吼的吼 阅读(1010) 评论(0) 推荐(1)

日志框架总结
摘要:1 日志框架简介 (参考:http://xfhnever.com/2015/09/20/log java 2/) 各种日志框架可以分为两类: 1. 日志实现框架:jdk自带的logging(jul),log4j1、log4j2、logback 2. 日志门面,即提供统一的接口不提供实现:ap 阅读全文

posted @ 2018-04-14 23:10 吼吼吼的吼 阅读(645) 评论(0) 推荐(0)

双重检验锁思考
摘要:最近在项目中写一个池子,用到了双重检验锁,联想到单例模式的双重检验锁。 1 单例模式 下面是一个懒加载的单例模式 需要判断两次instace == null是因为 1. 第一次为了减少锁了粒度,因为只有在instance == null的时候才需要上锁,其他情况可以直接返回 2. 第二次获取锁后 阅读全文

posted @ 2018-04-13 01:11 吼吼吼的吼 阅读(515) 评论(0) 推荐(0)

生产者消费者和虚假唤醒
摘要:1 定义 虚假唤醒,即spurious wakeups。wait需要在while循环内使用,原因就是因为存在虚假唤醒。 2 Monitor 还是放上这个神图来复习下线程间通信 线程在竞争锁失败的情况下会放到Entry Set中,图中2表示线程可以获取锁 获取到锁的线程可以调用wait方法,让线程 阅读全文

posted @ 2018-04-06 21:07 吼吼吼的吼 阅读(535) 评论(0) 推荐(0)

JAVA DAEMON线程的理解
摘要:java线程分两种:用户线程和daemon线程。daemon线程或进程就是守护线程或者进程,但是java中所说的daemon线程和linux中的daemon是有一点区别的。 linux中的daemon进程实际是指运行在后台提供某种服务的进程,例如cron服务的crond、提供http服务的httpd 阅读全文

posted @ 2018-04-06 17:15 吼吼吼的吼 阅读(374) 评论(0) 推荐(0)

jvm参数总结
摘要:之前一直对jvm参数都是现学现用,对有些地方没有总结,比如 XX 和 X有什么区别,无意中看到oracle的官网对于jvm参数的介绍,下面做个简单的总结和翻译。 首先献上oracle官方链接: 1. http://www.oracle.com/technetwork/java/javase/ 阅读全文

posted @ 2018-04-06 13:41 吼吼吼的吼 阅读(735) 评论(0) 推荐(0)

读懂jstack
摘要:1 jstack jstack是JDK自带的一种线程栈跟踪工具,用于生成java虚拟机当前时刻线程快照。在定位线程卡顿、死锁、block等原因的时候非常有用。使用方法是: jstack [ l] pid 2 Monitor Monitor是java中用以实现线程同步和互斥的主要手段,每一个对象有且只 阅读全文

posted @ 2018-04-06 12:21 吼吼吼的吼 阅读(1013) 评论(1) 推荐(0)

为什么WAIT必须在同步块中
摘要:我们知道java的Object有wait和notify方法,如果要使用wait和notify的话,那么必须在synchronized块中,否则会抛出IllegalMonitorStateException。但是为什么必须在同步块中调用呢?直接wait,然后在notify不行吗?我一直存在这样的疑问, 阅读全文

posted @ 2018-04-01 12:22 吼吼吼的吼 阅读(5711) 评论(0) 推荐(0)

NIO学习笔记
摘要:为什么用NIO NIO是一种IO多路复用机制。这里的复用是指复用的线程而不是连接,这对理解NIO非常重要。关于NIO的介绍的文章网上已经有很多了,那么NIO相对于BIO有哪些优点呢,NIO在哪些场景下会更具有优势呢? 我们可以首先思考下,使用BIO的时候是怎样的工作流程。BIO中每次来一个请求S 阅读全文

posted @ 2018-03-28 00:41 吼吼吼的吼 阅读(363) 评论(0) 推荐(0)

导航