随笔分类 - JAVA
摘要:一、垃圾回收 垃圾回收一般发生在堆或方法区中,也就是线程共享的部分,堆和方法区的内存分配和垃圾回收都是通过垃圾回收器去实现的。 不同的垃圾回收器对应不同的垃圾回收算法。 (一)判断算法 1、判断哪些对象需要回收 判断哪些对象需要回收主要有引用计数法和根搜索算法。 引用计数法:给对象添加一个引用计数器
阅读全文
摘要:一、运行时数据区概述 (一)JVM运行时数据区规范 JVM运行时数据区按照线程占用的情况可以分为两类:线程共享和线程独享。线程共享的包括方法区和堆,线程独享的包括栈、本地方法栈和程序计数器。 JVM运行时数据区各个模块的使用顺序:在JVM启动的时候,为方法区和堆分配初始内存并设置最大内存(一般建议初
阅读全文
摘要:一、类加载时机 类加载主要有四个时机: 1、遇到 new 、 getstatic 、 putstatic 和 invokestatic 这四条指令时,如果对应的类没有初始化,则要对对应的类先进行初始化。 2、使用 java.lang.reflect 包方法时,对类进行反射调用的时候。 3、初始化一个
阅读全文
摘要:一、代码示例 后面的代码举例都已如下代码示例 package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1; } } 编译后的class文件,使用16进制文本打
阅读全文
摘要:一、JVM介绍 (一)JVM简述 Java代码编译生成class文件,然后在JVM上运行;但是并不是只有Java一种语言可以编译成为class文件。 1、JVM、JRE、JDK: JVM:Java虚拟机,提供了class文件的运行支持 JRE:Java运行环境,提供了java应用程序运行所必须的软件
阅读全文
摘要:一、Integer各场景对比结果 对于Integer各种情况的对比及结果如下代码所示: @Test public void test() { Integer a = new Integer(2); Integer b = 2; Integer c = 2; int x = 2; log.info("
阅读全文
摘要:进入JDK下载页面:https://www.oracle.com/technetwork/java/javase/downloads/index.html 解压 tar -zxvf jdk-8u281-linux-x64.tar.gz 配置环境变量 vi /etc/profile 添加内容 expo
阅读全文
摘要:一、JAVA中的线程池 线程池的实现原理及流程如下图所示: 如上图所示,当一个线程提交到线程池时(execute()或submit()),先判断核心线程数(corePoolSize)是否已满,如果未满,则直接创建线程执行任务;如果已满,则判断队列(BlockingQueue)是否已满,如果未满,则将
阅读全文
摘要:1、等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 使用join也可以完成这个操作,代码示例如下: package com.example2.demo2.controller; import lombok.extern.slf4j.
阅读全文
摘要:一、ConcurrentHashMap的实现原理与使用 1、为什么要使用ConsurrentHashMap 两个原因,hashMap线程不安全(多线程并发put时,可能造成Entry链表变成环形数据结构,Entry的next节点永不为空,就会产生死循环获取Entry),hashTable效率低(Ha
阅读全文
摘要:1、Lock接口 Lock与Synchronized实现效果一致,通过获得锁、释放锁等操作来控制多个线程访问共享资源,但是Synchronized将获取锁固话,必须先获得锁,再执行,因此两者对比来说,Synchronized更方便,不需要关注加锁解锁操作;而Lock更灵活,提供了可操作、可中断等特性
阅读全文
摘要:一、线程简介 1、线程状态 线程在其生命周期内的所有状态如下表所示: 线程状态 状态说明 NEW 初始状态,线程被构建,但还没有调用start()方法 RUNABLE 运行状态,JAVA线程将操作系统中的就绪和运行两种状态笼统的称作“运行中”,即调用run()方法前后,统一都叫运行中 BLOCKED
阅读全文
摘要:一、什么是JMM (一)JMM定义 JMM 规范对应的是“[JSR-133. JavaMemory Model and ThreadSpecification]”,《Java 语言规范》的 [$17.4. Memory Model章节] JMM 规范明确定义了不同的线程之间,通过哪些方式,在什么时候
阅读全文
摘要:一、并发编程的挑战 并发编程的挑战 多线程程序不一定运行的比单线程快: (1)上下文切换 任务从保存到再加载的过程就是一次上下文切换; 减少上下文切换的方法:无锁并发编程、CAS算法、使用最少线程和使用协程。 a、无锁并发编程:多线程会竞争锁会引起上下文切换,因此使用无锁并发编程,可以避免上下文切换
阅读全文
摘要:一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Clas
阅读全文
摘要:JDK8中,提供了并行流和串行流,使用parallel()和sequential()来处理,parallel()为并行流sequential()为串行流,两者可以相互转换,以最后一个为准 LongStream.rangeClosed(0,1000000).sequential().parallel(
阅读全文
摘要:在JDK8之前,时间有各种问题,最大的问题就是,我们使用的时间格式化类SimpleDateFormat不是线程安全的 为了更准确的说明SimpleDateFormat非线程安全,演示一个并发做时间格式化的操作 public void test() throws Exception{ //全新的时间A
阅读全文
摘要:在程序运行时,空指针异常应该是最常见的异常之一,因此JDK8提供了Optional来避免空指针异常。 首先说明JDK8新增的Optional及相关方法的使用 Optional的常用操作: Optional.of(T value) 创建一个Optional实例 Optional.empty() 创建一
阅读全文
摘要:一、描述 Stream流提供了筛选与切片、映射、排序、匹配与查找、归约、收集等功能 筛选与切片: filter:接收lambda,从流中排除某些元素 limit(n):截断流,使其元素不超过n skip(n):跳过元素,返回一个扔掉了n个元素的流,如果流中元素数不超过n,则返回一个空流,与limit
阅读全文

浙公网安备 33010602011771号