- 博客(8)
- 收藏
- 关注
原创 Java对象的创建过程以及在内存中的分布
Java对象的创建过程Java是一个面向对象编程语言,我们在编写代码时无时无刻不在创建对象,那么我们在源代码中new一个对象的操作,映射到JVM中是如何执行的呢。接下来我们将对此展开讨论。1、Java虚拟机当遇到new指令时,首先会去JVM的方法区看这个对象所属的类是否已经被加载,如果这个类还没有被加载,则虚拟机会先去加载此类到方法区,以及将该类的符号引用加载到方法区的常量池中。2、为新创建的对象...
2018-04-14 15:40:30 498
原创 深入理解Java虚拟机读书笔记之垃圾收集器与内存分配策略
可达性分析算法Java虚拟机通过可达性分析算法来判断哪些对象已死可以回收,哪些对象还存活不可回收。可达性分析算法的实现原理:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连接时,那么这个对象就死了,可以被回收。换句话说,当对象到GC Roots不可达时,该对象就可以被垃圾收集器回收。可作为GC ...
2018-03-25 14:11:03 189
原创 深入理解Java虚拟机读书笔记之Java内存区域与内存溢出异常
JVM内存模型从上图可以看出JVM内存分配包括线程私有的JAVA栈,本地方法栈,程序计数器;还包括所有线程共享的JAVA堆,方法区。JVM中对象的创建过程虚拟机在接收到new指令后,首先(1)将去检查这个指令的参数是否能在常量池中定位到一个的符号引用,并且检查这个符号引用代表的类是否已被加载,解析和初始化。如果没有,那必须先执行类的加载过程。(2)在类加载检查通过后,接下来虚拟机将为新生对象分配内...
2018-03-25 14:09:33 262
原创 线程池ThreadPoolExecutor介绍
一、创建线程池的必要性 大多数并发应用程序都是围绕着任务执行来构造的,任务通常是抽象且离散的工作单元。在处理这些任务的时候,有几种方案可以采取。串行执行:也就是说所有任务都交由同一个线程依次处理,弊端就是,如果执行某个任务发生长时间阻塞,则导致任务挤压过多,处理性能不足,如果是处理实时性要求比较高的任务,则可能导致任务长时间没有响应。并发执行:并发执行任务也有两种方案。一种是每个任务都...
2018-03-04 21:40:54 176
原创 线程通信
本文介绍线程通信的两种方式,一种是只有以synchronized方式实现线程同步时,可以采取的线程通信方式;另外一种是以ReentrantLock实现线程同步时,可以采取的线程通信方式。以下我们将分别介绍这两种实现线程通信的方式。
2017-05-06 21:54:18 309
原创 HashMap源码解析及非线程安全的原因
HashMap在我们平时的项目开发,以及面试中都会经常遇到,是一个出场率极高的数据结构。大多数人对HashMap的操作都得心应手,但是往往对其实现原理和源码实现一头雾水,本文将带您一起分析HashMap的源码,以及为什么HashMap在多线程应用中不是线程安全的。请尊重笔者劳动成果,转载请标明出处。一、HashMap的实现原理HashMap的实现结构就是一个数组+链表的组合,它
2016-11-20 16:14:54 334
原创 浅谈Java的final关键字
final关键字的含义通常具有“这是无法改变的”的含义,本文将对final关键字进行深度的解析,使大家能够正确使用该关键字。本文主要分一下几个部分:1、final 数据2、final 参数3、final 方法4、final 类
2016-07-23 19:52:08 243
原创 浅谈Java 的static关键字
static关键字在平时项目开发和阅读代码时经常会遇到,本文对static关键字的用法做一个全面的介绍,主要分为以下三部分:1、static变量2、static方法3、static代码块笔者能力有限,若有不正之处欢迎批评指正。请尊重笔者劳动成果,转载请标明出处。1、static变量static变量,即静态变量,有的文章中也叫作类变量,与非静态变量(实例变量)的区别在于,
2016-07-21 21:31:49 341
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人