-
1. 深入理解JVM—垃圾回收器(Grabage Collector)基础篇
1、如何判断对象可以被回收1.1引用计数法 给对象添加一个引用计数器,每当有一个地方引用该对象的时候此计数器+1;当一个引用失效后计数器-1,当计数器的值减为0了的对象就不在可能被使用了。优点:实现简单,判定效率高。缺点:当对象之间的相互循环引用时,会导致GC失效,从而造成内存泄漏。1.2可达性分析算法以一系列“GCRoots”为起点,从这些对象开始向下搜索,当一个对象到GCRo...
http://www.easyblog.top:80/article/details/166 - 2020-02-17 - JVM -
2. 深入理解JVM—垃圾回收器(Grabage Collector)进阶篇
在上一篇博客深入理解JVM—垃圾回收器(GrabageCollector)基础篇我们了解了Java判定一个对象是否为垃圾的两种算法,以及3种垃圾回收算法。如果说收集算法室是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。接下来我们就一起来了解一下常见的垃圾收集器。1、垃圾收集器在G1垃圾出现之前,JVM是对堆内存进行分代管理的,分为新生代和老年代,按照这样的划分,不同分...
http://www.easyblog.top:80/article/details/167 - 2020-02-18 - JVM -
3. 深入理解JVM— Java对象的创建过程、对象内存布局、对象的引用方式详解
一、对象的创建过程(1)判断类是否加载。检查常量池中是否可以定位到指定类的符号引用,并且检查这个符号引用所代表的类时候已经被加载、链接和初始化过。如果可以定位到符号引用,并且已经被加载过:进入第2步如果没法定位到符号引用或没有被加载过:执行相应的类加载过程。(2)分配内存。(指针碰撞:Serial、ParNew/空闲列表:CMS)。(3)初始化零值。为对象中的实例字段赋零值(不是给静态属性赋...
http://www.easyblog.top:80/article/details/164 - 2020-02-15 - JVM -
4. 深入理解JVM内存结构—堆(Heap)
1、堆(Heap)概述Java堆(JavaHeap)是JVM所管理的最大的一块内存空间。Java堆是被所有线程共享的一块内存区域,在JVM启动的时候创建,堆的唯一目的就是存放对象实例的,Java中几乎所有的对象实例和数组都在堆上分配内存,但是随着JIT编译器的发展与逃逸分析技术的成熟,桟上分配、标量替换等优化技术使得对象可以在桟帧中直接分配。Java堆的容量可以是固定大小的,也可以随着程序执...
http://www.easyblog.top:80/article/details/165 - 2020-02-16 - JVM -
5. 深入理解JVM—虚拟机类加载机制
1、JVM内存结构概述JVM是Java技术的核心,因为任何Java程序最终都需要运行在JVM上。构成JVM的主要三分部分有:类加载子系统、运行时数据区和执行引擎。他们各自发挥着各自的本领,构建起强大的JVM。JVM的具体组成如下图所示:图1JVM整体结构示意(详)图看完这个图,我想大家对于JVM应该会有一个基本的认识,最起码知道了JVM最重要的三大组成部分的位置以及他们内部的大致结构,并且这...
http://www.easyblog.top:80/article/details/159 - 2020-02-10 - JVM -
6. 深入理解JVM—程序计数器
1、JVM内存模型概述Java虚拟机(JVM)在Java程序运行的过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有的随着JVM的启动而创建,有的随着用户线程的启动和结束而建立和销毁。一个基本的JVM运行时内存模型如下所示:图1JVM运行时数据区上图是展示JDK8及以后的虚拟机规范对JVM运行时内存的划分。在JVM的运行时数据区中Java虚拟机桟、本地方法桟和程序计数器是每个线...
http://www.easyblog.top:80/article/details/160 - 2020-02-11 - JVM -
7. 深入理解JVM—Java虚拟机桟
1、虚拟机桟概述由于跨平台性的设计,JVM的指令架构是基于桟的结构来设计的,这么做的优点:一是具有了跨平台性,其次使得指令集更小,编译器更容易实现,但缺点也很明显:实现同样的功能需要更多的指令和性能下降。栈是运行时的单位,堆是存储的单位栈解决的程序运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储问题,即就是数据如何放、放哪儿在java中一个线程就会相应有一个线程栈与之对应,因...
http://www.easyblog.top:80/article/details/161 - 2020-02-12 - JVM -
8. 深入理解JVM—字符串常量池StringTable
首先我们来看一道关于字符串的面试题,请大家先不要直接上机运行,自己先在脑子里运行一下这段程序,如果你可以很清晰的得到所有输出,那么恭喜你!这篇文章你就不要在浪费时间再看了;如果你在某一步还有不清楚的,那么这篇文章将会一网打尽所有你对String常量池的疑虑。运行结果:1、StringTable概述 StringTable又可以称为StringPool,字符串常量池,...
http://www.easyblog.top:80/article/details/163 - 2020-02-14 - JVM -
9. 深入理解JVM—方法区
1、方法区概述 方法区(MethodArea)和Java堆内存一样是线程共享的一块内存区域,它被主要用来存储已经被虚拟机加载的类信息(字段、方法、构造器的字节码)、常量、静态变量、JIT编译后的代码等等(说的再简单直白点就是用来存储每个已经记载的类的结构信息)。 然而方法区只是JVM规范中定义的一个概念,在具体的虚拟机产品中对于方法区有不同的实现,以Java目前商用最...
http://www.easyblog.top:80/article/details/162 - 2020-02-13 - JVM -
10. 深入理解JVM—走进Java虚拟机
1、JDK,JRE,JVM之间的关系仅从传统意义上来看,Sun定义的Java技术体系包括:Java程序设计语言、各种平台上的JVM、Class文件格式、JavaAPI类库、来自商业机构和开源社区的第三方Java类库。JDK全程为JavaSEDevelopmentKit(Java开发工具),是用于支持Java程序开发的最小环境,提供了编译和运行Java程序所需的各种资源和工具,包括:Java程...
http://www.easyblog.top:80/article/details/158 - 2020-02-10 - JVM