![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 94
Orange Summer
这个作者很懒,什么都没留下…
展开
-
JVM 方法调用
方法调用就是确定被调用方法的版本,即具体哪一个方法。原创 2023-03-31 17:16:16 · 221 阅读 · 0 评论 -
JVM 类加载机制
在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略让 Java 语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销,但是却为 Java 应用提供了极高的扩展性和灵活性。原创 2023-03-29 19:28:29 · 37 阅读 · 0 评论 -
JVM 运行时栈帧结构
Java 虚拟机以方法作为最基本的执行单位,栈帧支持着方法调用和方法执行,是虚拟机栈的栈元素,虚拟机栈在下面这篇文章中已经介绍过:[post cid=“31” cover=“” size=“”/]栈帧的结构如下图:局部变量表是一组变量值的存储空间,存放方法参数和方法内部定义的局部变量。在编译的时候该方法的局部变量表的最大容量已经确定。局部变量表存放了编译期可知的各种 Java 虚拟机基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(refe原创 2023-03-29 19:31:44 · 137 阅读 · 0 评论 -
JVM 垃圾收集器与内存分配策略
更具体的处理思路是让G1收集器去跟踪各个 Region 里面的垃圾堆积的 价值(和回收获得的空间和回收所需时间有关),然后在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间,优先处理回收价值收益最大的那些 Region。如果内存中多数对象都是存活的,这种算法将会产生大量的内存间复制的开销,但对于多数对象都是可回收的情况,算法需要复制的就是占少数的存活对象,而且每次都是针对整个半区进行内存回收,分配内存时也就不用考虑有空间碎片的复杂情况,只要移动堆顶指针,按顺序分配即可。原创 2023-03-29 19:27:00 · 97 阅读 · 0 评论 -
JVM 内存区域
如果 Java 堆中内存是绝对规整的,可以使用“指针碰撞”的分配方式(所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离)如果 Java 堆中的内存不是规整的,就需要使用“空闲列表”的分配方法(维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录)Java 通过栈上的 reference 数据来操作堆上的具体对象。原创 2023-03-29 19:28:27 · 42 阅读 · 0 评论