
Java
文章平均质量分 87
以课本、课堂为导向,结合自身理解,学习Java基础知识。
L Jiawen
Just keep coding ...
展开
-
【JVM · 调优】常用参数 & 垃圾回收
常用参数 & 垃圾回收原创 2022-02-28 19:27:51 · 2261 阅读 · 0 评论 -
【JVM · 调优】监控及诊断工具
为什么要调优?① 防止出现OOM② 解决OOM③ 减少Full GC出现的频率原创 2022-02-26 01:01:01 · 1182 阅读 · 0 评论 -
【Java · 类加载】类加载器
类加载器是 JVM 执行类加载机制的前提。ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader区改变类的链接和初始化行为。至于它是否可以运行,则由执行引擎决定。原创 2022-02-13 02:58:23 · 4120 阅读 · 1 评论 -
【JVM · 类加载】类加载过程(生命周期)
在Java中数据类型分为基本数据类型、引用数据类型。基本数据类型 由虚拟机预先定义,引用数据类型 则需要进行类的加载。按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个声明周期包括7个阶段:加载→验证→准备→解析→初始化→使用→卸载原创 2022-02-09 01:49:11 · 824 阅读 · 0 评论 -
【JVM · 字节码】指令集 & 解析说明
Java字节码指令对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为 操作码/Opcode)以及跟随其后的零至多个代表此操作所需参数(称为 操作数/Oprands)而构成。由于 Java 虚拟机采用面向操作数栈而不是寄存器的结构。所以大多数指令都不包含操作数,只有一个操作码。原创 2022-02-06 05:33:58 · 2000 阅读 · 1 评论 -
【JVM · 字节码】Class文件结构
想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。原创 2022-02-03 03:44:54 · 610 阅读 · 0 评论 -
【JVM · GC】垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于 JDK 版本处于高速迭代过程中,因此Java 发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC(Garbage Collector)分为不同的类型。原创 2022-01-30 01:36:13 · 982 阅读 · 0 评论 -
【JVM · GC】垃圾回收 相关概念
垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断演进,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战。原创 2022-01-30 00:54:13 · 756 阅读 · 0 评论 -
【JVM】StringTable — 字符串常量池
String 的String Pool是一个固定大小的Hashtable,默认 值大小长度是1009。如果放进 String Pool 的String非常多,就会造成 Hash 冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用 String.intern() 时性能会大幅下降。原创 2022-01-29 17:49:26 · 341 阅读 · 0 评论 -
【JVM】内存结构(下)
JVM 内存结构 — 下篇原创 2022-01-29 17:38:31 · 2038 阅读 · 0 评论 -
【JVM】内存结构(中)
JVM 内存结构 — 中篇原创 2022-01-29 17:22:09 · 1673 阅读 · 0 评论 -
【JVM】内存结构(上)
JVM 内存结构 — 上篇原创 2022-01-29 01:32:32 · 1702 阅读 · 0 评论 -
【JVM】JVM & Java 体系结构 概述
Java 是目前应用最为广泛的软件开发平台之一。随着Java 及其社区的不断壮大,Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。原创 2022-01-29 01:06:25 · 1525 阅读 · 0 评论 -
【Java 代理模式 · Mybatis源码】Mapper简单模拟
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。原创 2022-01-02 15:51:28 · 701 阅读 · 0 评论 -
【Java 线程 · 并发】ThreadLocal 分析
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对于独立于其他线程内的变量。ThreadLocal实例通常来说都是 private static 类型的,用于关联线程和线程上下文。原创 2021-11-15 17:32:56 · 190 阅读 · 0 评论 -
【Java 集合】HashTable 解析
Hashtable类 通过 synchronized 关键字 保证其不会被多个线程同时更改保证。原创 2021-11-12 09:34:27 · 998 阅读 · 0 评论 -
【Java 设计模式 · 结构型】享元模式(Flyweight Pattern)
享元模式(FlyWeight Pattern):运用共享技术有效地支持大量细粒度对象的复用。原创 2021-11-02 19:53:56 · 325 阅读 · 0 评论 -
【Java 设计模式 · 结构型 & AOP】代理模式(Proxy Pattern)& Spring AOP 应用
代理模式(Proxy Pattern):给某个对象提供一个代理活占位符,并由代理对象来控制对原对象的访问。AOP(Aspect-OrientedProgramming,面向切面编程),AOP包括切面(aspect)、通知(advice)、连接点(joinpoint),实现方式就是通过对目标对象的代理在连接点前后加入通知,完成统一的切面操作。原创 2021-09-29 17:53:42 · 601 阅读 · 2 评论 -
【Java】JShell 实用工具
诸如 Python、node.js 等运行环境都拥有自己的交互解释模式,Java 在 JDK 9 版本后 正式引入了名为 JShell 工具,它可以用于学习Java编程语言和Java代码原型。JShell是一个Read-Evaluate-Print循环(REPL),它在输入时评估声明,语句和表达式,并立即显示结果。该工具从命令行运行。原创 2021-09-23 22:07:15 · 747 阅读 · 0 评论 -
【Java 装饰模式 · MyBatis源码】缓存模块解析
MyBatis中的Cache以SPI实现,给需要集成其它Cache或者自定义Cache提供了接口。Mybatis提供的缓存大大提升了查询效率,而这两级缓存都依赖cache模块。原创 2021-09-21 21:51:33 · 960 阅读 · 0 评论 -
【Java 引用】Java 四种引用类型
java有四种引用类型,分别为强引用、弱引用、软引用、虚引用,创建对象默认为强引用对象,而通过 java.lang.ref 包托管对象,可使创建其他三种类型的对象,它们有不同的应用方式。原创 2021-09-17 21:53:14 · 1676 阅读 · 0 评论 -
【Java 集合 & 数据结构】优先队列 PriorityQueue
优先队列 PriorityQueue 是 接口 Queue的实现,可以对其中元素进行排序,可以放基本的包装类型或自定义类型,对于包装类型默认为升序,对于自定义类型需手动实现 Comparator 接口。原创 2021-09-14 22:08:30 · 1632 阅读 · 0 评论 -
【Java 线程 · 并发】LockSupport 线程控制 & Unsafe 核心类
LockSupport & Unsafe:LockSupport类,JUC包 中的一个工具类,用来创建锁和其他同步类的基本线程阻塞原语。原创 2021-09-11 21:04:34 · 737 阅读 · 0 评论 -
【Java 设计模式 · 结构型】桥接模式(Bridge Pattern)
桥接模式(Bridge Pattern):将抽象部分与它的实现部分解耦,使得两者都能够独立变化。原创 2021-09-07 21:58:29 · 496 阅读 · 0 评论 -
【Java 设计模式 · 结构型】适配器模式(Adapter Pattern)
适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。原创 2021-09-06 18:57:42 · 228 阅读 · 0 评论 -
【Java 问题 & 解决方法 · SpringBoot & Jackson】Enum类型 转JSON无法获取内部属性
情景:现限制必须使用 Enum类型,协助在前后端间传递部分规范化信息,且保证 enum 对象 内部属性可直接获取。原创 2021-09-05 20:38:24 · 1053 阅读 · 0 评论 -
【Java 设计模式 · 创建型】浅拷贝 & 深拷贝、原型模式(Prototype Pattern)
原型模式(Prototype Pattern):使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。原创 2021-09-01 20:25:57 · 547 阅读 · 0 评论 -
【Java | LeetCode 406.根据身高重建队列】题解 & 思路
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序),根据身高重新构建队列。原创 2021-08-31 17:06:59 · 407 阅读 · 0 评论 -
【Java 设计模式 · 结构型】装饰模式(Decorator Pattern)
装饰者模式(Decorator Pattern):动态地给一个对象增加一些额外的职责。就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。原创 2021-08-29 13:11:56 · 453 阅读 · 0 评论 -
【Java | LeetCode 77. 组合】题解
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。原创 2021-08-29 08:56:05 · 416 阅读 · 0 评论 -
【Java 异常 & 解决方法 · JPA & lombok】java.lang.StackOverflowError 多对多 (manyToMany) 造成死循环
java.lang.StackOverflowError 多对多 (manyToMany) 造成死循环 及其解决方案。原创 2021-08-24 17:45:00 · 644 阅读 · 0 评论 -
【Java 设计模式 · 创建型】建造者模式(Builder Pattern)
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原创 2021-08-23 23:07:12 · 779 阅读 · 0 评论 -
【Java 设计模式 · 创建型】单例模式(Singleton Pattern)
单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。原创 2021-08-16 21:10:18 · 466 阅读 · 0 评论 -
【Java 设计模式 · 创建型】工厂模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)
工厂方法模式,定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。抽象工厂模式,:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。原创 2021-08-15 11:09:32 · 679 阅读 · 0 评论 -
【Java 设计模式】设计模式概述
模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。设计模式,在特定环境下为解决某一通用软件设计问题提供的一套定制方案,该方案描述了对象和类之间的相互作用。原创 2021-08-13 23:50:20 · 298 阅读 · 0 评论 -
【JVM】介绍、内存概念模型、类加载机制
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。原创 2021-08-11 21:11:59 · 918 阅读 · 2 评论 -
【Java 集合】HashMap 实现机制 & ConcurrentHashMap 保证线程安全
映射(Map)——为解决查找元素的精确副本问题而设计的数据结构,用以存放键 / 值对。提供了键 (Key),就能找到值 (Value),即`键 (Key)具有唯一性`,而值 (Value)则不具备这个特性。原创 2021-08-07 20:33:05 · 877 阅读 · 0 评论 -
【Java 线程】线程池 总结
为避免频繁地创建和销毁线程,我们可以复用创建的线程,具体操作为:① 维护一些线程(数量固定),让他们处于活跃状态,当需要使用线程时,直接获取一个连接即可。② 使用线程池后,创建线程变成了从线程池中获得空闲线程,关闭线程变成了向线程池归还线程,方便下次使用。原创 2021-07-27 23:14:36 · 1140 阅读 · 8 评论 -
【Java | LeetCode 1169. 查询无效交易】题解 & 思考
如果出现下述两种情况,交易可能无效:① 交易金额超过 ¥1000② 它和另一个城市中同名的另一笔交易相隔不超过 60 分钟(包含 60 分钟整)>每个交易字符串 transactions[i] 由一些用逗号分隔的值组成,这些值分别表示交易的名称,时间(以分钟计),金额以及城市。给你一份交易清单 transactions,返回可能无效的交易列表。你可以按任何顺序返回答案。原创 2021-07-25 22:45:54 · 446 阅读 · 4 评论 -
【Java 线程】线程基础
Java从根本上支持线程的概念。不仅Java语言本身能够很方便地支持多线程应用程序开发,Java虚拟机也是一个多线程进程,它为Java应用程序提供调度机制和内存管理。原创 2021-06-16 10:09:50 · 246 阅读 · 0 评论