文章分类 -  jvm

摘要:目录 1.MinorGC、MajorGC和FullGC的对比 2.GC触发机制 1.MinorGC、MajorGC和FullGC的对比 1.JVM在进行GC的时候,并不是每次都是对新生代、老年代、永久代/元空间一起回收的,大部分的回收都是值新生代。2.针对HotSpot VM的实现,它里面的GC按照 阅读全文
posted @ 2020-11-18 15:32 跃小云 阅读(277) 评论(0) 推荐(0) 编辑
摘要:目录 1.新生代与老年代 2.新生代和老年代的比例设置 1.新生代与老年代 1.存储在JVM中的Java对象可以被划分为两类:一类生命周期很短,这类对象的创建和消亡很快;一类生命周期很长,极端情况下,还能够与JVM的生命周期保持一致。2.JVM堆区进一步细分为新生代和老年代。3.年轻代又可以划分为E 阅读全文
posted @ 2020-11-18 15:25 跃小云 阅读(1695) 评论(0) 推荐(0) 编辑
摘要:目录 1.对象分配内存过程概述 2.对象分配内存的特殊情况 1.对象分配内存过程概述 对象分配内存过程概述,如下图所示:图中绿色和红色的长方形都是表示的一个个对象。1.new出来的对象都是先放着伊甸园区2.伊甸园区是有大小的,当创建的对象占满了伊甸园区的时候,就会触发YGC/Minor GC。(YG 阅读全文
posted @ 2020-11-18 11:16 跃小云 阅读(151) 评论(0) 推荐(0) 编辑
摘要:目录 1.堆空间大小的设置 2.堆空间大小的查看 1.堆空间大小的设置 设置堆空间大小的参数-Xms 用来设置堆空间(年轻代+老年代)的初始内存大小。-X 是jvm的运行参数ms 是memory start-Xmx 用来设置堆空间(年轻代+老年代)的最大内存大小。 默认堆空间的大小如果不设置堆空间的 阅读全文
posted @ 2020-11-18 11:15 跃小云 阅读(1625) 评论(0) 推荐(0) 编辑
摘要:目录 1.堆(Heap)核心概述 2.堆与栈、方法区之间的关系 3.堆的内存细分 1.堆(Heap)核心概述 堆是JVM运行时数据区中的重点内容。1.堆区是进程私有的。一个进程对应一个JVM实例。一个JVM实例中有一个Runtime实例(Runtime实例对应的就是运行时数据区),里面包含了运行数数 阅读全文
posted @ 2020-11-18 11:14 跃小云 阅读(132) 评论(0) 推荐(0) 编辑
摘要:目录 1.本地方法栈 1.本地方法栈 1.Java虚拟机栈用于Java方法的调用,而本地方法栈用于本地方法的调用。2.线程私有。3.同样会存在StackOverflow和OOM。4.并不是所有的JVM都支持native方法,如果不支持native方法,则可以不实现本地方法栈。5.Hotspot JV 阅读全文
posted @ 2020-11-18 11:07 跃小云 阅读(58) 评论(0) 推荐(0) 编辑
摘要:目录 1.什么是本地方法? 2. 为什么要使用Native method? 1.什么是本地方法? 本地方法就是java代码里面写的native方法,它没有方法体。是为了调用C/C++代码而写的。在JNI程序里面使用。例子:下面的代码在java中声明了一个本地方法,但是没有实现,它的实现是在c或者c+ 阅读全文
posted @ 2020-11-18 11:01 跃小云 阅读(981) 评论(0) 推荐(0) 编辑
摘要:目录 1.虚拟机栈面试题目 1.虚拟机栈面试题目 1.栈溢出的情况?会出现StackOverflow和OutOfMemory异常。栈的大小可以通过-Xss设置。虚拟机栈可以使固定大小的或者是自动扩充的,如果是固定大小的,当栈空间不足的时候就会出现StackOverflow;如果是可以自动扩充的,当物 阅读全文
posted @ 2020-11-18 11:00 跃小云 阅读(213) 评论(0) 推荐(0) 编辑
摘要:目录 1.方法返回地址 2.一些附加信息(了解) 1.方法返回地址 1.存放调用该方法的PC寄存器的值。也就是存放下一条要执行的指令的地址。2.方法正常执行完成,栈帧在出栈之前,会把方法返回地址返回给调用者,调用者就知道了下面应该执行什么指令。3.如果方法是通过异常退出,则栈帧中不会包含方法返回地址 阅读全文
posted @ 2020-11-18 10:58 跃小云 阅读(178) 评论(0) 推荐(0) 编辑
摘要:目录 1.方法重写的本质与虚方法表的使用 1.方法重写的本质与虚方法表的使用 下面的图片主要讲的是当子类重写了父类的一个方法的时候,当调用被重写的方法的时候,会先去子类中找有没有,如果没有就去它的父类找。这样会存在一个循环查找的过程,效率很低。为了提高性能,就出现了虚方法表。1.每个类都有一个虚方法 阅读全文
posted @ 2020-11-18 10:57 跃小云 阅读(104) 评论(0) 推荐(0) 编辑
摘要:目录 1.虚方法与非虚方法 2. 5种调用指令 1.虚方法与非虚方法 1.静态方法、私有方法、final方法、实例构造器、父类方法都是非虚方法,其他方法都是虚方法。 2. 5种调用指令 a)invokestaticb)invokespecialc)invokevirtuald)invokeinter 阅读全文
posted @ 2020-11-18 10:51 跃小云 阅读(1221) 评论(0) 推荐(0) 编辑
摘要:目录 1.静态链接与动态链接 2.早期绑定与晚期绑定 1.静态链接与动态链接 符号引用转换为直接引用:就是将#2,#3等类似的符号引用转换为真正的引用的那个方法的过程。静态链接:被调用的方法在编译期就可以确定下来。这种情况下,将符号引用转换为直接引用的过程称为静态链接。动态链接:被调用的方法在编译期 阅读全文
posted @ 2020-11-18 10:48 跃小云 阅读(91) 评论(0) 推荐(0) 编辑
摘要:目录 1.动态链接(指向运行时常量池的方法引用) 1.动态链接(指向运行时常量池的方法引用) 1.动态链接又称为指向运行时常量池的方法引用。2.一个方法对应一个栈帧。每一个栈帧中都包含一个指向运行时常量池中该栈帧所属方法的引用。3.Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号 阅读全文
posted @ 2020-11-18 10:46 跃小云 阅读(477) 评论(0) 推荐(0) 编辑
摘要:目录 1.操作数栈 2.涉及操作数栈的字节码指令执行过程分析 1.操作数栈 1.每一个独立的栈帧中除了包含局部变量表以外,还包含一个后进先出的操作数栈。2.操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈和出栈操作。3.操作数栈主要用于保存计算过程的中间结果,同时作为计算 阅读全文
posted @ 2020-11-18 10:38 跃小云 阅读(289) 评论(0) 推荐(0) 编辑
摘要:目录 1.静态变量与局部变量的对比 1.静态变量与局部变量的对比 变量的分类:按照数据类型分:① 基本数据类型 ② 引用数据类型按照在类中声明的位置分:① 成员变量:在使用前,都经历过默认初始化赋值。类变量(静态的成员变量): linking的prepare阶段:给类变量默认赋值。 —> initi 阅读全文
posted @ 2020-11-18 10:36 跃小云 阅读(117) 评论(0) 推荐(0) 编辑
摘要:目录 1.JVM变量槽Slot的理解 1.JVM变量槽Slot的理解 1.Slot是局部变量表中最基本的存储单元。2.参数值的存放总是从局部变量表数组的index 0开始,到数组的-1的索引结束。3.局部变量表中存放的是局部变量,包括8种基本数据类型,引用数据类型,returnAddress类型的变 阅读全文
posted @ 2020-11-18 10:35 跃小云 阅读(433) 评论(0) 推荐(0) 编辑
摘要:目录 1.使用Jclasslib分析字节码中的方法内部结构 1.使用Jclasslib分析字节码中的方法内部结构 1.安装jclasslib bytecode viewer。进入https://github.com/ingokegel/jclasslib下载最新版的Jclasslib并且安装。2.编 阅读全文
posted @ 2020-11-18 10:32 跃小云 阅读(812) 评论(0) 推荐(0) 编辑
摘要:目录 1.局部变量表(Local variables) 1.局部变量表(Local variables) 1.局部变量表也称为局部变量数组或本地变量表。2.局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量。(局部变量表的作用)3.局部变量表示栈帧中的数据,栈帧被线程私有, 阅读全文
posted @ 2020-11-18 10:30 跃小云 阅读(243) 评论(0) 推荐(0) 编辑
摘要:目录 1.JVM栈帧的内部结构 1.JVM栈帧的内部结构 栈帧存储的数据可以分为下面的5个部分:1.局部变量表(重点)2.操作数栈(重点)3.动态链接,也称为指向运行时常量池的方法引用4.方法返回地址,也称为方法退出或者异常退出的定义5.一些附加信息每个栈帧都有自己的大小,各个栈帧的大小是不一样的, 阅读全文
posted @ 2020-11-18 10:27 跃小云 阅读(429) 评论(0) 推荐(0) 编辑
摘要:目录 1.栈中存储的是什么? 2.栈的运行原理 1.栈中存储的是什么? 1.每个线程都有自己的栈,栈中存储的是栈帧。2.在这个线程上正在执行的每个方法都各自对应一个栈帧。方法与栈帧是一对一的关系。3.栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。 2.栈的运行原理 1.JVM 阅读全文
posted @ 2020-11-18 10:26 跃小云 阅读(273) 评论(0) 推荐(0) 编辑