摘要: Java线程获取-释放锁的抽象过程如图: 实际Java的线程启动,去获取锁(也就是通过CPU原子操作,设置线程的同步状态,可以去看下CAS算法和CPU cmpxchg指令)。得到锁,线程得以执行,得不到锁,线程进入同步队列(AbstractQueuedSynchronizer)。释放锁时,会让同步队 阅读全文
posted @ 2017-08-07 15:36 seven-2017 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 了解了Java内存相关的内容后,现在来简单介绍下Java的集合。 Set:不含有重复数据的集合。常用的对象HashSet,TreeSet,LinkedHashSet。HashSet拥有很好的性能,其数据是无序的。TreeSet的结构为红黑树,所以其数据是有序的,但不允许含有null。LinkedHa 阅读全文
posted @ 2017-07-31 17:42 seven-2017 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 这里以jdk1.8做讲解。Jdk1.8的分代去掉了永久代,只分为新生代(有的也译为年轻代)和年老代。 名词解释: 系统吞吐量:用于处理应用程序处理事务的线程数与用于GC的线程数的比。 pause time:进行GC时,暂停处理应用程序事务线程的时间。 JVM运行内存别分为新生代和年老代。新生代包含一 阅读全文
posted @ 2017-07-27 20:10 seven-2017 阅读(297) 评论(0) 推荐(1) 编辑
摘要: GC算法慢慢演化,进化到了现在的分代GC。其进化过程 标记-清除算法 –> 标记-复制算法 –> 标记-整理算法 –> 分代算法。 在介绍算法之前,我们知道Java是动态加载。其特点: 1.具有层级关系,由Bootstrap class loader –> Extension class loade 阅读全文
posted @ 2017-07-26 19:31 seven-2017 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 根据上节描述的问题,我们知道其最终原因是GC导致的。本节我们就先详细探讨下与GC息息相关的Java内存模型。 名词解释:变量,理解为java的基本类型。对象,理解为java new出来的实例。 Java程序运行在JRE(Java Runtime Environment)中,JRE包括JAVA API 阅读全文
posted @ 2017-07-25 18:26 seven-2017 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 本身是名Java开发,在做了一段大数据的工作后,猛然间想对Java做个总结。 从未写过技术博客,一时不知如何开始,思虑后,暂且以自己喜爱的方式来开篇。 工作中遇到过CPU或内存过高的问题,解决步骤: 这是解决问题的的一个具体方法,这里涉及到了很多知识点,我准备依此为据,将知识点串起来。下次写GC相关 阅读全文
posted @ 2017-07-24 20:48 seven-2017 阅读(1752) 评论(0) 推荐(0) 编辑