Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
醒狮指南
JavaGuide
提交
cd88d7c0
J
JavaGuide
项目概览
醒狮指南
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cd88d7c0
编写于
6月 17, 2019
作者:
S
SnailClimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update:optimize content
上级
aea1dfb8
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
112 addition
and
30 deletion
+112
-30
README.md
README.md
+5
-3
docs/java/Multithread/AQS.md
docs/java/Multithread/AQS.md
+10
-5
docs/java/Multithread/Atomic.md
docs/java/Multithread/Atomic.md
+34
-5
docs/java/Multithread/并发容器总结.md
docs/java/Multithread/并发容器总结.md
+12
-2
docs/java/What's New in JDK8/Java8Tutorial.md
docs/java/What's New in JDK8/Java8Tutorial.md
+11
-2
docs/java/What's New in JDK8/Java8教程推荐.md
docs/java/What's New in JDK8/Java8教程推荐.md
+0
-2
docs/java/jvm/JDK监控和故障处理工具总结.md
docs/java/jvm/JDK监控和故障处理工具总结.md
+2
-0
docs/java/jvm/JVM垃圾回收.md
docs/java/jvm/JVM垃圾回收.md
+10
-1
docs/java/jvm/Java内存区域.md
docs/java/jvm/Java内存区域.md
+20
-6
docs/java/jvm/类加载器.md
docs/java/jvm/类加载器.md
+2
-0
docs/java/jvm/类加载过程.md
docs/java/jvm/类加载过程.md
+3
-1
docs/java/jvm/类文件结构.md
docs/java/jvm/类文件结构.md
+3
-3
未找到文件。
README.md
浏览文件 @
cd88d7c0
...
...
@@ -18,9 +18,11 @@
<p
align=
"center"
>
<a
href=
"https://www.aliyun.com/acts/hi618/index?userCode=hf47liqn"
target=
"_blank"
>
<img
src=
"https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/阿里云外投-1600-300.png"
width=
"390px"
/>
<img
src=
"https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/006rNwoDgy1g2dw5gau7nj30eg02vwfr.jpg"
width=
"390px"
/>
<img
src=
"https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/阿里云外投-1600-300.png"
width=
"390px"
height=
"70px"
alt=
"阿里云618 2折起!"
/>
</a>
<a
href=
"https://coding.net/?utm_source=JavaGuide"
target=
"_blank"
>
<img
src=
"https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/006rNwoDgy1g2dw5gau7nj30eg02vwfr.jpg"
alt=
"零成本开启敏捷研发"
height=
"70px"
width=
"390px"
/>
</a>
</p>
推荐使用 https://snailclimb.top/JavaGuide/ 在线阅读(访问速度慢的话,请使用 https://snailclimb.gitee.io/javaguide ),在线阅读内容本仓库同步一致。这种方式阅读的优势在于:有侧边栏阅读体验更好,Gitee pages 的访问速度相对来说也比较快。
...
...
@@ -71,7 +73,7 @@
### 容器
*
[
常见面试题
](
docs/java/collection/Java集合框架常见面试题.md
)
*
[
Java容器常见面试题/知识点总结
](
docs/java/collection/Java集合框架常见面试题.md
)
*
[
ArrayList 源码学习
](
docs/java/collection/ArrayList.md
)
*
[
LinkedList 源码学习
](
docs/java/collection/LinkedList.md
)
*
[
HashMap(JDK1.8)源码学习
](
docs/java/collection/HashMap.md
)
...
...
docs/java/Multithread/AQS.md
浏览文件 @
cd88d7c0
**目录:**
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- MarkdownTOC -->
-
[
1 AQS 简单介绍
](
#1-aqs-简单介绍
)
...
...
@@ -23,10 +23,6 @@
> 常见问题:AQS原理?;CountDownLatch和CyclicBarrier了解吗,两者的区别是什么?用过Semaphore吗?
**本节思维导图:**
![
并发编程面试必备:AQS 原理以及 AQS 同步组件总结
](
http://my-blog-to-use.oss-cn-beijing.aliyuncs.com/18-10-31/61115865.jpg
)
### 1 AQS 简单介绍
AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。
...
...
@@ -471,3 +467,12 @@ CyclicBarrier和CountDownLatch的区别这部分内容参考了如下两篇文
ReentrantLock 和 synchronized 的区别在上面已经讲过了这里就不多做讲解。另外,需要注意的是:读写锁 ReentrantReadWriteLock 可以保证多个线程可以同时读,所以在读操作远大于写操作的时候,读写锁就非常有用了。
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源公众号后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png
)
\ No newline at end of file
docs/java/Multithread/Atomic.md
浏览文件 @
cd88d7c0
> 个人觉得这一节掌握基本的使用即可!
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
**本节思维导图:**
> 个人觉得这一节掌握基本的使用即可!
![](
https://user-gold-cdn.xitu.io/2018/10/30/166c58b785368234?w=1200&h=657&f=png&s=49615
)
<!-- TOC -->
-
[
1 Atomic 原子类介绍
](
#1-atomic-原子类介绍
)
-
[
2 基本类型原子类
](
#2-基本类型原子类
)
-
[
2.1 基本类型原子类介绍
](
#21-基本类型原子类介绍
)
-
[
2.2 AtomicInteger 常见方法使用
](
#22-atomicinteger-常见方法使用
)
-
[
2.3 基本数据类型原子类的优势
](
#23-基本数据类型原子类的优势
)
-
[
2.4 AtomicInteger 线程安全原理简单分析
](
#24-atomicinteger-线程安全原理简单分析
)
-
[
3 数组类型原子类
](
#3-数组类型原子类
)
-
[
3.1 数组类型原子类介绍
](
#31-数组类型原子类介绍
)
-
[
3.2 AtomicIntegerArray 常见方法使用
](
#32-atomicintegerarray-常见方法使用
)
-
[
4 引用类型原子类
](
#4-引用类型原子类
)
-
[
4.1 引用类型原子类介绍
](
#41--引用类型原子类介绍
)
-
[
4.2 AtomicReference 类使用示例
](
#42-atomicreference-类使用示例
)
-
[
4.3 AtomicStampedReference 类使用示例
](
#43-atomicstampedreference-类使用示例
)
-
[
4.4 AtomicMarkableReference 类使用示例
](
#44-atomicmarkablereference-类使用示例
)
-
[
5 对象的属性修改类型原子类
](
#5-对象的属性修改类型原子类
)
-
[
5.1 对象的属性修改类型原子类介绍
](
#51-对象的属性修改类型原子类介绍
)
-
[
5.2 AtomicIntegerFieldUpdater 类使用示例
](
#52-atomicintegerfieldupdater-类使用示例
)
<!-- /TOC -->
### 1 Atomic 原子类介绍
...
...
@@ -12,7 +32,7 @@ Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是
并发包
`java.util.concurrent`
的原子类都存放在
`java.util.concurrent.atomic`
下,如下图所示。
![
JUC 原子类概览
](
https://user-gold-cdn.xitu.io/2018/10/30/166c4ac08d4c5547?w=317&h=367&f=png&s=13267
)
![
JUC原子类概览
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/JUC原子类概览.png
)
根据操作的数据类型,可以将JUC包中的原子类分为4类
...
...
@@ -136,7 +156,7 @@ Thread-0 ------ currentValue=1, finalValue=2, compareAndSet Result=true
上面三个类提供的方法几乎相同,所以我们这里以 AtomicInteger 为例子来介绍。
**AtomicInteger 类常用方法**
```
java
public
final
int
get
()
//获取当前的值
public
final
int
getAndSet
(
int
newValue
)
//获取当前的值,并设置新的值
...
...
@@ -525,3 +545,12 @@ class User {
23
```
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源公众号后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png
)
\ No newline at end of file
docs/java/Multithread/并发容器总结.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- MarkdownTOC -->
...
...
@@ -214,10 +215,18 @@ PriorityBlockingQueue 并发控制采用的是 **ReentrantLock**,队列为无
使用跳表实现Map 和使用哈希算法实现Map的另外一个不同之处是:哈希并不会保存元素的顺序,而跳表内所有的元素都是排序的。因此在对跳表进行遍历时,你会得到一个有序的结果。所以,如果你的应用需要有序性,那么跳表就是你不二的选择。JDK 中实现这一数据结构的类是ConcurrentSkipListMap。
## 七 参考
-
《实战Java高并发程序设计》
-
https://javadoop.com/post/java-concurrent-queue
-
https://juejin.im/post/5aeebd02518825672f19c546
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源公众号后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/167598cd2e17b8ec.png
)
\ No newline at end of file
docs/java/What's New in JDK8/Java8Tutorial.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
随着 Java 8 的普及度越来越高,很多人都提到面试中关于Java 8 也是非常常问的知识点。应各位要求和需要,我打算对这部分知识做一个总结。本来准备自己总结的,后面看到Github 上有一个相关的仓库,地址:
[
https://github.com/winterbe/java8-tutorial
](
https://github.com/winterbe/java8-tutorial
)
。这个仓库是英文的,我对其进行了翻译并添加和修改了部分内容,下面是正文了。
...
...
@@ -916,9 +918,16 @@ System.out.println(hints2.length); // 2
@interface
MyAnnotation
{}
```
## Where to go from here?
关于Java 8的新特性就写到这了,肯定还有更多的特性等待发掘。JDK 1.8里还有很多很有用的东西,比如
`Arrays.parallelSort`
,
`StampedLock`
和
`CompletableFuture`
等等。
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"Java面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源
[
公众号
](
#公众号
)
后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334
)
\ No newline at end of file
docs/java/What's New in JDK8/Java8教程推荐.md
浏览文件 @
cd88d7c0
### 书籍
-
**《Java8 In Action》**
...
...
docs/java/jvm/JDK监控和故障处理工具总结.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
-
[
JDK 监控和故障处理工具总结
](
#jdk-监控和故障处理工具总结
)
...
...
docs/java/jvm/JVM垃圾回收.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
...
...
@@ -252,7 +253,7 @@ JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引
### 3.1 标记-清除算法
算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,效率也很高,但是
会带来两个明显的问题:
该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,后续的算法都是对其不足进行改进得到。这种垃圾收集算法
会带来两个明显的问题:
1.
**效率问题**
2.
**空间问题(标记清除后会产生大量不连续的碎片)**
...
...
@@ -391,7 +392,15 @@ G1 收集器的运作大致分为以下几个步骤:
-
https://my.oschina.net/hosee/blog/644618
-
<https://docs.oracle.com/javase/specs/jvms/se8/html/index.html>
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"Java面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源
[
公众号
](
#公众号
)
后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334
)
...
...
docs/java/jvm/Java内存区域.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
-
[
Java 内存区域详解
](
#java-内存区域详解
)
...
...
@@ -203,7 +205,7 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**
### 3.1 对象的创建
下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么。
![
Java
对象的创建过程
](
https://user-gold-cdn.xitu.io/2018/8/22/16561e59a4135869?w=950&h=279&f=png&s=28529
)
![
Java
创建对象的过程
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/Java创建对象的过程.png
)
#### Step1:类加载检查
...
...
@@ -218,7 +220,7 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**
选择以上两种方式中的哪一种,取决于 Java 堆内存是否规整。而 Java 堆内存是否规整,取决于 GC 收集器的算法是"标记-清除",还是"标记-整理"(也称作"标记-压缩"),值得注意的是,复制算法内存也是规整的
![
](
https://user-gold-cdn.xitu.io/2018/8/22/16561e59a40a2c3d?w=1426&h=333&f=png&s=26346
)
![
内存分配的两种方式
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/内存分配的两种方式.png
)
**内存分配并发问题(补充内容,需要掌握)**
...
...
@@ -254,11 +256,12 @@ JDK1.4 中新加入的 **NIO(New Input/Output) 类**,引入了一种基于**
建立对象就是为了使用对象,我们的 Java 程序通过栈上的 reference 数据来操作堆上的具体对象。对象的访问方式有虚拟机实现而定,目前主流的访问方式有
**①使用句柄**
和
**②直接指针**
两种:
1.
**句柄:**
如果使用句柄的话,那么 Java 堆中将会划分出一块内存来作为句柄池,reference 中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息;
![
使用句柄
](
https://user-gold-cdn.xitu.io/2018/4/27/16306b9573968946?w=786&h=362&f=png&s=109201
)
!
[
对象的访问定位-使用句柄
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/对象的访问定位-使用句柄.png
)
2.
**直接指针:**
如果使用直接指针访问,那么 Java 堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,而 reference 中存储的直接就是对象的地址。
![
使用直接指针
](
https://user-gold-cdn.xitu.io/2018/4/27/16306ba3a41b6b65?w=766&h=353&f=png&s=99172
)
![
对象的访问定位-直接指针
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/对象的访问定位-直接指针.png
)
**这两种对象访问方式各有优势。使用句柄来访问的最大好处是 reference 中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而 reference 本身不需要修改。使用直接指针访问方式最大的好处就是速度快,它节省了一次指针定位的时间开销。**
...
...
@@ -306,7 +309,7 @@ System.out.println(str2==str3);//false
```
java
String
str1
=
"str"
;
String
str2
=
"ing"
;
String
str3
=
"str"
+
"ing"
;
//常量池中的对象
String
str4
=
str1
+
str2
;
//在堆上创建的新的对象
String
str5
=
"string"
;
//常量池中的对象
...
...
@@ -314,7 +317,7 @@ System.out.println(str2==str3);//false
System
.
out
.
println
(
str3
==
str5
);
//true
System
.
out
.
println
(
str4
==
str5
);
//false
```
![](
https://
user-gold-cdn.xitu.io/2018/8/22/16561e59a4d13f92?w=593&h=603&f=png&s=22265
)
![](
https://
my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/字符串拼接.png
)
尽量避免多个字符串拼接,因为这样会重新创建对象。如果需要改变字符串的话,可以使用 StringBuilder 或者 StringBuffer。
### 4.2 String s1 = new String("abc");这句话创建了几个字符串对象?
...
...
@@ -418,3 +421,13 @@ i4=i5+i6 true
-
<http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/>
-
<https://dzone.com/articles/jvm-permgen-%E2%80%93-where-art-thou>
-
<https://stackoverflow.com/questions/9095748/method-area-and-permgen>
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
**《Java面试突击》:**
由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本
[
公众号
](
#公众号
)
后台回复
**"Java面试突击"**
即可免费领取!
**Java工程师必备学习资源:**
一些Java工程师常用学习资源
[
公众号
](
#公众号
)
后台回复关键字
**“1”**
即可免费无套路获取。
![
我的公众号
](
https://user-gold-cdn.xitu.io/2018/11/28/167598cd2e17b8ec?w=258&h=258&f=jpeg&s=27334
)
\ No newline at end of file
docs/java/jvm/类加载器.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
-
[
回顾一下类加载过程
](
#回顾一下类加载过程
)
...
...
docs/java/jvm/类加载过程.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
-
[
类加载过程
](
#类加载过程
)
...
...
@@ -78,7 +80,7 @@ Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚
-
《实战Java虚拟机》
-
<https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-5.html>
##
#
公众号
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
...
...
docs/java/jvm/类文件结构.md
浏览文件 @
cd88d7c0
点击关注
[
公众号
](
#公众号
)
及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。
<!-- TOC -->
-
[
类文件结构
](
#类文件结构
)
...
...
@@ -15,8 +17,6 @@
<!-- /TOC -->
> 公众号JavaGuide 后台回复关键字“1”,免费获取JavaGuide配套的Java工程师必备学习资源(文末有公众号二维码)。
# 类文件结构
## 一 概述
...
...
@@ -213,7 +213,7 @@ Class 文件存储格式中对方法的描述与对字段的描述几乎采用
-
<https://blog.csdn.net/luanlouis/article/details/39960815>
-
《实战 Java 虚拟机》
##
#
公众号
## 公众号
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录