![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM虚拟机
takeuheart
这个作者很懒,什么都没留下…
展开
-
JVM虚拟机—G1回收器
JVM虚拟机—G1回收器CMS有一个极端的场景(也是经常出现的场景)。 在发生 Minor GC 时,由于 Survivor 区已经放不下了,多出的对象只能提升(promotion)到老年代。但是此时老年代因为空间碎片的缘故,会发生 concurrent mode failure 的错误。这个时候,就需要降级为 Serail Old 垃圾回收器进行收集。这就是比 concurrent mode failure 更加严重的 promotion failed 问题。一次简单的 Major GC,竟然能演化原创 2020-06-29 10:40:26 · 143 阅读 · 0 评论 -
JVM虚拟机—垃圾回收
JVM虚拟机—垃圾回收标记根据 GC Roots 遍历所有的可达对象,这个过程,就叫作标记。清除清除阶段就是把未被标记的对象回收掉。但是这种简单的清除方式,有一个明显的弊端,那就是碎片问题。复制 提供一个对等的内存空间,将存活的对象复制过去,然后清除原内存空间。在程序设计中,一般遇到扩缩容或者碎片整理问题时,复制算法都是非常有效的。比如:HashMap 的扩容也是使用同样的思路,Redis 的 rehash 也是类似的。但是,它的弊端也非常明显。它浪费了几乎一半的内存空间来做这个事情,如果资源原创 2020-06-29 10:06:05 · 137 阅读 · 0 评论 -
JVM虚拟机—OOM
JVM虚拟机—OOMJVM 是如何判断哪些对象应该被回收?哪些应该被保持呢?JVM 的 GC 动作,是不受程序控制的,它会在满足条件的时候,自动触发。在发生 GC 的时候,一个对象,JVM 总能够找到引用它的祖先。找到最后,如果发现这个祖先已经名存实亡了,它们都会被清理掉。而能够躲过垃圾回收的那些祖先,比较特殊,它们的名字就叫作 GC Roots。从 GC Roots 向下追溯、搜索,会产生一个叫作 Reference Chain 的链条。当一个对象不能和任何一个 GC Root 产生关系时,就会被原创 2020-06-28 15:13:54 · 149 阅读 · 0 评论 -
JVM虚拟机—字节码
JVM虚拟机—字节码工具javapjavap 是 JDK 自带的反解析工具。它的作用是将 .class 字节码文件解析成可读的文件格式。javac中可以指定一些额外内容输出到字节码。javac -g:lines 强制生成 LineNumberTable。javac -g:vars 强制生成 LocalVariableTable。javac -g 生成所有的 debug 信息。jclasslibjclasslib 是一个图形化的工具,能够更加直观的查看字节码中的内容。它还分门别类原创 2020-06-28 14:35:41 · 117 阅读 · 0 评论 -
JVM虚拟机—类加载机制
JVM虚拟机—类加载机制类加载过程类的加载很复杂,主要有几个过程:加载、验证、准备、解析、初始化加载加载是将外部的.class文件加载到java的方法区内。验证验证是为了防止恶意代码,如果代码不符合规范,会抛出 java.lang.VerifyError异常。像低版本的JVM是无法加载高版本的类库的准备将为一些类变量分配内存,并将其初始化为默认值。此时,实例对象还没有分配内存。这些动作都是在方法区上的解析解析是将符号引用替换为直接引用的过程。这个阶段都做了哪些工作呢?大体原创 2020-06-28 09:16:08 · 192 阅读 · 0 评论 -
JVM虚拟机—内存管理
JVM虚拟机—内存管理JVM内存布局java的数据结构是非常丰富的,例如:静态成员变量动态成员变量区域变量短小紧凑的对象声明庞大复杂的内存申请这么多不同的数据结构,是在什么地方存储的,它们之间又是如何交互的呢? java的内存布局是一直在调整的。JDK8之后的版本移除了永久代,使用metadata来代替。这表示-XX:PermSIze等参数调优已经没有了意义。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bYOUDqe-1593164861021)原创 2020-06-26 17:47:55 · 188 阅读 · 0 评论 -
JVM虚拟机—探究其所处位置
JVM虚拟机—探究其所处位置 JVM 全称 Java Virtual Machine,名为java虚拟机。它能识别.class文件,并解析其中的指令,转换为操作系统的指令,调用操作系统完成操作。你可以理解为JVM是一个翻译器,将java代码翻译成计算机能够识别的指令。 JVM虽然能够翻译.class文件,但是没有.class文件它什么也做不了。所以我们会给它提供一个基本的类库,也就是JVM标准加上一堆基础类库,这些组成了java运行时环境,就是我们常说的JRE。 从广义上讲JVM是一种规范。从狭原创 2020-06-26 16:42:54 · 203 阅读 · 0 评论