
jvm
文章平均质量分 81
jvm学习
Ernest_Feng
技术学习道路上摸爬滚打
展开
-
深度解析JVM类加载器与双亲委派模型
Java虚拟机(JVM)是Java程序运行的核心,其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念,并解释它们在实际开发中的应用。类加载器是JVM的一部分,负责加载Java类的字节码文件。Java应用程序中的每个类都必须由类加载器加载,类加载器将类的字节码文件从磁盘或网络加载到内存中,并在JVM中创建一个对应的Class对象。双亲委派模型是一种类加载器之间的层次结构,它通过父类加载器委派给子类加载器加载类。原创 2024-01-13 20:57:54 · 2255 阅读 · 0 评论 -
深入了解Java多线程编程:JVM内存模型与同步机制
多线程编程是当今软件开发中不可避免的话题之一。在Java中,了解JVM内存模型及相关概念对编写正确、高效的多线程代码至关重要。本文将深入探讨JVM内存模型、重排序、内存屏障、happen-before关系、主内存、工作内存以及同步机制,并通过具体案例进行原理分析。原创 2024-01-13 20:11:00 · 601 阅读 · 2 评论 -
jvm | 垃圾回收机制
垃圾回收算法的演进包括标记和清除两个主要阶段。初始阶段采用标记清除算法,通过标记存活对象,再清除未标记的垃圾对象。为了解决标记清除算法的空间碎片问题,引入了标记整理算法,它在标记的基础上将存活对象整理到内存的一端,减少碎片。复制清除算法则将内存划分为两个区域,通过复制存活对象至一块区域,再清除未复制的区域,解决了碎片问题。原创 2024-01-05 18:05:46 · 1649 阅读 · 1 评论 -
jvm虚拟机栈:Java程序的执行框架
虚拟机栈是每个线程私有的内存区域,用于存储方法的执行信息。每个方法在执行的同时都会创建一个栈帧(Stack Frame),栈帧包含了方法的局部变量表、操作数栈、动态链接、方法返回地址等信息。原创 2024-01-05 15:18:35 · 1252 阅读 · 0 评论 -
Jvm内存为什么要分成新生代、老年代、持久代 | 新生代中为什么要分为Eden和Survivor
JVM内存的划分及参数配置在垃圾回收效率和内存利用率之间找到了平衡点。通过新生代的划分和两个 Survivor 区的设计,JVM能够更有效地管理内存,提高垃圾回收的效率。调整参数可以根据应用的特性来灵活配置,以优化性能。这种划分和配置的方式使得JVM能够更好地适应不同类型的对象行为,从而提供更好的应用性能。原创 2024-01-03 21:42:55 · 926 阅读 · 0 评论 -
jvm面试题: 什么情况下会发生栈内存溢出
栈是线程私有的,其生命周期与线程相同。每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。如果线程请求的栈深度大于虚拟机所允许的最大深度,就会抛出。栈内存溢出是由于栈空间不足以满足线程的请求,主要涉及到局部变量表、操作数栈、动态链接、方法出口等信息的存储。如果方法内部声明了大量的局部变量,也可能导致栈内存溢出。通过采取这些解决方案,我们可以有效地预防和处理栈内存溢出的问题,提高程序的稳定性和性能。如果代码中存在递归调用,可以考虑优化递归算法,减少递归深度。原创 2024-01-03 17:50:44 · 698 阅读 · 0 评论 -
jvm虚拟机初识
Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器指令执行。Java 程序的最终执行是通过执行引擎执行字节码指令,从而按照程序的逻辑改变程序状态,包括对栈、堆和方法区的操作。整个过程中,涉及到了类加载、字节码验证、执行引擎执行、本地方法调用等多个组成部分。本地方法库是由本地语言(如 C 或 C++)编写的库,其中包含与 Java 代码进行交互的本地方法的实现。本地方法接口负责将 Java 数据类型转换为本地方法支持的数据类型,并调用本地方法库中的函数。原创 2024-01-03 15:57:48 · 724 阅读 · 0 评论