随笔分类 -  Java

摘要:现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身,包括基础的语言特性,面向对象、放射、范型、lambda等等。 Java类库,包括核心类库如IO/N 阅读全文
posted @ 2019-02-16 11:07 melonstreet 阅读(1943) 评论(0) 推荐(1) 编辑
摘要:问题出现:现网CPU飙高,Full GC告警 CGI 服务发布到现网后,现网机器出现了Full GC告警,同时CPU飙高99%。在优先恢复现网服务正常后,开始着手定位Full GC的问题。在现场只能够抓到四个GC线程占用了很高的CPU,无法抓到引发Full GC的线程。查看了服务故障期间的错误日志, 阅读全文
posted @ 2018-09-14 17:26 melonstreet 阅读(2316) 评论(2) 推荐(7) 编辑
摘要:JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程;有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础。那么JVM内存区域是怎么划分的呢? 首先是 程序计数器 (Program Counter Regi 阅读全文
posted @ 2018-09-12 18:00 melonstreet 阅读(3327) 评论(7) 推荐(0) 编辑
摘要:并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问。加锁会带来性能上的损坏,似乎是众所周知的事情。然而,加锁本身不会带来多少的性能消耗,性能主要是在线程的获取锁的过程。如果只有一个线程竞争锁,此时并不存在多线程竞争的情况,那么JVM会进行优化,那么这时加锁带来的性能消耗 阅读全文
posted @ 2018-01-25 17:18 melonstreet 阅读(2496) 评论(3) 推荐(4) 编辑
摘要:进行多线程编程的时候,需要考虑的是线程间的同步问题。对于共享的资源,需要进行互斥的访问。在Java中可以使用一些手段来达到线程同步的目的: 1. synchronized 2. ThreadLocal,线程本地变量 3. Java.util.concurrent.Lock Java中,线程会共享堆上 阅读全文
posted @ 2018-01-24 16:53 melonstreet 阅读(1760) 评论(1) 推荐(0) 编辑
摘要:Java的Object类包含了三个final方法,允许线程就资源的锁定状态进行通信。这三个方法分别是:wait(),notify(),notifyAll(),今天来了解一下这三个方法。在任何对象上调用这些方法的当前线程应具有对象监视器(锁住了一个对象,就是获得对象相关联的监视器),否则会抛出java 阅读全文
posted @ 2018-01-24 09:33 melonstreet 阅读(4413) 评论(1) 推荐(0) 编辑
摘要:当你需要使用Java线程在多线程环境下进行编程时,理解Java的线程周期与线程的状态是非常重要的。通过实现Runnale接口或者继承Thread类,我们可以创建线程,为了启动一个线程,我们需要创建一个Thread对象,并且调用它的start()方法,以便以线程的方式来执行run()方法。 Java中 阅读全文
posted @ 2018-01-23 14:37 melonstreet 阅读(2579) 评论(0) 推荐(0) 编辑
摘要:Java的ThreadLocal变量用来创建线程本地变量。我们知道,一个对象上的所有线程,都会共享该对象的变量,所以这些共享的变量不是线程安全的。我们可以使用synchronization同步语法来使得线程安全,但如果想避免使用synchronization,那么可以使用线程本地变量(ThreadL 阅读全文
posted @ 2018-01-23 11:41 melonstreet 阅读(465) 评论(0) 推荐(0) 编辑