JVM(七)-静态绑定和动态绑定
参考文献
极客时间-JVM是如何执行方法调用的?(上)
静态绑定和动态绑定
静态绑定: 所有依赖静态类型来定位方法执行版本的分派方式.如: 重载方法.
静态绑定(也称为早期绑定)是指在编译时进行的方法绑定.在静态绑定中,方法调用的具体实现在编译时已经确定,因此它是基于引用类型而不是基于运行时对象类型的.这意味着,如果调用的方法是在父类中定义的,则不管实际运行时类型是什么,该方法都将被调用.
动态绑定: 根据运行的时机类型来定位方法执行版本的分派方式.如: 重写方法.
动态绑定(也称为晚期绑定或运行时绑定)是指在运行时进行的方法绑定.在动态绑定中,方法调用的具体实现是在运行时根据实际对象类型确定的,因此它是基于运行时对象类型的.
Java 虚拟机识别方法的关键在于类名,方法名以及方法描述符(method descriptor).
方法描述符: 它是由方法的参数类型以及返回类型所构成.在同一个类中,如果同时出现多个名字相同且描述符也相同的方法,那么 Java 虚拟机会在类的验证阶段报错.
Java 虚拟机中关于方法重写的判定同样基于方法描述符.也就是说,如果 ...
Linux工具-top
参考文献
top linux下的任务管理器
Linux 中 CPU 利用率是如何算出来的?
top命令说明
1234567891011top - 16:30:42 up 308 days, 19:08, 1 user, load average: 0.00, 0.02, 0.00Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.5 us, 1.0 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 stMiB Mem : 3591.0 total, 158.4 free, 2741.9 used, 690.7 buff/cacheMiB Swap: 0.0 total, 0.0 free, 0.0 used. 565.8 avail Mem PID USER PR NI VIRT RES SHR S %CPU %ME ...
JVM-线程堆栈等数据分析
参考文献
JVM线程模型
线程创建和销毁
在语言层面,线程对应的类是java.lang.Thread,启动方法为Thread#start()。
在Java线程启动时会创建底层线程(native Thread,在任务执行完成后会自动回收。
JVM中所有线程都交给操作系统来负责调度,以将线程分配到可用的 CPU 上执行
线程状态
从 JVM的角度看,线程状态主要包括 4 种:
_thread_new:正在初始化的新线程
_thread_in_Java:正在执行 Java 代码的线程
_thread_in_vm:在 JVM 内部执行的线程
_thread_blocked:由于某种原因被阻塞的线程(例如获取锁、等待条件、休眠、执行阻塞的 I/O 操作等等)
JVM内部线程
JVM 内部线程主要分为以下几种:
VM 线程: 单例的VMThread对象,负责执行 VM 操作,下文将对此进行讨论;
定时任务线程: 单例的WatcherThread对象,模拟在 VM 中执行定时操作的计时器中断;
GC 线程: 垃圾收集器中,用于支持并行和并发垃圾回收的线程;
编译器线程: 将字节码 ...
JVM-参数设置说明
参考文献
Guide to the Most Important JVM Parameters
Java HotSpot VM Options
Tuning JVM Garbage Collection for Production Deployments
Convert GC Logging Flags to Xlog
The java Command
JVM GC配置指南
Java容器化参数配置最佳实践
JVM参数说明
123java [options] classname [args]java [options] -jar filename [args]
[options] 部分称为JVM 选项,对应 IDE 中的 VM options, 可用 jps -v 查看.
[args] 部分是指传给main函数的参数, 对应 IDE 中的 Program arguments, 可用 jps -m 查看.
Java 和 JDK 内置的工具,指定参数时都是一个 -,不管是长参数还是短参数.有时候,JVM 启动参数和 Java 程序启动参数,并没必 ...
分布式-概念
参考文献
大规模分布式系统架构与设计实战-彭渊
从Paxos到Zookeeper 分布式一致性原理与实践
极客时间- 分布式技术原理算法解析
CoreOS 实战:剖析 etcd
Raft动画演示
分布式事务之深入理解什么是2PC、3PC及TCC协议?
分布式概览
分布式起源
单兵模式: 单机模式
单机模式是指,所有应用程序和数据均部署在一台电脑或服务器上,由一台计算机完成所有的处理.
主要问题: 性能受限,存在单点失效问题.
游击队模式: 数据并行或数据分布式
为了解决单机模式的问题,并行计算得到了发展,进而出现了数据并行(也叫做数据分布式)模式.
并行计算采用消息共享模式使用多台计算机并行运行或执行多项任务,核心原理是每台计算机上执行相同的程序,将数据进行拆分放到不同的计算机上进行计算.
好处: 可以利用多台计算机并行处理多个请求,使得我们可以在相同的时间内完成更多的请求处理,解决了单机模式的计算效率瓶颈问题.
主要的问题: 对提升单个任务的执行性能及降低时延无效.
相同的应用部署到不同的服务器上,当大量用户请求过来,如何能比较均衡地转发到不同的应用服务器上(负载均衡) ...
MyBatis-操作技巧
参考文献
Insert Statements
using foreach to do batch insert with mybatis
批量插入
MySQL-常用SQL汇总
参考文献
MySQL按日期分组统计(按天统计,按月统计)
mysql查询今天、昨天、7天、近30天、本月、上一月 数据
SQL进阶教程–[日] MICK
Divided We Stand: The SQL of Relational Division
High Performance Relational Division in SQL Server
按日期分组统计
按月统计
1234567SELECT date_format( create_time, '%Y-%m' ) date, count(*) numFROM table_name GROUP BY date_format( create_time, '%Y-%m' );
按天统计
1234567SELECT date_format( create_time, '%Y-%m-%d' ) date, count(*) num FROM table_name GROUP BY date_format( create_time, '%Y-%m-%d ...
Spring源码-阅读笔记
参考文献
Spring源码深度解析-郝佳
极客时间-Spring编程常见错误50例-傅健
环境说明
spring-framework 5.3x
Spring容器实现
DefaultListableBeanFactory
XmlBeanFeactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFeactory与DefaultListableBeanFactory不同的地方是在于XmlBeanFactory中使用了自定义的XML读取器XMLBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口.
类图中各个类的作用
...
Java-Mail操作
参考文献
邮件基本概念及发送方式
RFC1869文档
RFC2821文档
邮件的基本概念
邮件服务器
邮件服务器是一种用来负责电子邮件收发管理的设备,同时也是电子邮件系统中的核心内容.
邮件服务器是有发送邮件SMTP服务器和接收邮件POP3服务器协同工作,并且为用户提供接收邮件的功能.
邮件服务器比一般的免费邮箱更加安全,一直被企业公司使用.
电子邮箱
电子邮箱也称为E-mail地址,比如xx@qq.com、xx@163.com。用户能通过E-mail地址标识自己发送的电子邮件,同时也可以通过这个地址接收别人发来的电子邮件。
电子邮箱需要到邮件服务器进行申请,也就是说,电子邮箱其实就是用户在邮件服务器上申请的账户。邮件服务器会把接收到的邮件保存到为该账户所分配的邮箱空间中,用户通过用户名密码登录到邮件服务器查收该地址已经收到的邮件。一般来讲,邮件服务器为用户分配的邮箱空间是有限的。
邮件客户端
邮件客户端就是我们平常在上面进行邮件发送的网站或者应用,比如常见的FoxMail、雷鸟、outlook、163、mesign等;
通常使用IMAP/APOP/POP3/SMTP协议 ...
设计模式-结构型-组合模式(Composite)
参考文献
https://www.oodesign.com/composite-pattern
https://refactoringguru.cn/design-patterns/composite
组合模式
允许将对象组织成树形结构,以表示“整体-部分”层次关系,并且能够以统一的方式处理单个对象和组合对象.
组件
组件(Component):抽象类或接口,定义了组合中所有对象共有的操作,可以是抽象类或接口.它可以包含对子组件进行管理的方法,比如添加、删除、获取子组件等.
叶子节点(Leaf):代表组合中的叶子对象,叶子节点没有子节点,实现了组件的操作方法.
容器节点(Composite):代表组合中的容器对象,可以包含子节点,实现了组件的操作方法.容器节点可以存储叶子节点和其他容器节点,形成树形结构.
客户端(Client):使用组合模式的外部代码,通过组件接口操作组合对象.客户端通常无法区分处理的是单个对象还是组合对象,因为它们都遵循同样的接口
实现方式
使用抽象类或接口定义组件(Component),其中包含对子组件的管理方法,如添加、删除、获取子组件等.
创建叶 ...