Java
小鹅鹅
兴趣使然
展开
-
Java volatile 关键字解释 用法原理 并发编程特性
文章目录0. 前言1. java内存模型与原子性,可见性和有序性2. volatile关键字2.1 volatile保证原子性吗?2.2 volatile能保证有序性吗?2.3 volatile底层实现机制3. 正确使用volatile关键字3.1 状态标志3.2 双重检查模式 DCL4. 总结Ref0. 前言有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步访问提供了免锁的机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一原创 2020-05-20 20:22:40 · 5538 阅读 · 0 评论 -
Java Spring JPA 参数校验 JSON 等常用注解 及解析
文章目录1. `@SpringBootApplication`2. Spring Bean 相关2.1. `@Autowired`2.2. `Component`,`@Repository`,`@Service`, `@Controller`2.3. `@RestController`2.4. `@Scope`2.5. `Configuration`3. 处理常见的 HTTP 请求类型3.1. G...原创 2020-04-30 22:30:43 · 3813 阅读 · 0 评论 -
Java JVM GC 垃圾回收 详细介绍 学习笔记
文章目录JVM 垃圾回收本文导火索1 揭开 JVM 内存分配与回收的神秘面纱1.1 对象优先在 eden 区分配1.2 大对象直接进入老年代1.3 长期存活的对象将进入老年代1.4 动态对象年龄判定2 对象已经死亡?2.1 引用计数法2.2 可达性分析算法2.3 再谈引用2.4 不可达的对象并非“非死不可”2.5 如何判断一个常量是废弃常量2.6 如何判断一个类是无用的类3 垃圾收集算法3.1 ...原创 2020-03-07 11:03:22 · 1010 阅读 · 0 评论 -
Java 虚拟机中内存区域介绍 JDK8区别 对象创建 学习笔记
文章目录Java 内存区域详解一 概述 程序执行过程二 运行时数据区域2.1 线程私有2.1.1 程序计数器2.1.2 Java 虚拟机栈2.1.3 本地方法栈2.2 线程共享2.2.1 堆2.2.2 方法区2.2.2.1 方法区和永久代的关系2.2.2.2 常用参数2.2.2.3 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?2.2.3 运行时常量池2.2.4 ...原创 2020-03-04 12:01:13 · 1248 阅读 · 0 评论 -
Java线程的6种状态及切换
文章目录1. 基本概念1.1 状态描述1.2 状态图2. 详细描述2.1 初始状态(NEW)2.2 运行状态(RUNNABLE)2.2.1 就绪状态(READY)2.2.2 运行中状态(RUNNING)2.3 阻塞状态(BLOCKED)2.4 等待(WAITING)2.5 超时等待(TIMED_WAITING)2.6 终止状态(TERMINATED)3. 其他知识点3.1 等待队列3.2 同步队列...原创 2020-01-07 12:05:19 · 897 阅读 · 0 评论 -
Java 线程调优 JDK常用命令行工具 Jstack & Arthas使用笔记 查找耗时线程
Jstack使用jps查找出java进程的pid,如7777或 ps -ef | grep java使用top -p 7777观察进程情况,然后Shift+h,显示该进程的所有线程。找出CPU消耗较多的线程id,如7788,将7788转换为16进制0x1e6c,注意是小写。使用jstack 7777 | grep -A 10 0x1e6c 来查询出具体的线程状态。-A ...原创 2019-11-24 15:17:33 · 5695 阅读 · 0 评论 -
javaHashMap 概述 HashMap 底层实现原理 及JDK1.8更新
文章目录1. HashMap 概述2. HashMap 的数据结构2.1 Node结构2.2 HashMap中的哈希与threshold, loadFactor, szie等几个字段3. HashMap功能实现-方法3.1 确定哈希桶数组索引位置3.2 分析HashMap的put方法3.3 扩容机制4. HashMap多线程场景下的问题4.1 问题产生4.2 Fail-Fast 机制5. Hash...原创 2019-10-24 20:29:00 · 327 阅读 · 0 评论 -
java synchronized 关键字 使用方法 学习笔记
文章目录java synchronized 关键字 使用方法 学习笔记1. 综述2. synchronized作用于实例方法3. synchronized作用于静态方法4. synchronized同步代码块5. synchronized作用于类同步方法最好运用在 共享资源 内部而不是使用它的外部总结Refjava synchronized 关键字 使用方法 学习笔记1. 综述线程安全是并发...原创 2019-08-27 16:50:24 · 192 阅读 · 0 评论 -
Java JVM 内存泄露 基本概念 解析及排查处理办法
0. 背景本文章会一步一步的探讨内存泄露的问题。JAVA是垃圾回收语言的一种,开发者无需特意管理内存分配。但是JAVA中还是存在着许多内存泄露的可能性,如果不好好处理内存泄露,会导致APP内存单元无法释放被浪费掉,最终导致内存全部占据堆栈(heap)挤爆进而程序崩溃。1. 内存泄露 or 内存溢出?说到内存泄露,就不得不提到内存溢出,这两个比较容易混淆的概念,我们来分析一下。内存泄露:...原创 2019-08-04 22:35:02 · 362 阅读 · 0 评论 -
控制反转 依赖注入 基本概念 与 Spring IOC 源码学习
Background1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。2004年,Martin Fowler探讨了同一个问题...原创 2019-07-21 22:57:31 · 228 阅读 · 0 评论 -
Java中 jar/war/ear包的区别
jar:即Java Archive,Java的包,Java编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jar,jar中除了class文件还可以包括一些资源和配置文件,通常一个jar包就是一个java程序或者一个java库,包含Java类的普通库、资源(resources)、辅助文件(auxiliary files)war:...原创 2018-06-20 20:15:59 · 445 阅读 · 0 评论 -
Java 中 ArrayList,LinkedList和Vector主要区别与概述
1. ArrayList与LinkedList 主要区别ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 2....原创 2018-06-20 15:10:05 · 525 阅读 · 0 评论 -
Java Serializable 序列化学习笔记 及transient关键字 及 serialVersionUID 作用
综述Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。简单来说,Java的对象序列化是指将那些实现了Serializable接口...原创 2018-08-04 21:02:48 · 427 阅读 · 0 评论 -
Java 多线程与线程池 Thread弊端与Executor存在问题 及解决方法
文章目录Java 多线程与线程池 Thread弊端与Executor存在问题 及解决方法1. 使用Thread弊端2. 线程池背景及优势3. Executor解析3.1 线程池原理3.2 配置线程池3.3 优雅关闭线程池4. Executor存在问题解决方法5. RefJava 多线程与线程池 Thread弊端与Executor存在问题 及解决方法1. 使用Thread弊端new Threa...原创 2019-02-24 22:08:53 · 5533 阅读 · 0 评论 -
Spring Boot 创建及使用多线程
文章目录Spring Boot多线程1. 介绍2. 配置类3. 基于@Async无返回值调用3.1 任务执行3.2 测试代码4. 基于@Async返回值的调用RefSpring Boot多线程1. 介绍Spring是通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor来创建一个基于线城池的TaskExecutor。在使用线程池的大...原创 2019-02-19 16:25:36 · 44018 阅读 · 7 评论 -
Java final, static, this, super 关键字总结
Java 中 final, static, this, super 关键字总结1. final 关键字final关键字主要用在三个地方:变量、方法、类。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法...原创 2019-03-10 22:55:23 · 477 阅读 · 0 评论 -
JVM 概述,层次结构 以及 GC工作原理 笔记
1. JVM概述Java 虚拟机 Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实现了Java语言最重要的特征:即平台无关性。原理:编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而是由 JVM 执行。JVM屏蔽了与具体平台相关的信息,使Java语言编译程序只需要生成在JVM上运行的目标字节码(.class),就...原创 2019-04-20 12:47:22 · 353 阅读 · 0 评论 -
Spring AOP 基本概念与代理模式 实现原理 及常用AspectJ注解
0. 背景Spring框架用的时间蛮久了,但是一直都没怎么系统的学习,致使用法比较单一不灵活,也出过一些低级错误,是时候好好学习一下啦1. AOP简述回到主题,何为AOP?AOP即面向切面编程——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完...原创 2019-06-24 22:06:25 · 318 阅读 · 0 评论