Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@

JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle.com/javase/specs/jvms/se8/html/index.html) 和周志明老师的[《深入理解Java虚拟机(第3版)》](https://book.douban.com/subject/34907497/) (强烈建议阅读多遍!)。

1. **[Java 内存区域](docs/java/jvm/Java内存区域.md)**
2. **[JVM 垃圾回收](docs/java/jvm/JVM垃圾回收.md)**
3. [JDK 监控和故障处理工具](docs/java/jvm/JDK监控和故障处理工具总结.md)
1. **[Java 内存区域](docs/java/jvm/内存区域.md)**
2. **[JVM 垃圾回收](docs/java/jvm/jvm垃圾回收.md)**
3. [JDK 监控和故障处理工具](docs/java/jvm/jdk监控和故障处理工具总结.md)
4. [类文件结构](docs/java/jvm/类文件结构.md)
5. **[类加载过程](docs/java/jvm/类加载过程.md)**
6. [类加载器](docs/java/jvm/类加载器.md)
7. **[【待完成】最重要的 JVM 参数指南(翻译完善了一半)](docs/java/jvm/最重要的JVM参数指南.md)**
9. **[【加餐】大白话带你认识 JVM](docs/java/jvm/[加餐]大白话带你认识JVM.md)**
7. **[【待完成】最重要的 JVM 参数总结(翻译完善了一半)](docs/java/jvm/jvm参数指南.md)**
9. **[【加餐】大白话带你认识 JVM](docs/java/jvm/[加餐]大白话带你认识jvm.md)**

### 新特性

Expand Down
Original file line number Diff line number Diff line change
@@ -1,54 +1,3 @@
<!-- TOC -->

- [1. 剖析面试最常见问题之 Java 集合框架](#1-剖析面试最常见问题之-java-集合框架)
- [1.1. 集合概述](#11-集合概述)
- [1.1.1. Java 集合概览](#111-java-集合概览)
- [1.1.2. 说说 List, Set, Queue, Map 四者的区别?](#112-说说-list-set-queue-map-四者的区别)
- [1.1.3. 集合框架底层数据结构总结](#113-集合框架底层数据结构总结)
- [1.1.3.1. List](#1131-list)
- [1.1.3.2. Set](#1132-set)
- [1.1.3.3 Queue](#1133-queue)
- [1.1.3.4. Map](#1134-map)
- [1.1.4. 如何选用集合?](#114-如何选用集合)
- [1.1.5. 为什么要使用集合?](#115-为什么要使用集合)
- [1.2. Collection 子接口之 List](#12-collection-子接口之-list)
- [1.2.1. Arraylist 和 Vector 的区别?](#121-arraylist-和-vector-的区别)
- [1.2.2. Arraylist 与 LinkedList 区别?](#122-arraylist-与-linkedlist-区别)
- [1.2.2.1. 补充内容:双向链表和双向循环链表](#1221-补充内容双向链表和双向循环链表)
- [1.2.2.2. 补充内容:RandomAccess 接口](#1222-补充内容randomaccess-接口)
- [1.2.3. 说一说 ArrayList 的扩容机制吧](#123-说一说-arraylist-的扩容机制吧)
- [1.3. Collection 子接口之 Set](#13-collection-子接口之-set)
- [1.3.1. comparable 和 Comparator 的区别](#131-comparable-和-comparator-的区别)
- [1.3.1.1. Comparator 定制排序](#1311-comparator-定制排序)
- [1.3.1.2. 重写 compareTo 方法实现按年龄来排序](#1312-重写-compareto-方法实现按年龄来排序)
- [1.3.2. 无序性和不可重复性的含义是什么](#132-无序性和不可重复性的含义是什么)
- [1.3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同](#133-比较-hashsetlinkedhashset-和-treeset-三者的异同)
- [1.4 Collection 子接口之 Queue](#14-collection-子接口之-queue)
- [1.4.1 Queue 与 Deque 的区别](#141-queue-与-deque-的区别)
- [1.4.2 ArrayDeque 与 LinkedList 的区别](#142-arraydeque-与-linkedlist-的区别)
- [1.4.3 说一说 PriorityQueue](#143-说一说-priorityqueue)
- [1.5. Map 接口](#15-map-接口)
- [1.5.1. HashMap 和 Hashtable 的区别](#151-hashmap-和-hashtable-的区别)
- [1.5.2. HashMap 和 HashSet 区别](#152-hashmap-和-hashset-区别)
- [1.5.3. HashMap 和 TreeMap 区别](#153-hashmap-和-treemap-区别)
- [1.5.4. HashSet 如何检查重复](#154-hashset-如何检查重复)
- [1.5.5. HashMap 的底层实现](#155-hashmap-的底层实现)
- [1.5.5.1. JDK1.8 之前](#1551-jdk18-之前)
- [1.5.5.2. JDK1.8 之后](#1552-jdk18-之后)
- [1.5.6. HashMap 的长度为什么是 2 的幂次方](#156-hashmap-的长度为什么是-2-的幂次方)
- [1.5.7. HashMap 多线程操作导致死循环问题](#157-hashmap-多线程操作导致死循环问题)
- [1.5.8. HashMap 有哪几种常见的遍历方式?](#158-hashmap-有哪几种常见的遍历方式)
- [1.5.9. ConcurrentHashMap 和 Hashtable 的区别](#159-concurrenthashmap-和-hashtable-的区别)
- [1.5.10. ConcurrentHashMap 线程安全的具体实现方式/底层具体实现](#1510-concurrenthashmap-线程安全的具体实现方式底层具体实现)
- [1.5.10.1. JDK1.7(上面有示意图)](#15101-jdk17上面有示意图)
- [1.5.10.2. JDK1.8 (上面有示意图)](#15102-jdk18-上面有示意图)
- [1.6. Collections 工具类](#16-collections-工具类)
- [1.6.1. 排序操作](#161-排序操作)
- [1.6.2. 查找,替换操作](#162-查找替换操作)
- [1.6.3. 同步控制](#163-同步控制)

<!-- /TOC -->

# 1. 剖析面试最常见问题之 Java 集合框架

## 1.1. 集合概述
Expand Down Expand Up @@ -309,11 +258,9 @@ Output:

### 1.3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同

`HashSet` 是 `Set` 接口的主要实现类 ,`HashSet` 的底层是 `HashMap`,线程不安全的,可以存储 null 值;

`LinkedHashSet` 是 `HashSet` 的子类,能够按照添加的顺序遍历;

`TreeSet` 底层使用红黑树,元素是有序的,排序的方式有自然排序和定制排序。
- `HashSet`、`LinkedHashSet` 和 `TreeSet` 都是 `Set` 接口的实现类,都能保证元素唯一,并且都不是线程安全的。
- `HashSet`、`LinkedHashSet` 和 `TreeSet` 的主要区别在于底层数据结构不同。`HashSet` 的底层数据结构是哈希表(基于 `HashMap` 实现)。`LinkedHashSet` 的底层数据结构是链表和哈希表,元素的插入和取出顺序满足 FIFO。`TreeSet` 底层数据结构是红黑树,元素是有序的,排序的方式有自然排序和定制排序。
- 底层数据结构不同又导致这三者的应用场景不同。`HashSet` 用于不需要保证元素插入和取出顺序的场景,`LinkHashSet` 用于保证元素的插入和取出顺序满足 FIFO 的场景,`TreeSet` 用于支持对元素自定义排序规则的场景。

## 1.4 Collection 子接口之 Queue

Expand Down
20 changes: 0 additions & 20 deletions docs/java/jvm/JDK监控和故障处理工具总结.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,3 @@
<!-- TOC -->

- [JDK 监控和故障处理工具总结](#jdk-监控和故障处理工具总结)
- [JDK 命令行工具](#jdk-命令行工具)
- [`jps`:查看所有 Java 进程](#jps查看所有-java-进程)
- [`jstat`: 监视虚拟机各种运行状态信息](#jstat-监视虚拟机各种运行状态信息)
- [` jinfo`: 实时地查看和调整虚拟机各项参数](#-jinfo-实时地查看和调整虚拟机各项参数)
- [`jmap`:生成堆转储快照](#jmap生成堆转储快照)
- [**`jhat`**: 分析 heapdump 文件](#jhat-分析-heapdump-文件)
- [**`jstack`** :生成虚拟机当前时刻的线程快照](#jstack-生成虚拟机当前时刻的线程快照)
- [JDK 可视化分析工具](#jdk-可视化分析工具)
- [JConsole:Java 监视与管理控制台](#jconsolejava-监视与管理控制台)
- [连接 Jconsole](#连接-jconsole)
- [查看 Java 程序概况](#查看-java-程序概况)
- [内存监控](#内存监控)
- [线程监控](#线程监控)
- [Visual VM:多合一故障处理工具](#visual-vm多合一故障处理工具)

<!-- /TOC -->

# JDK 监控和故障处理工具总结

## JDK 命令行工具
Expand Down
43 changes: 2 additions & 41 deletions docs/java/jvm/JVM垃圾回收.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,5 @@
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->

<!-- code_chunk_output -->

- [JVM 垃圾回收](#jvm-垃圾回收)
- [写在前面](#写在前面)
- [本节常见面试题](#本节常见面试题)
- [本文导火索](#本文导火索)
- [1 揭开 JVM 内存分配与回收的神秘面纱](#1-揭开-jvm-内存分配与回收的神秘面纱)
- [1.1 对象优先在 eden 区分配](#11-对象优先在-eden-区分配)
- [1.2 大对象直接进入老年代](#12-大对象直接进入老年代)
- [1.3 长期存活的对象将进入老年代](#13-长期存活的对象将进入老年代)
- [1.4 动态对象年龄判定](#14-动态对象年龄判定)
- [1.5 主要进行 gc 的区域](#15-主要进行-gc-的区域)
- [2 对象已经死亡?](#2-对象已经死亡)
- [2.1 引用计数法](#21-引用计数法)
- [2.2 可达性分析算法](#22-可达性分析算法)
- [2.3 再谈引用](#23-再谈引用)
- [2.4 不可达的对象并非“非死不可”](#24-不可达的对象并非非死不可)
- [2.5 如何判断一个常量是废弃常量?](#25-如何判断一个常量是废弃常量)
- [2.6 如何判断一个类是无用的类](#26-如何判断一个类是无用的类)
- [3 垃圾收集算法](#3-垃圾收集算法)
- [3.1 标记-清除算法](#31-标记-清除算法)
- [3.2 标记-复制算法](#32-标记-复制算法)
- [3.3 标记-整理算法](#33-标记-整理算法)
- [3.4 分代收集算法](#34-分代收集算法)
- [4 垃圾收集器](#4-垃圾收集器)
- [4.1 Serial 收集器](#41-serial-收集器)
- [4.2 ParNew 收集器](#42-parnew-收集器)
- [4.3 Parallel Scavenge 收集器](#43-parallel-scavenge-收集器)
- [4.4.Serial Old 收集器](#44serial-old-收集器)
- [4.5 Parallel Old 收集器](#45-parallel-old-收集器)
- [4.6 CMS 收集器](#46-cms-收集器)
- [4.7 G1 收集器](#47-g1-收集器)
- [4.8 ZGC 收集器](#48-zgc-收集器)
- [参考](#参考)

<!-- /code_chunk_output -->


# JVM 垃圾回收

# JVM 垃圾回收详解

## 写在前面

Expand Down
2 changes: 2 additions & 0 deletions docs/java/jvm/[加餐]大白话带你认识JVM.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# 大白话带你认识JVM

> 来自掘金用户:[说出你的愿望吧丷](https://juejin.im/user/5c2400afe51d45451758aa96)投稿,原文地址:https://juejin.im/post/5e1505d0f265da5d5d744050#heading-28

## 前言
Expand Down
12 changes: 0 additions & 12 deletions docs/java/jvm/jvm 知识点汇总.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
> 本文由 JavaGuide 翻译自 [https://www.baeldung.com/jvm-parameters](https://www.baeldung.com/jvm-parameters),并对文章进行了大量的完善补充。翻译不易,如需转载请注明出处,作者:[baeldung](https://www.baeldung.com/author/baeldung/) 。
# 最重要的 JVM 参数总结

本文由 JavaGuide 翻译自 [https://www.baeldung.com/jvm-parameters](https://www.baeldung.com/jvm-parameters),并对文章进行了大量的完善补充。翻译不易,如需转载请注明出处,作者:[baeldung](https://www.baeldung.com/author/baeldung/) 。

## 1.概述

Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,3 @@
<!-- TOC -->

- [Java 内存区域详解](#java-内存区域详解)
- [写在前面 (常见面试题)](#写在前面-常见面试题)
- [基本问题](#基本问题)
- [拓展问题](#拓展问题)
- [一 概述](#一-概述)
- [二 运行时数据区域](#二-运行时数据区域)
- [2.1 程序计数器](#21-程序计数器)
- [2.2 Java 虚拟机栈](#22-java-虚拟机栈)
- [2.3 本地方法栈](#23-本地方法栈)
- [2.4 堆](#24-堆)
- [2.5 方法区](#25-方法区)
- [2.5.1 方法区和永久代的关系](#251-方法区和永久代的关系)
- [2.5.2 常用参数](#252-常用参数)
- [2.5.3 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢?](#253-为什么要将永久代-permgen-替换为元空间-metaspace-呢)
- [2.6 运行时常量池](#26-运行时常量池)
- [2.7 直接内存](#27-直接内存)
- [三 HotSpot 虚拟机对象探秘](#三-hotspot-虚拟机对象探秘)
- [3.1 对象的创建](#31-对象的创建)
- [Step1:类加载检查](#step1类加载检查)
- [Step2:分配内存](#step2分配内存)
- [Step3:初始化零值](#step3初始化零值)
- [Step4:设置对象头](#step4设置对象头)
- [Step5:执行 init 方法](#step5执行-init-方法)
- [3.2 对象的内存布局](#32-对象的内存布局)
- [3.3 对象的访问定位](#33-对象的访问定位)
- [四 重点补充内容](#四--重点补充内容)
- [4.1 String 类和常量池](#41-string-类和常量池)
- [4.2 String s1 = new String("abc");这句话创建了几个字符串对象?](#42-string-s1--new-stringabc这句话创建了几个字符串对象)
- [4.3 8 种基本类型的包装类和常量池](#43-8-种基本类型的包装类和常量池)
- [参考](#参考)
- [公众号](#公众号)

<!-- /TOC -->

# Java 内存区域详解

如果没有特殊说明,都是针对的是 HotSpot 虚拟机。
Expand Down
2 changes: 2 additions & 0 deletions docs/java/jvm/类加载器.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# 类加载器详解

## 回顾一下类加载过程

类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。
Expand Down
26 changes: 2 additions & 24 deletions docs/java/jvm/类加载过程.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,6 @@
<!-- TOC -->
# 类加载过程详解

- [类的生命周期](#类的生命周期)
- [类加载过程](#类加载过程)
- [加载](#加载)
- [验证](#验证)
- [准备](#准备)
- [解析](#解析)
- [初始化](#初始化)
- [卸载](#卸载)
- [公众号](#公众号)

<!-- /TOC -->

# 类的生命周期
## 类的生命周期

一个类的完整生命周期如下:

Expand Down Expand Up @@ -115,13 +103,3 @@ Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚
- 《深入理解 Java 虚拟机》
- 《实战 Java 虚拟机》
- <https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html>

## 公众号

如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。

**《Java 面试突击》:** 由本文档衍生的专为面试而生的《Java 面试突击》V2.0 PDF 版本[公众号](#公众号)后台回复 **"Java 面试突击"** 即可免费领取!

**Java 工程师必备学习资源:** 一些 Java 工程师常用学习资源[公众号](#公众号)后台回复关键字 **“1”** 即可免费无套路获取。

![我的公众号](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png)
22 changes: 1 addition & 21 deletions docs/java/jvm/类文件结构.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,5 @@

<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->

<!-- code_chunk_output -->

- [类文件结构](#类文件结构)
- [一 概述](#一-概述)
- [二 Class 文件结构总结](#二-class-文件结构总结)
- [2.1 魔数(Magic Number)](#21-魔数magic-number)
- [2.2 Class 文件版本号(Minor&Major Version)](#22-class-文件版本号minormajor-version)
- [2.3 常量池(Constant Pool)](#23-常量池constant-pool)
- [2.4 访问标志(Access Flags)](#24-访问标志access-flags)
- [2.5 当前类(This Class)、父类(Super Class)、接口(Interfaces)索引集合](#25-当前类this-class-父类super-class-接口interfaces索引集合)
- [2.6 字段表集合(Fields)](#26-字段表集合fields)
- [2.7 方法表集合(Methods)](#27-方法表集合methods)
- [2.8 属性表集合(Attributes)](#28-属性表集合attributes)
- [参考](#参考)

<!-- /code_chunk_output -->


# 类文件结构
# 类文件结构详解

## 一 概述

Expand Down
Binary file not shown.
Binary file not shown.
Binary file removed media/pictures/jvm/java_jvm_heap_parameters.png
Binary file not shown.
Binary file removed media/pictures/jvm/java_jvm_suggest_parameters.png
Binary file not shown.
Loading