JVM精讲
文章平均质量分 91
探索 Java 虚拟机(JVM)及其周边技术的精彩世界。无论您是 Java 开发者、系统架构师,还是对 JVM 技术感兴趣的初学者,本专栏将为您带来有趣、实用的内容。一起来探索 JVM 的无限可能,共同成长,共同进步!
时间瑾
梦想永在凌云意意气风发,代码成就万世基积沙镇海
展开
-
JVM运行时内存:垃圾回收器(Serial ParNew Parallel )详解
如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本。原创 2024-05-20 08:29:34 · 1308 阅读 · 0 评论 -
JVM运行时内存:如何判断垃圾
垃圾是指。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。知道了, 什么是垃圾的定义, 那么系统是如何判断一个对象是不是垃圾的. 这就要提到垃圾回收算法.原创 2024-05-19 07:30:53 · 980 阅读 · 0 评论 -
JVM运行时内存:垃圾回收
垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。原创 2024-05-18 08:20:30 · 1072 阅读 · 2 评论 -
JVM运行时内存:对象的创建步骤及内存布局
在Java中,对象的创建涉及到多个步骤,包括分配内存、初始化对象头部信息、执行构造函数等。原创 2024-05-17 14:42:52 · 762 阅读 · 1 评论 -
JVM运行时内存:堆区指令参数大全
○ 如果HandlePromotionFailure=true,那么会继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小,如果大于,则尝试进行一次Minor GC,但这次Minor GC依然是有风险的;○ 可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5。○ 默认-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3。-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5。原创 2024-05-17 09:01:42 · 696 阅读 · 1 评论 -
JVM运行时内存:堆
Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,大家可以通过选项”-Xmx”和”-Xms”来进行设置。如果物理内存大于等于1G,一旦堆区中的内存大小超过“-Xmx”所指定的最大内存时,将会抛出OutOfMemoryError:heap异常。● 堆,是GC ( Garbage Collection,垃圾收集器)执行垃圾回收的重点区域。在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。● 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。原创 2024-05-17 08:54:02 · 850 阅读 · 0 评论 -
JVM运行时内存:本地方法接口与本地方法栈
简单地讲,一个Native Method就是一个Java调用非 Java 代码的接口。一个Native Method是这样一个 Java 方法:该方法的实现由非Java语言实现,比如C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。原创 2024-05-16 13:00:00 · 593 阅读 · 6 评论 -
JVM运行时内存:虚拟机栈
如何理解栈管运行,堆管存储?角度一:GC;OOM角度二:栈、堆执行效率角度三:内存大小;数据结构角度四:栈管运行;堆管存储。如何设置栈内存的大小?-Xss1024k一般默认为 512k-1024k,取决于操作系统。栈的大小直接决定了函数调用的最大可达深度。原创 2024-05-16 08:37:49 · 892 阅读 · 5 评论 -
JVM运行时内存:程序计数器
在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。JVM 中的程序计数寄存器(Program Counter Register)中, Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。原创 2024-05-15 09:28:27 · 500 阅读 · 0 评论 -
JVM运行时内存整体结构一览
Java 虚拟机 (JVM) 运行时内存由程序计时器, 堆, 方法区, 本地方法栈, 虚拟机栈,构成原创 2024-05-15 09:06:28 · 509 阅读 · 2 评论 -
JVM 打破双亲委派机制
上篇文章讲解了双亲委派机制. 本篇文章讲解打破双亲委派机制.原创 2024-05-15 08:51:50 · 985 阅读 · 5 评论 -
JVM 双亲委派机制详解
一个类加载器在接到加载类的请求时,它首先不会自己尝试去加载这个类,而是把这个请求任务委托给父类加载器去完成,依次递归,如果父类加载器可以完成类加载任务,就成功返回。只有父类加载器无法完成此加载任务时,才自己去加载。原创 2024-05-14 17:53:09 · 814 阅读 · 2 评论 -
JVM 自定义类加载器
在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿里内某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响到中间件运行时使用的jar包。再比如:Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序。(类的仲裁–>类冲突)实现类似进程内隔离,类加载器实际上用作不同的命名空间,以提供类似容器、模块化的效果。例如,两个模块依赖于某个类库的不同版本,如果分别被不同的容器加载,就可以互不干扰。原创 2024-05-14 08:53:32 · 957 阅读 · 1 评论 -
JVM ClassLoader 源码剖析
了解完URLClassLoader后接着看看剩余的两个类加载器,即拓展类加载器ExtClassLoader和系统类加载器AppClassLoader,这两个类都继承自URLClassLoader,是sun.misc.Launcher的静态内部类。扩展了 ClassLoader,新增了几个与使用相关的代码源(对代码源的位置及其证书的验证)和权限定义类验证(主要指对class源码的访问权限)的方法,一般我们不会直接跟这个类打交道,更多是与它的子类URLClassLoader有所关联。的实例,这个字段所表示的。原创 2024-05-13 08:49:18 · 924 阅读 · 0 评论 -
JVM 类的加载器分类与测试
JVM 支持两种类型的类加载器,分别为引导类加载器(`Bootstrap ClassLoader`)和自定义类加载器(User-Defined ClassLoader)。从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。原创 2024-05-12 06:30:00 · 916 阅读 · 3 评论 -
JVM 类的加载器
类加载器ClassLoader 是 Java 的核心组件,所有的 Class 都是由 ClassLoader 进行加载的,ClassLoader 负责通过各种方式将 Class 信息的二进制数据流读入JVM内部,转换为一个与目标类对应的 `java.lang.Class`对象实例。然后交给 Java虚拟机 进行链接、初始化等操作。原创 2024-05-11 09:43:17 · 1049 阅读 · 4 评论 -
JVM 类的使用与卸载
这篇文章来介绍类在完成加载后的使用及其卸载.原创 2024-05-10 11:27:26 · 1244 阅读 · 2 评论 -
JVM 类的加载过程详解
在 Java 中数据类型分为 基本数据类型 和 引用数据类型 。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。类的加载过程为 装载, 链接(验证 准备 解析), 初始化原创 2024-05-09 16:43:06 · 1188 阅读 · 12 评论