07 2018 档案

摘要:happens-before是JMM最核心的概念,理解happens-before是理解JMM的关键。 一.JMM的设计 首先,让我们先分析一下JMM的设计意图。从JMM的设计者的角度,在设计JMM的时候要考虑一下两个关键因素: 1.程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序 阅读全文
posted @ 2018-07-31 22:17 heapStark 阅读(350) 评论(0) 推荐(0)
摘要:参考链接:https://blog.csdn.net/rebirth_love/article/details/51954836 比较实用的RejectedExecutionHandler实现,丢弃最老的任务 第一部分:ThreadPoolExecutor的继承结构 根据上图可以知道,ThreadP 阅读全文
posted @ 2018-07-31 21:43 heapStark 阅读(266) 评论(0) 推荐(0)
摘要:数据库篇 int类型用字符串类型查询是否会走索引 准备语句: 1 2 3 4 5 DROP TABLE ix_test; CREATE TABLE ix_test (id_1 varchar(20) NOT NULL, PRIMARY KEY(id_1)); INSERT INTO ix_test  阅读全文
posted @ 2018-07-17 22:27 heapStark 阅读(220) 评论(0) 推荐(0)
摘要:一、死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,2个人一起吃饭但是只有 阅读全文
posted @ 2018-07-17 08:18 heapStark 阅读(255) 评论(0) 推荐(0)
摘要:并发包中的原子类可以解决类似num++这样的复合类操作的原子性问题,相比锁机制,使用原子类更精巧轻量,性能开销更小,下面就一起来分析下原子类的实现机理。 悲观的解决方案(阻塞同步) 我们知道,num++看似简单的一个操作,实际上是由1.读取 2.加一 3.写入 三步组成的,这是个复合类的操作(所以我 阅读全文
posted @ 2018-07-16 21:16 heapStark 阅读(484) 评论(0) 推荐(0)
摘要:参考:https://blog.csdn.net/zjf280441589/article/details/52716720 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计模型(相比于Java/C/C++、JS、 阅读全文
posted @ 2018-07-06 21:27 heapStark 阅读(356) 评论(0) 推荐(0)
摘要:如今越来越多的应用采用Netty作为服务端高性能异步通讯框架,对于客户端而言,大部分需求只需和服务端建立一条链接收发消息。但如果客户端需要和服务端建立多条链接的例子就比较少了。 最简单的实现就是一个for循环,建立多个NioEventLoopGroup与服务端交互。另外还有如果要和多个服务端进行交互 阅读全文
posted @ 2018-07-05 22:25 heapStark 阅读(1889) 评论(0) 推荐(0)
摘要:对于日常开发,Redis由于单线程的并发模型、丰富的数据结构和简单的API,深受广大程序员的喜爱。Redis提供了多种语言的API,像java、c和python等。之前一直都是使用redis,但是没有多redis的API有一个系统的认识。忙里偷闲,撸一下Redis相关的API的实现,现在学习了一下j 阅读全文
posted @ 2018-07-05 22:00 heapStark 阅读(468) 评论(0) 推荐(0)
摘要:首先需要明确OOM并不一定会导致程序挂掉,导致服务不可用的是堆内存被耗尽,从而使得主线程直接退出,或者所有工作线程频繁因为OOM异常终止,java分配数组会直接消耗内存,一个对象引用会占用四个字节。 堆内存和栈内存耗尽都会导致OOM jvm管理的内存大致包括三种不同类型的内存区域:Permanent 阅读全文
posted @ 2018-07-01 07:16 heapStark 阅读(396) 评论(0) 推荐(0)