Java8中的Optional
OptionalOptional构造方法私有,不能通过new创建对象。Optional创建对象的集中方法。方法名描述of(T value)创建一个对象,如果为空,抛出NullPointException。ofNullable(T value)创建一个对象,可以为空。empty()创建一个空的对象empty()Optional<Object> empty = Optional.empty
OptionalOptional构造方法私有,不能通过new创建对象。Optional创建对象的集中方法。方法名描述of(T value)创建一个对象,如果为空,抛出NullPointException。ofNullable(T value)创建一个对象,可以为空。empty()创建一个空的对象empty()Optional<Object> empty = Optional.empty
如何判断对象可以回收?引用计数法两个对象互相引用,会导致两个对象都没法被回收。可达性分析Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以 回收哪些对象可以作为GC root?虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中JNI(即
jvm的内存模型包含什么?程序计数器(寄存器)作用:记住下一条jvm执行的执行地址。程序执行过程中cpu切换任务执行,再次返回是必须知道程序执行到哪一步了。程序计数器是线程私有的不存在内存移除虚拟机栈栈内存模型后进先出。虚拟机栈包含了栈帧。每一个线程只能有一个活动栈帧,对应当前正在执行的方法。每一次方法调用都会存在一个栈帧。栈内存溢出:栈帧过多(方法调用嵌套太多,不能正常返回。无限递归)栈帧过大(
自定义线程池的实现自定义阻塞队列/** * 阻塞队列 存放任务 * @param <T> */@Slf4j(topic = "c.BlockingQueue")class BlockingQueue<T> { //任务队列 private Deque<T> queue = new ArrayDeque<>();
1、问题多线程模拟银行取钱操作,代码如下:public interface Demo4 { //获取当前的余额 Integer getBalance(); // 取款 void withdraw(Integer amount); //操作某一个账户 static void demo(Demo4 account) { long start = Sys
Java的内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM 体现在以下几个方面原子性-保证指令不会收到线程上下文切换的影响可见性-保证指令不会收到cpu缓存影响有序性-保证指令不会收到cpu指令并行优化影响可见性static boolean run = true;public stat
1、wait()、notify()、notifyAll()方法简介方法名描述notify()在 object 上正在 waitSet 等待的线程中挑一个唤醒notifyAll()让 object 上正在 waitSet 等待的线程全部唤醒,随机一个线程获得锁wait()让进入 object 监视器的线程到 waitSet 等待wait(long n)有时限的等待, 到 n 毫秒后结束等待,或是被