java
Liu Weidong
这个作者很懒,什么都没留下…
展开
-
java 编码规范
代码格式【强制】IDE 的 text file encoding 设置为 UTF-8;文件的换行符使用 Unix(\n)格式,不要使用 Windows(\r\n)格式。【强制】单行字符数限制不超过 120 个,超出需要换行。【推荐】单个方法的总行数不超过 80 行。正例: 代码逻辑分清红花和绿叶,个性和共性,绿叶逻辑单独出来成为额外方法,使主干代码更加清晰;共性逻辑抽取成为共性方法,便于复用和维护。【推荐】不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。OOP规约【强制原创 2020-05-20 20:01:09 · 636 阅读 · 0 评论 -
java-源码篇-HashMap
摘要java 8 对 HashMap 底层的实现进行了优化。存储结构从结构实现来讲,HashMap 是数组 + 链表 + 红黑树(java 8 增加了红黑树部分)实现的。HashMap 就是使用哈希表来存储的。哈希表为解决冲突,可以采用开放寻址法和链地址法等来解决问题,java 中 HashMap 采用了链地址法。通过什么方式来控制map使得Hash碰撞的概率又小,哈希桶数组占用空间又少...原创 2020-05-04 23:27:56 · 182 阅读 · 0 评论 -
java内存模型详解
概述Java虚拟机规范中试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。经过长时间的验证和修订,在JDK 1.5(实现了JSR-133)发布后,Java内存模型已经成熟和完善起来了。主内存与工作内存Java内存模型规定了所有的变量都存储在主内存中,每个线程都有自己的工作内存,线程的工作内存中保存了被...原创 2020-04-05 16:10:22 · 135 阅读 · 0 评论 -
java双重检查锁定与延迟初始化
概述在Java多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双重检查锁是常见的延迟初始化技术,但引入新的问题。双重检查锁public class DoubleCheckedLocking { private static Instance instance; public static Instance getInstance() { ...原创 2020-04-05 17:01:21 · 172 阅读 · 1 评论 -
java垃圾收集器与内存分配策略
概述哪些内存需要回收?什么时候回收?如何回收?程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。而java堆和方法区则不一样,只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存。**内存泄漏:**分配的内存得不到及时回收。Java程序的内存分配和回收...原创 2020-04-05 13:13:45 · 129 阅读 · 0 评论 -
java虚拟机内存结构
概述Java虚拟机(JVM,Java Virtual Machine)在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区:程序计数器Java虚拟机栈本地方法栈Java堆方法区直接...原创 2020-04-05 00:01:34 · 119 阅读 · 0 评论 -
java-学习篇-线程池
线程越多越好?时间资源线程在java中是一个对象,每一个java线程都需要一个操作系统线程支持。线程创建、销毁需要时间。操作系统需要频繁切换上下文,过多线程的调度影响性能。空间资源java对象占用堆内存,操作系统线程占用系统内存。JVM规定一个线程默认最大栈大小1M,栈空间需要从系统内存中分配。线程池实现原理...原创 2020-05-04 15:12:36 · 140 阅读 · 0 评论 -
java-学习篇-并发容器和框架(java.util.concurrent)
ConcurrentHashMap多线程环境下,HashMap 进行put操作会引起死循环HashTable 容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法时,会进入阻塞或轮询状态。ConcurrentHashMap 分段锁技术可有效提升并发...原创 2020-05-04 15:12:03 · 148 阅读 · 0 评论 -
java-学习篇-可重入锁(ReentrantLock)
文章目录概览内部类方法使用概览package java.util.concurrent.locks;public class ReentrantLock implements Lock, java.io.Serializable内部类ReentrantLock 默认使用非公平锁,也可以通过构造器来显示的指定使用公平锁。abstract static class Sync extends AbstractQueuedSynchronizerabstract void lock();// 加锁,原创 2020-05-16 16:11:42 · 181 阅读 · 0 评论 -
java-学习篇-锁
乐观锁 / 悲观锁公平锁 / 非公平锁可重入锁 / 非可重入锁独享锁 / 共享锁无锁 / 偏向锁/轻量级锁/重量级锁自旋锁 / 适应性自旋锁互斥锁 / 读写锁分段锁原创 2020-05-15 23:37:09 · 133 阅读 · 0 评论 -
java-学习篇-并发编程基础
进程进程是系统进行资源分配和调度的一个独立单位。当一个程序进入内存运行时,即变成一个进程。特征:独立性、动态性(程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合)、并发性。进程是在一个上下文的执行环境中运行的,这个执行环境称为进程的映像,或称进程图像。进程的存储映像组成部分:进程控制块(PCB,即进程状态信息)、进程执行的程序、执行时所需要的数据和进程执行时使用的工作区。并...原创 2020-04-05 17:32:03 · 195 阅读 · 0 评论 -
java-学习篇-集合大全
概述所有的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,Java 5还在java.util.concurrent包下提供了一些多线程支持的集合类。Java的集合类主要由两个接口派生而出:Collection和Map,是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。Collection子接口如下所示:Set(无序,元素不可重复)List(...原创 2020-04-03 00:00:43 · 201 阅读 · 0 评论 -
java-学习篇-基础知识
一次编译,到处运行。write once,run anywhere!标识符和关键字**分隔符:**分号(;)、花括号({})、方括号([])、圆括号(())、空格、圆点(.)标识符就是用于给程序中变量、类、方法命名的符号。Java语言的标识符必须以字母、下划线、美元符开头,后面可以跟任意数目的字母、数字、下划线和美元符。Java语言是区分大小写的。Java中所有的关键字都是小写的...原创 2020-04-02 00:06:29 · 167 阅读 · 0 评论 -
java-历史版本
简介JDK(Java SE Development Kit),Java标准版开发包。JRE(Java Runtime Environment),Java运行时环境。运行Java程序所必须环境的集合,包含JVM标准实现及Java核心类库。JDK目录bin:该路径存放了JDK的各种工具命令,javac、java等。db:该路径安装Java DB的路径。include:一些平台特定的头文件...原创 2020-04-02 22:53:19 · 814 阅读 · 0 评论