5 icoder.long

尚未进行身份认证

我要认证

Change the world with thought and code!

等级
TA的排名 15w+

JVM调优专题-JVM调试工具

不怕有错,就怕不知道哪里有错,Java开发中,到底哪里错了,借助工具一看便知。本节介绍几款JVM诊断的工具和方法

2019-06-29 21:43:53

JVM调优专题-垃圾回收机制

后天起,上海市实行强制垃圾分类。为了响应国家号召,建议上海同胞买头猪区分干湿垃圾,是干是湿、让猪试吃、一吃便知^v^,哈哈。。想当年,Java凭借跨平台和垃圾回收机制一举拿下编程语言第一的宝座,深刻说明垃圾分得好、到哪都是宝。本节我们一起探讨Java的垃圾回收机制

2019-06-29 21:30:17

JVM调优专题-内存溢出及解决方案

吃撑过吗?吃多了还想吃咋办?当然JVM也有吃撑了的时候,甚至撑到程序宕机卡死,后果很严重。本节我们一起探讨如何判断JVM内存溢出、以及其解决方案。

2019-06-29 19:59:30

JVM调优专题-JVM调优参数

什么是虚拟机参数配置在虚拟机运行的过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定的帮助,为此,在虚拟机提供了一些跟踪系统状态的参数,使用给定的参数执行Java虚拟机,就可以在系统运行时打印相关日志,用于分析实际问题。我们进行虚拟机参数配置,其实就是围绕着堆、栈、方法区进行配置。参数含义 -XX:+PrintGC 每次触发GC的时候打印相关...

2019-06-24 23:28:29

JVM调优专题-JVM内存原理及内存结构

作为JAVA开发工程师,相信大家对JVM并不陌生,作为Java程序基础编译和执行平台,自然占据着相当重要的地位。Java语言的跨平台性和垃圾回收机制,简直是程序员的福音,一次性充分的解决了最让人头疼的兼容性问题和内存问题,真是个天才的设计^v^。所以啊,我们日常工作中无需过多的关注JVM的问题,这就导致了即使对jvm不熟悉也不影响我们的软件运行,其实这里有利也有弊,这样可能会存在一些隐藏的问题不能被发现,会在某些情况下集中爆发,不利于顺利实施一个成熟可靠地软件产品。所以在某些情况下,JVM调优就显得尤为重要

2019-06-24 22:56:10

Java多线程专题(总结)-加锁对性能的影响、CAS如何保证线程安全

加锁通常会严重地影响性能。线程会因为竞争不到锁而被挂起,等锁被释放的时候,线程又会被恢复,这个过程中存在着很大的开销,并且通常会有较长时间的中断,因为当一个线程正在等待锁时,它不能做任何其他事情。如果一个线程在持有锁的情况下被延迟执行,例如发生了缺页错误、调度延迟或者其它类似情况,那么所有需要这个锁的线程都无法执行下去。这个测试程序调用了一个函数,该函数会对一个64位的计数器循环自增5亿次。机...

2019-06-11 21:37:07

Java多线程专题-线程锁深度解析

我们在前面章节也提到过多线程的锁机制,但没有深入的去研究锁的种类以及其用法。在这里做一个深度说明。多线程锁是为了解决有可能产生得线程安全问题,从而保证多线程程序的健壮性和可靠性。本节我们将讨论Java多线程中的各种锁以及其用法。悲观锁和乐观锁悲观锁和乐观锁无具体实现,只是概念上的锁。下面会讲到这两种概念锁的具体实现细节何其应用场景。悲观锁(Pessimistic Lock)顾...

2019-06-05 21:37:19

Java多线程专题-线程池原理

线程池概念及应用线程池是为了省去频繁创建线程所带来的开销,统一管理线程,在程序一开始就创建一些线程供程序使用,使用完毕后不会结束该线程,而是放回线程池,以便被再次使用,可以理解为线程池是一个线程的集合,每一个线程都可被多次使用。Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗...

2019-06-05 21:06:24

Java多线程专题-并发队列

在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedQueue是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQue...

2019-06-04 22:19:13

Java多线程专题-Countdownlatch、CyclicBarrier与Semaphore

这三个类都属于java.util.concurrent包下的,用于保证线程安全,用比较简明的话讲,这三个类的主要功能为:Countdownlatch:指定数量的线程执行完后才能向下执行。 CyclicBarrier:指定数量的线程到达屏障之后,一起向下执行 Semaphore:只允许指定数量的线程同时执行具体参照下面的详细介绍CountDownLatchCountDownLatc...

2019-06-04 22:07:52

Java多线程专题-同步容器类之间的线程问题

Vector与ArrayList区别1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。2....

2019-06-04 22:02:51

Java多线程专题-Lock锁的使用

在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。Lock写法Lock lock = new ReentrantLock();lock.lock();try{//可能会出现线程安全的操作}finally{//一定在finally中释放...

2019-06-04 21:57:14

Java多线程专题-wait()、notify、notifyAll()方法

wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。 如果对象调用了notifyAll方法就会通知所有等待这个对象控制权的线程继续运行。 如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。 如果对象调...

2019-06-04 21:51:13

Java多线程专题-ThreadLocal

ThreadLocal是线程内部的局部变量,仅提供给当前线程访问,可以在线程运行时随时获取。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal的接口方法ThreadLocal类接口很简单,只有4个方法,我们先来了解一下:void se...

2019-06-04 21:36:37

Java多线程专题-volatile的使用

什么是volatileVolatile关键字的作用是保证被修饰的变量在多个线程之间的可见性。并不保证线程安全先来看下面这个例子class ThreadVolatileDemo extends Thread { public boolean flag = true; @Override public void run() { System.out...

2019-06-03 21:36:53

Java多线程专题-Java内存模型

共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写...

2019-06-02 23:39:32

Java多线程专题-多线程三大特性

在我们的日常编码中,遵守多线程的三大特性可以使我们的程序更加稳健,避免不必要的麻烦。原子性即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作必须要具备原子性才能保证不出现一些意外的问题。我们...

2019-06-02 23:37:43

Java多线程专题-线程死锁的原因解决方案

死锁的概念所谓死锁,是指多个进程在运行过程中因争夺资源而照成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再继续执行。产生死锁的原因竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。 进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会产生进程死锁。class T...

2019-06-02 23:34:16

Java多线程专题-synchronized的使用

为什么有线程安全问题?当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。使用同步方式解决线程安全问:如何解决多线程之间线程安全问题?答:使用多线程之间同步synchronized或使用锁(lock)。问:为什么使用线程同步或使用锁能解决线程安全问题呢?答:将可能会发生数据冲突问题(线程不...

2019-06-02 23:24:55

Java多线程专题-多线程join方法的作用

Join方法概述join作用是让其他线程变为等待。t1.join(); // 让其他线程变为等待,直到当前t1线程执行完毕,才释放。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。class JoinThread implements Runn...

2019-06-02 23:13:04

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。