
Java基础
若水无言
这个作者很懒,什么都没留下…
展开
-
Java 代码热更方案
由于 jvm just in time 和支持解释运行和过热代码编译的特性,所以无需像 c/c++ 这种纯静态语言,需要先编译再执行。jvm 系的语言是支持脚本执行,只要编译成 class 供 jvm 识别,即可执行,执行过热之后(HotSpot)再编译成机器码,从而提高开发和运行效率的。代码热更方案应用场景有状态服务的代码替换或 bugFix因为应用程序中保存了用户的信息或上下文信息,重启应用会导致内存中的数据丢失,所以代码热更非常适合这种类型的服务。比如提供与用户对话的服务,内存中保存了一些原创 2021-02-28 23:10:51 · 712 阅读 · 0 评论 -
ThreadPoolExecutor浅谈
在了解线程池之前,希望你能够理解 Java 内存模型 和 AQS CAS /** * The runState provides the main lifecycle control, taking on values: * * RUNNING: Accept new tasks and process queued tasks * ...原创 2019-06-11 10:10:25 · 200 阅读 · 0 评论 -
Java并发核心浅谈(二)
回顾在上一篇 Java并发核心浅谈 我们大概了解到了Lock和synchronized的共同点,再简单总结下:Lock主要是自定义一个 counter,从而利用CAS对其实现原子操作,而synchronized是c++ hotspot实现的 monitor(具体的咱也没看,咱就不说)二者都可重入(递归,互调,循环),其本质都是维护一个可计数的 monitor,在其它线程访问加锁对象时会判断...原创 2019-06-16 18:05:14 · 180 阅读 · 0 评论 -
Java并发核心浅谈
Java并发的核心就是 j.u.c 包,而 j.u.c 的核心是AbstractQueuedSynchronizer抽象队列同步器,简称 AQS,一些锁啊!信号量啊!循环屏障啊!都是基于AQS。而 AQS 又是基于UNSAFE的一系列compareAndSet,所以理解了这块,并发不再是问题!先解释下何为compareAndSet就拿AtomicInteger先开刀: // 实际操作的值...原创 2019-06-12 11:31:59 · 213 阅读 · 0 评论 -
Java中各种对象的各种实例化方式
Java 中万物皆对象,Linux 中一切皆文件。简单的说下对象的实例化过程:首先我们需要有个意识,就是创建一个类的实例化对象,内存中必须要加载了这个类所以,不论是 new 还是反射或是 Unsafe.allocateInstance(Class),都必须要先找到类对象的内存地址然后知道类对象的结构,再去堆上申请新的空间,即实例化对象顺带说下,Java 占内存的原因正是因为对象携带的信...原创 2019-06-13 11:43:12 · 874 阅读 · 0 评论 -
java内存模型浅谈
并发编程模型的分类命令式编程中,线程之间通信方式有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步是指程序用于控制不同线程之间操作发生相对顺序的机制。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定...原创 2018-09-23 11:13:40 · 200 阅读 · 0 评论 -
java生产者消费者
public class ProviderConsumer { private static final int MAX_CAPACITY = 16; private static Lock lock = new ReentrantLock(); private static Condition full = lock.newCondition(); private...原创 2018-08-26 10:54:03 · 212 阅读 · 0 评论