- #JVM进阶(八)——Stop The World 小伙伴还记得上一篇中我们留下的一个问题吗?什么是停顿类型!经过前几章的学习,我们知道垃圾回收首先是要经过标记的。对象被标记后就会根据不同的区域采用不同的收集方法。看上去很完美的一件事情,其实并不然。 大家有没有想过一件事情,当虚拟机完成两次标记后,便确认了可以回收的对象。但是,垃圾回收并不会阻塞我们程序的线程,... #JVM进阶(八)——Stop The World 小伙伴还记得上一篇中我们留下的一个问题吗?什么是停顿类型!经过前几章的学习,我们知道垃圾回收首先是要经过标记的。对象被标记后就会根据不同的区域采用不同的收集方法。看上去很完美的一件事情,其实并不然。 大家有没有想过一件事情,当虚拟机完成两次标记后,便确认了可以回收的对象。但是,垃圾回收并不会阻塞我们程序的线程,...
- #JVM进阶(十)——JAVA 年老代收集器 在上一篇博文我们介绍了JAVA新生代收集器,本篇博文我们要讲的就是关于老年代的一些收集器。老年代存活的一般是大对象以及生命很顽强的对象,因此新生代的复制算法很明显不能适应该区域的特性,所以老年代采用的是“标记-清除-整理”算法(以前的博文有详细讨论过)。 Serila Old收集器:该收集器是Serial收集器的老年代... #JVM进阶(十)——JAVA 年老代收集器 在上一篇博文我们介绍了JAVA新生代收集器,本篇博文我们要讲的就是关于老年代的一些收集器。老年代存活的一般是大对象以及生命很顽强的对象,因此新生代的复制算法很明显不能适应该区域的特性,所以老年代采用的是“标记-清除-整理”算法(以前的博文有详细讨论过)。 Serila Old收集器:该收集器是Serial收集器的老年代...
- #JVM进阶(十九)——Class文件常量池 在上一博文《JVM进阶(十八)——初识Class文件》中,我们了解了Class文件的一些基础知识。他的整个内部结构就是一张很大的表,我们就是从这张表入手,一一分析每个部分的结构。继续看这张表: 接着上一博文所说,魔数后面分别是次版本号和主版本号。由上图可知其分别占用两个字节。 被蓝色框框住的就是次版本号,划红... #JVM进阶(十九)——Class文件常量池 在上一博文《JVM进阶(十八)——初识Class文件》中,我们了解了Class文件的一些基础知识。他的整个内部结构就是一张很大的表,我们就是从这张表入手,一一分析每个部分的结构。继续看这张表: 接着上一博文所说,魔数后面分别是次版本号和主版本号。由上图可知其分别占用两个字节。 被蓝色框框住的就是次版本号,划红...
- #JVM进阶(二)——初识JAVA堆 在博文《JVM进阶(一)——初识JAVA栈》中我们说到了栈,他在内存中是连续的空间;保存一个个的栈帧,对应一次次方法的调用;还讲到了他是保存对象的引用,那么对象存在哪里呢?我们来看看昨天的一张图: 对象就存在图中的内存区域,在JVM中,那片区域叫做堆! 由图中可以看到堆的存储结构和栈是不同的,堆在内存中并不是一块连续的... #JVM进阶(二)——初识JAVA堆 在博文《JVM进阶(一)——初识JAVA栈》中我们说到了栈,他在内存中是连续的空间;保存一个个的栈帧,对应一次次方法的调用;还讲到了他是保存对象的引用,那么对象存在哪里呢?我们来看看昨天的一张图: 对象就存在图中的内存区域,在JVM中,那片区域叫做堆! 由图中可以看到堆的存储结构和栈是不同的,堆在内存中并不是一块连续的...
- #JVM进阶(三)——内存分配与回收策略 各位小伙伴大家好,还记得上一博文《JVM进阶(二)——初识JAVA堆》我们讲了什么吗?虚拟机中的堆,他是整个内存模型中占用最大的一部分,而且不是连续的。当有需要分配内存的时候,一般有两个方法分配,指针碰撞和空闲列表。该部分的内存回收是由虚拟机的垃圾收集器GC进行管理的。 刚刚粗略的回忆了上一博文所讲的内容,而这一章我们的... #JVM进阶(三)——内存分配与回收策略 各位小伙伴大家好,还记得上一博文《JVM进阶(二)——初识JAVA堆》我们讲了什么吗?虚拟机中的堆,他是整个内存模型中占用最大的一部分,而且不是连续的。当有需要分配内存的时候,一般有两个方法分配,指针碰撞和空闲列表。该部分的内存回收是由虚拟机的垃圾收集器GC进行管理的。 刚刚粗略的回忆了上一博文所讲的内容,而这一章我们的...
- #JVM进阶(十五)——JAVA 类加载器 今天我们将类加载机制5个阶段中的第一个阶段,加载,又叫做装载。为了便于阅读,以下都叫做装载。 装载的第一步就是要获得二进制的字节流,它可以从读.class文件获得,也可以从网络中接收别人发送的字节流。反正只要符合虚拟机规定的字节流格式都可以进入这个阶段。 有了字节流之后,要进行装载还需要一个工具,那就是加载器了。加... #JVM进阶(十五)——JAVA 类加载器 今天我们将类加载机制5个阶段中的第一个阶段,加载,又叫做装载。为了便于阅读,以下都叫做装载。 装载的第一步就是要获得二进制的字节流,它可以从读.class文件获得,也可以从网络中接收别人发送的字节流。反正只要符合虚拟机规定的字节流格式都可以进入这个阶段。 有了字节流之后,要进行装载还需要一个工具,那就是加载器了。加...
- #JVM进阶(十七)——准备-解析-初始化 在类加载机制的五个阶段中,我们已经讲完了第一个阶段。剩下的四个阶段由于涉及到比较多的类文件相关的知识,现在讲了会看得很吃力,所以我们暂时不会一一的去细讲,只说一下大概的用处,让大家有个概念性的认识。 装载之后的阶段就是校验阶段了,该阶段的目的就是确保上一阶段读进来的二进制字节流中包含的信息符合虚拟机的规范,并且不会危害... #JVM进阶(十七)——准备-解析-初始化 在类加载机制的五个阶段中,我们已经讲完了第一个阶段。剩下的四个阶段由于涉及到比较多的类文件相关的知识,现在讲了会看得很吃力,所以我们暂时不会一一的去细讲,只说一下大概的用处,让大家有个概念性的认识。 装载之后的阶段就是校验阶段了,该阶段的目的就是确保上一阶段读进来的二进制字节流中包含的信息符合虚拟机的规范,并且不会危害...
- #JVM进阶(十四)——初识JAVA 类加载机制 从本篇博文开始,我们就进入虚拟机类加载机制的学习了。那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class(字节码)文件,再由虚拟机解释给当前的操作系统去执行。这些过程都是我们看不见的,我们能看见的也就是一个.class文件。既然虚拟机要解释这些.class文件给当前的操... #JVM进阶(十四)——初识JAVA 类加载机制 从本篇博文开始,我们就进入虚拟机类加载机制的学习了。那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class(字节码)文件,再由虚拟机解释给当前的操作系统去执行。这些过程都是我们看不见的,我们能看见的也就是一个.class文件。既然虚拟机要解释这些.class文件给当前的操...
- #JVM进阶(十六)——JAVA 双亲委派模型 在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得的字节流去装载一个类。同时也了解到类加载器的存在,每个加载器对应着不同的加载目录,相互配合着,从而使整个加载过程稳定而安全。 那么他们是如何配合的呢?如果我自己写一个类,名字叫做String可以吗? 首先我们来看一张图: 图中除了最底下的那个加载... #JVM进阶(十六)——JAVA 双亲委派模型 在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得的字节流去装载一个类。同时也了解到类加载器的存在,每个加载器对应着不同的加载目录,相互配合着,从而使整个加载过程稳定而安全。 那么他们是如何配合的呢?如果我自己写一个类,名字叫做String可以吗? 首先我们来看一张图: 图中除了最底下的那个加载...
- #JVM进阶(十八)——初识Class文件 关于类加载机制的相关知识在前面的博文中暂时先讲那么多。中间留下了很多问题,从本篇博文开始,我们来一一解决。 从我们最陌生而又最熟悉的.class文件开始说起。.class文件是一个由8位二进制构成一个字节的字节码文件,里面的格式都是按照规定好的顺序紧凑的排列在文件中。 在.class文件中,他的数据都是以无符号数和... #JVM进阶(十八)——初识Class文件 关于类加载机制的相关知识在前面的博文中暂时先讲那么多。中间留下了很多问题,从本篇博文开始,我们来一一解决。 从我们最陌生而又最熟悉的.class文件开始说起。.class文件是一个由8位二进制构成一个字节的字节码文件,里面的格式都是按照规定好的顺序紧凑的排列在文件中。 在.class文件中,他的数据都是以无符号数和...
- #JVM进阶(七)——从GC日志分析堆内存 在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存。 ... #JVM进阶(七)——从GC日志分析堆内存 在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗?其实这些都是可控的,以前没有讲到是因为就算讲了也只是讲讲而已,看不到实质性的东西。因此这章我们通过分析GC日志来一步步讲解如何细化设置堆内存。 ...
- 剑指Offer——简述堆和栈的区别 堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建; Java虚拟机规范描述:所有的对象实例及数组都要在堆上分配; Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可; &nb... 剑指Offer——简述堆和栈的区别 堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建; Java虚拟机规范描述:所有的对象实例及数组都要在堆上分配; Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可; &nb...
- #JVM进阶(十一)——JAVA G1收集器 在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器——G1收集器。 先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利用多个CPU进行工作,收集方式也与CMS收集器类似,因此不会有太久的停顿。 虽然回收的范围是整个堆,但还是有分代回收的回收方式。在年轻代依然采用复制算法... #JVM进阶(十一)——JAVA G1收集器 在前两篇博文中讲解了新生代和年老代的收集器,在本篇博文中介绍一个收集范围涵盖整个堆的收集器——G1收集器。 先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利用多个CPU进行工作,收集方式也与CMS收集器类似,因此不会有太久的停顿。 虽然回收的范围是整个堆,但还是有分代回收的回收方式。在年轻代依然采用复制算法...
- 堆空间的内存分配 public class Test { public static void main(String[] args) { //-Xms 调整初始堆内存 ,-Xmx 最大堆内存 //返回JVM中堆的内存总量 long initMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024... 堆空间的内存分配 public class Test { public static void main(String[] args) { //-Xms 调整初始堆内存 ,-Xmx 最大堆内存 //返回JVM中堆的内存总量 long initMemory = Runtime.getRuntime().totalMemory() / 1024 / 1024...
- 大家好,我是不温卜火,是一名计算机学院大数据专业大二的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只有csdn这一个平台,博客... 大家好,我是不温卜火,是一名计算机学院大数据专业大二的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只有csdn这一个平台,博客...
上滑加载中
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签