
JVM
文章平均质量分 93
JVM相关知识分析与总结。
神烦狗闯入了你的博客
人是万灵之长,智慧的差异很小,经历,本身也是一种文化。
展开
-
垃圾收集器
垃圾收集器垃圾收集器是垃圾收集相关算法的实践者,《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商、不同版本的虚拟机所包含 的垃圾收集器都可能会有很大差别,不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特 点和要求组合出各个内存分代所使用的收集器。上图所示的是七种作用于不同分代的垃圾回收器,它们之间有的两两配合使用。并没有一款垃圾收集器可以完美解决一切问题,而是每一种情况都有一个合适的垃圾收集器,而HotSpot就实现了很多种类的垃圾收集器。后面会涉及到并行、原创 2022-05-16 10:51:42 · 351 阅读 · 5 评论 -
Java中的引用: 强引用,软引用,弱引用,虚引用,终结器引用
Java中的引用在JVM垃圾标记的相关算法中的引用技术法和可达性分析算法都离不开"引用"这个概念。在JDK1.2之前,引用的概念对于一个对象来说只有被引用和不被引用两种,一定程度上会显得有些狭隘;这样对于一些"鸡肋"对象作用就显得有些无力。如果我们希望描述这样一类对象:当内存空间还足够时,能保留在内存之中,如果内存空 间在进行垃圾收集后仍然非常紧张,那就可以抛弃这些对象—— 很多系统的缓存功能都符合这样的应用场景 。JDK1.2版本之后Java对引用的概念进行了扩充:将引用分为了 强引用、软引用、弱引原创 2022-05-13 10:38:30 · 597 阅读 · 1 评论 -
垃圾收集算法与垃圾收集理论
介绍了三种垃圾收集算法以及分代收集、增量收集、分区收集的理论。原创 2022-05-11 10:34:06 · 438 阅读 · 6 评论 -
对象死了吗?
介绍了对象的死亡和复活的原因,以及垃圾标记阶段的相关算法,finalization机制。原创 2022-05-08 14:07:50 · 418 阅读 · 16 评论 -
字符串常量池详解 (StringTable)
详细介绍了字符串常量池以及其产生的相关问题,并对String类相关操作和String类中的intern()方法进行了详细解析。原创 2022-05-05 17:31:27 · 1713 阅读 · 11 评论 -
JVM 执行引擎部分 (编译器、解释器)
介绍了JVM执行引擎中解释器与编译器的区别和Java源程序的执行流程,并且介绍了JVM即时编译器的几种优化手段。原创 2022-05-03 15:32:41 · 1185 阅读 · 3 评论 -
JVM 方法区(Method Area)
JVM 方法区文章目录JVM 方法区方法区的理解栈、堆、方法区的交互关系HotSpot中方法区的演进永久代为什么要使用元空间替换字符串常量池(StringTable)为什么要调整方法区的内部结构类型信息域(Field)信息方法(Method)信息代码举例non-final 类型的类变量全局常量 static final运行时常量池解释常量池和运行时常量池方法区的垃圾回收类卸载常见面试题方法区的理解运行时数据区:方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已原创 2022-05-01 11:48:09 · 3385 阅读 · 9 评论 -
在Java中堆是分配对象的唯一选择吗?
在Java中堆是分配对象的唯一选择吗?“对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java 世界里“几乎”所有的对象实例都在这里分配内存。在《Java虚拟机规范》中对Java堆的描述是:“所有 的对象实例以及数组都应当在堆上分配”,而这里笔者写的“几乎”是指从实现角度来看,随着Java语 言的发展,现在已经能看到些许迹象表明日后可能出现值类型的支持,即使只原创 2022-04-29 11:18:19 · 333 阅读 · 4 评论 -
Java 堆空间(Heap Space)
Java 堆空间(Heap Space)概述在Java程序中,堆是JVM内存空间中最大的一块,同时我们知道,每个线程都拥有一个虚拟机栈,但是堆不同,Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。在《Java虚拟机规范》中对Java堆的描述是:“所有 的对象实例以及数组都应当在堆上分配“,但是实际情况是几乎所有的对象都是分配在堆空间的,也有少部分情况比较特殊。这是因为由于即时编译技术的进步,尤其是逃逸分析技术的日渐强大,栈上分配、标量替换优化手段已经导致一些微妙的变化悄然发生,所以说Ja原创 2022-04-28 16:17:36 · 11299 阅读 · 7 评论 -
JVM 程序计数器 (PC 寄存器)
程序计数器 (PC 寄存器)介绍程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器 的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处 理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说原创 2022-04-26 10:11:38 · 499 阅读 · 8 评论 -
Java虚拟机栈
Java虚拟机栈文章目录Java虚拟机栈介绍栈的特点栈帧的内部结构局部变量表Slot (变量槽)Slot的重复利用静态变量与局部变量的对比操作数栈栈顶缓存技术动态链接 (Dynamic Linking)方法的返回地址一些附加的信息介绍与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都 会同步创建一个栈帧(Stack Frame)用于存储局原创 2022-04-25 21:27:58 · 188 阅读 · 7 评论 -
JVM类加载机制
JVM类加载机制文章目录JVM类加载机制概述类加载器与类加载过程类加载过程加载阶段 Loading链接阶段 Linking验证 Verify1. 文件格式验证2. 元数据验证3. 字节码验证4. 符号引用验证准备 Prepare解析 Resolve初始化 Initialization类加载器的分类BootstrapClassLoader 引导类加载器ExtensionClassLoader 扩展类加载器APPClassLoader 系统类加载器用户自定义类加载器双亲委派机制原理代码示例举例1举例2举例3沙原创 2022-04-22 15:48:12 · 581 阅读 · 4 评论 -
JVM简记
JVM简记OOMOOM定义—out of memory,内存溢出,一个程序中,已经不需要使用某个对象,但是因为仍然有引用指向它垃圾回收器就无法回收它,当该对象占用的内存无法被回收时,就容易造成内存泄露。多个内存泄漏最终会导致内存溢出,即OOM。JVM体系结构1、类的加载过程1.1加载(Loading)1.通过编译生成的class文件 获取类的二进制字节流2.将这个字节流所代表的静态存储结构 转换为方法区的运行时数据结构3.在内存中生成一个代表这个类的Class对象(Class模板) 为方原创 2022-04-20 14:42:55 · 124 阅读 · 0 评论