本文内容
前言
在编写 Java 程序时,经常需要 new 对象,你知道 new 关键字背后的秘密吗?JVM 是如何执行 new 指令的呢?本文就带你一探究竟。
0. 概览
首先从全局的角度来看看 new 一个对象的整体过程,会经历如下几个主要步骤:
- 类加载检查;
- 内存分配;
- 初始化零值;
- 填充对象头信息;
- 执行构造函数(
<init>()
方法)。
本文内容
前言
JVM 的 自动内存管理机制 帮助了我们很友好的使用内存,写 Java 代码时,不用为 new 出来的对象进行释放,JVM 会在合适的时机帮我们进行 垃圾回收。
但我们还是有必要去了解一下 Java 的内存区域是怎样的,JVM 是怎样使用内存的,这样在出现内存相关的问题时,比如内存泄漏、内存溢出,才有能力去排查。
本章先来了解 Java 的 运行时数据区域 是如何划分的,每个区域分别有什么作用,保存什么数据?
本文内容
前言
在 Java 中,几乎所有的对象都分配在堆上,“几乎” 说明了还是有个别可以不分配到堆上的,那么到底是哪些个别对象呢?这就要涉及到本篇文章要讲的 逃逸分析 了。
1. 什么是逃逸分析?
本文内容
1. IO 是什么?
IO 全称是 Input/Output,即输入输出,常见的 IO 有磁盘 IO,网路 IO 等。
当我们需要将内存中的数据持久化时,就需要向磁盘写数据,这个过程就是一次输出(从内存角度来说,将内存中的数据输出到磁盘,从磁盘角度来说则是输入了);反之,我们需要把数据从磁盘中取出时,就是一个输入的过程。这时磁盘就是一个 IO 设备,负责将数据具体的写入和读出。
当我们需要跨主机进行通信时,一个常用的方法就是使用网络通信,而网络通信过程中需要借助网络 IO 设备,比如网卡、路由器、交换机等,它们负责数据流的输入和输出。
本文内容
前言
上一篇文章 中,介绍了 MySQL 中的锁类型,其中行级锁分为 Record Lock、Gap Lock 和 Next-Key Lock,那一条 SQL 语句要加行级锁时,应该加那个锁?具体是怎么加的呢?本文就来讲讲 MySQL 行级锁的加锁规则是怎样的。
本文内容
前言
在 上一章 中,讲解了模板模式的原理和应用,其主要功能就是 提高代码的复用性、基于扩展点可以在不改变源码的情况下方便的扩展功能。
而我们常用的 Callback 回调技术,也能起到模板模式的两大作用,那他们有什么区别呢?
本文内容
前言
本章来讲解另一个比较常用的行为型设计模式 — 模板模式,该模式主要用来解决 复用和扩展 两个问题。
1. 模板模式原理与实现
1.1 原理
模板模式,全称是模板方法模式(Template Method Design Pattern),GoF 是如下定义的:
本文内容
前言
在微服务架构中,系统的 可用性 是非常重要的,为了避免高并发下服务的崩溃,通常会使用 熔断、限流、降级 等措施。本文就先来讲解服务熔断是什么,它是如何提高系统的可用性的,服务出现抖动了怎么办?
1. 什么是服务熔断?
本文内容
前言
当通过注册中心获取到了某个服务的可用节点列表后,就可以对节点发起请求了。
但是,这个列表中一般都 包含了多个节点,那客户端应该选择哪一个呢?这就需要引入 负载均衡 了。