
Java
文章平均质量分 84
飞向札幌的班机
十五年+程序员,喜欢搞开源,欢迎一起交流学习
展开
-
Java Agent实战
简单来说,Java Agent就是JVM为了应用程序提供的具有检测功能的软件组件。在Java Agent的上下文中,通过JDK1.5出现的java.lang.instrument.Instrumentation来提供重新定义在运行时加载的类的内容的能力。那么这有什么用?其实对我们实现一些需要通过字节码的形式隐式注入到业务代码中的中间件非常有用(注意,这和Java的远程debug使用的JDWP(Ja...原创 2019-09-01 14:40:30 · 4100 阅读 · 2 评论 -
SLF4J漫谈
SLF4J的全称是Simple Logging Facade for Java,是当前最流行的日志(包装)框架之一,它不是完成的一套日志框架实现,它主要用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入具体的日志框架。可以直接将SLF4J看做其他日志框架的统一API,用SLF4J的好处是,如果后期用户需要切换日志框架的实...原创 2019-06-02 11:57:03 · 911 阅读 · 1 评论 -
Java中如何限制方法访问的并发数
并发编程一直是Java基础中的高地,但很多只要有两三年Java基础的工程师,会在简历中很明确的标明“熟悉多线程编程、有高并发编程经验”,来凸显自己编程能力有多厉害,但实际上可能只是看了《Java Concurrency in Practice》的几个章节而已。其实对很多业务研发工程师来说,高并发编程经验并不是必备的核心竞争力之一,很多需要加锁或者统计的场景,大都可以交给外部系统如Redis来做,即......原创 2018-08-04 17:15:52 · 28245 阅读 · 14 评论 -
简单的cpu飙高问题定位脚本
老司机在定位和解决问题时都有着自己的一套方法论,总不能老踩一些重复的坑是吧。老司机一般多少都遇到过服务器cpu飙高的问题,定位问题的方法网上文章多如牛毛,现这里再总结一下,对于混部多个Java应用的服务器,我们一般会通过如下步骤来定位该问题:找到cpu占比高的Java进程ID,通过这一步就知道是哪个Java应用出了问题。 然后再找到该Java进程中哪些线程占用cpu时间比较高,有时候步骤2和步骤1...原创 2018-02-18 00:29:08 · 2624 阅读 · 1 评论 -
可重入锁ReentrantLock初探
我们知道,java.util.concurrent.locks包下的Lock和Condition接口的语义是用来替代JDK1.5之前使用synchronize和Object.wait、Object.notify、Object.notifyAll组合,Effective Java一书中说过,JDK1.5及其以后,你几乎没有任何理由去选择使用synchronize和Object.wait、Object原创 2016-09-21 13:06:34 · 660 阅读 · 0 评论 -
信号量Semaphore初探
信号量Semaphore是java.util.concurrent包下一个常用的同步工具类,它维护了一个许可集,可以理解成资源数,可以通过acquire操作来获取一个资源,并通过release来释放一个资源,但需要注意的是,release来释放资源前不一定要先通过acquire来获取一个资源,如果不断的release而不进行acquire将导致资源数虚增,所以一定得我们自己来保证使用的正确性。原创 2016-09-21 13:06:28 · 1813 阅读 · 1 评论 -
AbstractQueuedSynchronizer初探
毫不为过的说,AbstractQueuedSynchronizer(以下简称AQS)是java.util.concurrent包下同步器类的灵魂组件,很多同步组件都是基于它实现的,比如CountDownLatch、CyclicBarrier、ReentrantLock、ReentrantReadWriteLock和ConcurrentHashMap等。我们不要一头栽进AQS的代码里直接看,因为原创 2016-09-21 13:06:22 · 634 阅读 · 0 评论 -
常用限流方案的设计和实现
为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一。 限流即流量限制,或者高大上一点,叫做流量整形,限流的目的是在遇到流量高峰期或者流量突增(流量尖刺)时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。 其实,服务降级系统中的限流并没有我们想象的那么简单,第一,限流方案必须是可选择的原创 2016-09-21 13:05:47 · 11020 阅读 · 0 评论 -
HttpClient入门示例
如果你是使用maven来管理项目,你需要在pom.xml添加如下配置: org.apache.httpcomponents httpclient 4.5 org.apache.httpcomponents httpmime原创 2016-09-21 13:05:30 · 382 阅读 · 0 评论 -
JVM常用调优参数
-Xmx:最大JVM可用内存, 例:-Xmx4g-Xms:最小JVM可用内存, 例:Xms4g-Xmn:年轻代内存大小,例:-Xmn2560m-XX:PermSize:永久代内存大小,该值太大会导致fullGC时间过长,太小将增加fullGC频率,例:-XX:PermSize=128m-Xss:线程栈大小,太大将导致JVM可建的线程数量减少,例:-Xss256k-XX:+Dis原创 2016-09-21 13:05:19 · 2346 阅读 · 0 评论 -
Oracle官方教程之Fork/Join
ork/join框架是ExecutorService接口的一种具体实现,目的是为了帮助你更好地利用多处理器带来的好处。它是为那些能够被递归地拆解成子任务的工作类型量身设计的。其目的在于能够使用所有可用的运算能力来提升你的应用的性能。类似于ExecutorService接口的其他实现,fork/join框架会将任务分发给线程池中的工作线程。fork/join框架的独特之处在与它使用工作窃取(work原创 2016-09-21 13:04:15 · 644 阅读 · 0 评论 -
Java Socket编程入门
Java Socket编程入门1.必备知识 TCP是Tranfer Control Protocol的简称,即传输控制协议,基于TCP协议,可以进行有顺序的,无差错的数据流传输,当然,发送方和接收方之间必须建立连接,在建立连接后,双方可以双向通信。UDP是User Datagram Protocol的简称,即用户数据报协议,该协议是无连接的,每个数据报都是个独立的信息体,包原创 2016-09-21 13:04:09 · 531 阅读 · 0 评论