2019年8月17日
摘要: 1、垃圾收集(Garbage Collection,GC),需要考虑以下3件事 (1)哪些内存需要回收?(What) (2)什么时候回收?(When) (3)如何回收?(How) 2、判断堆内存是否需要回收,主要是判断对象的引用是否还存在,主要有以下策略 (1)引用计数算法:每个对象含有一个引用计数 阅读全文
posted @ 2019-08-17 15:28 逍遥1989 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 1、Java对象无法被垃圾收集器回收就会造成内存泄漏,内存泄漏越来越多就可能会导致内存溢出(java.lang.OutOfMemoryError)。 2、内存溢出有以下几种情形: (1)堆溢出 (2)虚拟机栈(本地方法栈)溢出 (3)方法区(运行时常量池)溢出 (4)直接内存溢出 3、常用JVM参数 阅读全文
posted @ 2019-08-17 15:01 逍遥1989 阅读(90) 评论(0) 推荐(0) 编辑
  2019年8月4日
摘要: 1、JDK5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显示地获取和释放锁。 2、synchronized关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。这种方式简化了同步的管理, 阅读全文
posted @ 2019-08-04 09:30 逍遥1989 阅读(143) 评论(0) 推荐(0) 编辑
  2019年7月30日
摘要: 1、通道:主要就是在源缓冲区和目标缓冲区之间传输数据的通路,用于I/O操作的连接,代表数据到硬件设备、文件、网络套接字的连接。 2、缓冲区是将数据进行打包,而通道是将数据进行传输。 3、缓冲区都是类,而通道都是接口。 4、Channel接口继承了Closeable接口(关闭I/O流,释放系统资源), 阅读全文
posted @ 2019-07-30 23:36 逍遥1989 阅读(263) 评论(0) 推荐(0) 编辑
  2019年7月21日
摘要: 1、happens-before是JMM最核心的概念,JSR-133使用happens-before来指定两个操作之间的执行顺序。 2、如果A happens-before B,那么: (1)对程序员来说:A的执行结果对B可见,并且A的执行顺序排在B之前。 (2)对编译器和处理器来说:不一定要按照程 阅读全文
posted @ 2019-07-21 16:16 逍遥1989 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 1、重排序:指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 2、数据依赖性:两个操作访问同一个变量,且者两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。 (1)分类:写后读、写后写、读后写。 (2)编译器和处理器在重排序时,会遵守数据依赖性,不会改变存在数据依赖关 阅读全文
posted @ 2019-07-21 15:25 逍遥1989 阅读(206) 评论(0) 推荐(0) 编辑
  2019年7月20日
摘要: 1、并发编程模型的两个关键问题:线程之间的通信和同步。 2、并发线程模型有两种: (1)共享内存:线程之间有公共状态,通过读-写内存中的公共状态进行隐式通信,显示同步。 (2)消息传递:线程之间没有公共状态,必须通过发送消息进行显示通信,隐式同步。 3、Java的并发采用共享内存模型,线程间的通信总 阅读全文
posted @ 2019-07-20 12:10 逍遥1989 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 1、原子操作:不可被中断的一个或一系列操作。 2、处理器实现原子操作 (1)使用总线锁保证原子性:LOCK#信号锁住总线,处理器独占共享内存。 (2)通过缓存锁来保证原子性:指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,当它执行锁操作回写到内存时,处理器不在总线上声言LOCK 阅读全文
posted @ 2019-07-20 11:44 逍遥1989 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1、利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。 (1)对于普通同步方法,锁是当前实例对象。 (2)对于静态同步方法,锁是当前类的Class对象。 (3)对于同步方法块,锁是Synchronized括号里配置的对象。 2、synchronized在JVM中的实现原 阅读全文
posted @ 2019-07-20 11:07 逍遥1989 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 1、volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性。 2、为了提高处理器速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2或其他)后再进行操作,但操作完不知道何时会写到内存。 3、volatile保证可见性的原理是利用处理器 阅读全文
posted @ 2019-07-20 10:30 逍遥1989 阅读(140) 评论(0) 推荐(0) 编辑