本文内容
前言
在编写 Java 程序时,经常需要 new 对象,你知道 new 关键字背后的秘密吗?JVM 是如何执行 new 指令的呢?本文就带你一探究竟。
0. 概览
首先从全局的角度来看看 new 一个对象的整体过程,会经历如下几个主要步骤:
- 类加载检查;
- 内存分配;
- 初始化零值;
- 填充对象头信息;
- 执行构造函数(
<init>()
方法)。
本文内容
前言
JVM 的 自动内存管理机制 帮助了我们很友好的使用内存,写 Java 代码时,不用为 new 出来的对象进行释放,JVM 会在合适的时机帮我们进行 垃圾回收。
但我们还是有必要去了解一下 Java 的内存区域是怎样的,JVM 是怎样使用内存的,这样在出现内存相关的问题时,比如内存泄漏、内存溢出,才有能力去排查。
本章先来了解 Java 的 运行时数据区域 是如何划分的,每个区域分别有什么作用,保存什么数据?
本文内容
前言
在 Java 中,几乎所有的对象都分配在堆上,“几乎” 说明了还是有个别可以不分配到堆上的,那么到底是哪些个别对象呢?这就要涉及到本篇文章要讲的 逃逸分析 了。
1. 什么是逃逸分析?
本文内容
本文内容
前言
在 上一篇文章 中,理解了线程池的使用方法和核心原理后,接下来我们就手撸一个简易版的线程。
我会从一个最简单的版本开始,一步步找出问题,然后提出解决思路,最后编码实现,最后完成一个基本功能完备的线程池。
项目地址:https://github.com/AruNi-01/JavaConcurrency/tree/master/src/main/java/com/run/threadpool
本文内容
1. 什么是 AQS
AQS 全称 AbstractQueuedSynchronizer,即抽象队列同步器,是 JUC 包下的一个 构建锁和同步器的框架。
AQS 是一个抽象类,内部提供了一些使用 protected
修饰的方法,意图就是让我们自己 继承 AQS,重写这些模板方法,即可来构建自己的同步器。
本文内容
前言
上一篇文章简单介绍了 AQS 的概念和底层实现,但是还未深入源码,这篇文章将基于源码来剖析 AQS 是如何实现的。
本文内容
本文来源 bugstack,加上了自己的理解!
1. 介绍
HashMap 最早出现在 JDK 1.2 中,主要用于存放键值对(key-value),底层基于散列算法实现,是 线程不安全的。