千里之行(JVM)
文章平均质量分 81
王小汪O_o
一起学习吧
展开
-
JVM基础知识(七)- 静态分派和动态分派
Java 是一门面向对象的程序语言,因为Java 具备面向对象的3 个基本特征:继承、封装和多态。这三个特征并不是各自独立的,从一定角度上看,封装和继承几乎都是为多态而准备的,多态的体现主要表现在方法的调用上,而方法在调用时会根据你送入的参数有不同的表现形式,这个就是分派:1.编译期根据对象的静态类型进行静态分派。2.运行期根据对象的实际类型进行动态分派。那么我们都知道,方法的调用主要体现在对方法的重载和重写上,那么其实这里,静态分派对应的就是方法的重载,动态分派对应的是方法的调用。静.原创 2020-08-05 16:49:38 · 412 阅读 · 0 评论 -
JVM基础知识(六)-类加载机制和类加载器
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构,那么负责将类加载到JVM内存空间的就是类加载器。类的生命周期 类的生命周期分为加载,验证,准备,解析,初始化,使用和销毁七个阶段,其中验证、准备、解析3 个部分统称为连接(Linking)。 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,...原创 2020-08-04 16:37:09 · 201 阅读 · 0 评论 -
JVM基础知识(五)- 三色标记
一、概念 JVM 中的垃圾回收是基于 标记-复制、标记-清除和标记-整理三种模式的,那么其中最重要的其实是如何标记,像Serial、Parallel这类的回收器,无论是单线程标记和多线程标记,其本质采用的是暂停用户线程进行全面标记的算法,这种算法的好处就是标记的很干净,而且实现简单,缺点就是标记时间相对很长,导致STW的时间很长。 那么后来就有了并发标记,适用于CMS和G1,并发标记的意思就是可以在不暂停用户线程的情况下对其进行标记,那么实现这种并发标记的算法就是三色标记法,...原创 2020-07-30 16:36:46 · 3576 阅读 · 9 评论 -
JVM基础知识(四)- 分代回收机制和垃圾回收算法
这次我们来讲讲垃圾回收,前边或多或少的都提及过垃圾回收的知识点,我们经常说的GC(Garbage Collection)就是垃圾回收,我们都知道JAVA都是由C++演化而来,那么JAVA和C++很重要的一点不同就是自动分配内存和自动回收内存,这两块已经不需要JAVA开发者来操心。但是GC对性能是有影响的,有时候会暂停所有的线程,触发STW(Stop the world),所以GC是把双刃剑。那么一般情况下,垃圾回收的重点是在堆区,栈区是随线程的消亡而消亡的,不需要垃圾回收器去管理,方法区虽说可以进行垃圾回收原创 2020-07-29 14:45:43 · 403 阅读 · 1 评论 -
JVM基础知识(三)- JVM对象创建及引用过程
OK,前边有说过JVM的模块都有哪些,方法区、虚拟机栈、本地方法栈、程序计数器、还有我们下面要说的堆,那么到此时,这些模块还都是相互独立的,我们需要把这些模块都串联起来,这样才能更系统的了解JVM,这就是今天要说的对象的创建过程。 首先我们先看个图,然后根据图来阐述这个对象的创建过程: 类加载 首先就是类加载,类加载就是把class 加载到JVM 的运行时数据区的过程-->静态常量池转化成运行时常量池(类加载这个以后专门讲类加载器的时候再讲)。检...原创 2020-07-27 15:53:02 · 403 阅读 · 0 评论 -
JVM基础知识(二)
JAVA 方法的运行与虚拟机栈 一个java程序的执行意味着操作系统首先会为这个java程序分配一个线程,jvm同时会在内存空间中分配一个虚拟机栈来存储这个线程运行时所需的相关的数据,虚拟机栈的数据结构就是一个栈,因为它的先进后出的数据结构能够很好的阐述java方法运行的顺序。一个java程序的启动,其中肯定是包含了一个或者多个java方法,那么jvm就会在虚拟机栈中为每一个方法都分配一个栈帧,所谓栈帧就是存储了当前方法所需的数据内容的,也就是局部变量,类中的类变量是存储在方法区的。程序在执...原创 2020-07-23 16:14:34 · 179 阅读 · 0 评论 -
JVM基础知识(一)
什么是JVM JVM是JAVA语言的一个重要组成部分,它完成了JAVA体系中最底层的与内存,操作系统交互的工作,也是学习JAVA首先学习,也是最应该学习的部分,正是因为JVM的存在,才使得JAVA被称为平台无关性的跨平台语言,JVM全称Java Virtual Machine(Java虚拟机),所有的java程序都是基于jvm运行的,它可以将字节码文件编译成机器码执行。它将java程序和操作系统进行了隔离,jvm其实是一种规范,就像是java体系中的接口,有不同的方案可以基于这个接口...原创 2020-07-21 15:56:28 · 227 阅读 · 0 评论