
JVM
文章平均质量分 78
简单学习java虚拟机
Jackeys007
开朗、活泼,一个逗比的程序员
展开
-
逃逸分析
逃逸分析一、逃逸分析概述二、如何快速地判断是否发生了逃逸分析?三、逃逸分析之代码优化栈上分配同步省略(消除)标量替换逃逸分析并不成熟一、逃逸分析概述如何将堆上的对象分配到栈,需要使用逃逸分析手段这是一种可以有效减少java程序中同步负载和内存堆分配压力的跨函数全局流分析算法通过逃逸分析,Java HotSpot编译器能够分析出一个新的对象的引用的使用范围,从而决定是否要将这个对象分配到堆上逃逸分析的基本行为就是分析对象的动态作用域当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发原创 2021-09-20 10:18:05 · 222 阅读 · 0 评论 -
内存分配
内存分配一、内存分配策略动态对象年龄判断空间分配担保二、为对象分配内存:TLAB为什么会有TLAB(Thread Local Allocation Buffer)?什么是TLAB?TLAB再说明三、堆空间参数设置一、内存分配策略针对不同的年龄段的对象分配原则优先分配到Eden。大对象直接分配到老年代(尽量避免出现过多的大对象)长期存活的对象分配到老年代动态对象年龄判断空间分配担保动态对象年龄判断如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半干,年龄大原创 2021-09-20 09:49:26 · 141 阅读 · 0 评论 -
Minor GC、Major GC和Full GC
Minor GC、Major GC和Full GC一、垃圾收集分类一、垃圾收集分类JVM在进行GC时,并非每次都3个内存区域(新生代,老年代,方法区)一起回收,大部分的回收是指新生代。针对HotSpot VM的实现,里面的GC按照内存回收区域又分为两大种类型:...原创 2021-09-18 13:35:05 · 197 阅读 · 0 评论 -
堆空间分代
堆空间分代一、年轻代与老年代一、年轻代与老年代存储在JVM中的Java对象可以被划分为两类:生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速。生命周期非常长的对象,在某些极端的情况下,还能够与JVM的生命周期保持一致。Java堆区进一步细分的话,可以分为年轻代与老年代。其中年轻代又可以划分为Eden空间、Survivor0空间和Survivor1空间(有时候也叫From区和To区)。配置新生代与老年代在堆结构的占比:默认-x...原创 2021-09-17 17:36:42 · 229 阅读 · 0 评论 -
堆内存空间
堆内存空间一、堆二、内存细分三、堆、栈以及方法区之间的关系四、设置堆内存大小与OOM堆内存大小OutOfMemoryError举例一、堆一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候被创建,其空间大小也就确定了。是JVM管理的最大的一块内存空间。堆内存的大小是可以调整的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上,它应该视为连续的。所有的线程共享Java堆,在这里还可分为线程是私有的缓存(TLAB)。《Java虚原创 2021-09-15 17:35:13 · 241 阅读 · 0 评论 -
本地方法接口、本地方法栈
本地方法接口、本地方法栈一、什么是本地方法?二、本地方法接口三、为什么要使用native method?四、本地方法栈一、什么是本地方法?一个Native Method就是一个java调用的非Java代码的接口。一个Native Method就是这样一个Java方法:该方法由非Java语言实现,比如C。在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实实现体时由非Java语言在外面实现的。二、本地方法接口本地方法接口的作用是融合不同的编程语原创 2021-09-14 21:58:29 · 130 阅读 · 0 评论 -
虚拟机栈之方法返回地址、附加信息
方法返回地址、附加信息一、方法返回地址二、一些附加信息三、虚拟机栈的五道面试题举例栈溢出的情况?调整栈的大小,就能保证不出现溢出吗?分配的栈内存越大越好吗?垃圾回收是否涉及到虚拟机栈?方法中定义的局部变量是否是线程安全的?一、方法返回地址存放调用该方法的PC寄存器的值。一个方法的结束,有两种方式正常执行完成。出现未处理的异常,非正常退出。无论哪种方式退出,在方法退出后都返回到该方法被引用的位置。方法正常退出时,调用者的PC寄存器的值作为返回地址,即调用该方法指令的下一条指令的地址。而通过异常原创 2021-09-14 19:48:16 · 433 阅读 · 0 评论 -
虚拟机栈之操作数栈
操作数栈一、概述二、操作数栈的作用三、操作数栈中的字节码指令四、栈顶缓存技术一、概述每一个栈帧中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也称为表达式栈。操作数栈在方法执行的时候,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)/出栈(pop)。某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用后再把结构压入栈。比如执行复制、交换、求和等操作。二、操作数栈的作用操作数栈主要是用于保存计算过程中间结果,同时作为计算过程中变量临时的存储空间。操作数原创 2021-09-14 15:22:13 · 570 阅读 · 0 评论 -
虚拟机栈之动态链接
动态链接一、概述二、为什么需要常量池三、方法的调用静态链接动态链接虚方法与非虚方法四、虚拟机中方法调用的指令普通指令动态指令五、Java语言中方法重写的本质六、虚方法表虚方法表什么时候被创建?一、概述动态链接也就是指向常量池的方法引用。每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属的方法的引用。包含这个引用是为了支持当前方法的代码能够实现动态链接。在Java源文件被编译到字节码文件中时,所有的变量和方法的引用都作为符号引用保存在class文件的常量池中。比如,描述一个方法的调用了另外的其他方原创 2021-09-14 15:57:38 · 1260 阅读 · 0 评论 -
虚拟机栈之局部变量表
局部变量表一、局部变量表的内部结构和原理二、关于Slot插槽的理解三、Slot的重复利用四、静态变量与局部变量的对比五、局部变量表的重要性一、局部变量表的内部结构和原理定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用已经returnAddress类型。由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题。局部变量表所需的容量大小是在编译期确定下来的。在方法运行期间不会改变局部变量表的大小。方法嵌套调用的次数由栈的原创 2021-09-13 19:24:34 · 143 阅读 · 0 评论 -
JVM的虚拟机栈
虚拟机栈一、概述二、栈的优点三、开发中遇到的异常有哪些?四、设置栈的内存大小五、栈的存储单位六、栈的运行原理七、栈帧的内部结构一、概述栈是运行时的单位,堆是存储的单位。也叫Java栈,每个线程在被创建的时都会创建一个虚拟机栈,其内部保存一个个的栈帧,对应着一次次的Java方法调用。是线程私有的,生命周期和栈一样。主管Java程序的运行,它保存的方法的局部变量表、部分结果并参与方法的调用和返回。二、栈的优点一种快速有效的分配存储的方式,访问速度仅次于程序计数器。每个方法的执行,伴随着进栈,执行结束原创 2021-09-13 08:39:50 · 130 阅读 · 0 评论 -
你知道JVM运行时数据区有哪些吗?
运行时数据区一、运行时数据区结构二、JVM的后台系统线程虚拟机线程周期任务线程GC线程编译线程信号调度线程三、程序计数器概述作用特点执行过程面试的两个常见的问题使用PC寄存器存储字节码指令有什么用?为什么PC寄存器被设定为线程私有?一、运行时数据区结构每个线程:独立,包括程序计数器、虚拟机栈、本地方法栈。线程间共享:堆、堆外内存(永久代或元空间、代码缓存)。一个JVM->一个RunTime对象->运行时数据区二、JVM的后台系统线程虚拟机线程执行类型有“stop-the-worl原创 2021-09-12 21:55:55 · 105 阅读 · 0 评论 -
你知道类加载子系统吗?
一、类加载子系统作用类加载器子系统只负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责Class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载类的信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能包括字符串常量和数字常量(这部分信息是class文件中常量池部分的内存映射)。二、类加载器(ClassLoader)角色三、类加载过程类加载过程:①加载:原创 2021-09-12 21:13:39 · 104 阅读 · 0 评论 -
你知道Java虚拟机是什么吗?
一、虚拟机概述:台虚拟的计算机,是一款软件,用来执行一系列虚拟计算机指令。分类:系统虚拟机:完全是对物理计算机的仿真,提供一个可运行完整操作系统的软件平台。程序虚拟机:专门为执行单个计算机程序而设计、典型代表就是Java虚拟机。二、Java虚拟机概述:一台执行Java字节码的虚拟计算机,拥有独立的运行机制,其运行的字节码未必是由Java语言编译而成。JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回收器以及可靠的即时编译器。Java技术的核心就是Java虚拟机,因原创 2021-09-12 19:28:38 · 271 阅读 · 0 评论