![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
小皮子摘星星
请多多指教
展开
-
对象能否被垃圾回收的判断方式
对于垃圾回收,JVM 是如何判断是否已经死亡了或者无需使用,而回收空间呢?主要有两种方法引用计数法引用计数法就是对于对象,如果有变量引用它,则对于这个对象的引用计数加一。如果在引用的计数为 0 的时候,则该变量则是已死亡,可以回收了。实际流程这样的,有一个引用,被赋值某一对象,那么该对象的引用计数器加一。一个引用指向某一对象,如果修改这个引用的指向,那么将该对象的引用计数减一。所以要获取全部的引用更新操作。相应增减目标对象引用计数器。缺点需要额外的空间存储计数器繁琐的更新无法处理循环对象原创 2020-06-17 14:19:31 · 253 阅读 · 0 评论 -
垃圾回收的基本算法
JVM 垃圾回收的方式主要有三种,现代的垃圾回收器机制,是基于这三种规避它们的缺点,综合优点。清除(sweep)就是将死亡的对象进行标记,把死亡对象的内存标记为空闲内存,并且记录在一个空闲列表中,当新建对象的时候,内存模块从这块空闲列表中寻找空闲能够足够分配的内存,给新建对象。其中 GC Roots 是指向还在使用的对象,没有指向的将被当初空闲内存。优点简单缺点造成内存碎片因为 Java 堆的对象空间是连续的,可能出现明明有空闲内存,却无法分配的意外情况。分配效率低对原创 2020-06-16 23:53:21 · 121 阅读 · 0 评论 -
Java 对象内存布局
Java 对象的内存布局,在 Java 对象的布局中,主要有着三部分,对象头,实例数据,对齐填充。对象头主要包括两部分标记字段标记字段主要记录了对象在运行时候的信息,包括 哈希码,锁信息,GC 等类型指针包含了指向对象的类信息的指针。在 64 位虚拟机中,标记字段和类型指针都占了个 64 为,总共 16 个字节,在这里对于 Integer 类型的对象来说,它的示例数据字段 int 也才四个字节,翻了 4 倍。这也是引入基本类型的原因之一。为了解决上述问题,引入了压缩指针压缩原创 2020-06-10 22:56:19 · 96 阅读 · 0 评论 -
反射的基本实现
反射在 Java 中是一种很重要的特性,给 Java 提供了非常方便了的灵活性。它运行正在运行的 Java 程序观察,设置修改程序的动态行为。举例可以通过 Class 对象枚举该类的所用方法通过 Method.setAccessible() 绕过 Java 语言的访问权限。在其他方法中调用该私有方法。Spring 框架中的 IOC 依赖反转基于反射机制。基本获取 Class 对象方法使用静态方法 Class.forName 来获取。调用该对象的 getClass() 对象类名.clas原创 2020-06-09 15:31:14 · 1438 阅读 · 0 评论 -
什么是异常机制
Java 中的异常意思大致就是就是控制流的非正常转移。在程序出现问题时,执行发生了转移。在 Java 中,异常分为两种,一种是非检查异常,一种是检查异常。如果按照捕获方式,则是一种显示捕获,一种隐式捕获。非检查异常典型的就是 RuntimeException 和 Error。Runtime Exception 的典型代表就是数字越界,用来表示程序虽然无法执行,但是能够拯救一下。而 Error 则是程序发生了严重的错误,无法挽回只能暂时终止。检查异常除了以上的两种代表。其他都是检查异常原创 2020-06-07 17:58:04 · 253 阅读 · 0 评论 -
类加载机制
简单的来说,就是虚拟机把 class 文件加载到内存中,放在方法区,并且进行加载,链接,初始化的过程,其中链接又有验证,准备,解析的三个过程。最终变成虚拟机能使用的 java 类。加载也就是文件到内存的过程,把文件转化未字节流,并且依此来创建类。其中类加载过程中,需要类加载器来完成。类加载器分为三种启动类加载器(BootStrap ClassLoader)常用来加载最为基础的类(lib 目录下的 jar 包中的类)扩展类加载器(ExtClassLoader)常用来加载次要、通用的类(原创 2020-06-06 23:54:11 · 112 阅读 · 0 评论 -
Java 基本类型
Java 基本类型大小java 一共定义了 8 中基本类型 byte,short,int,double,float,boolean,char,long。8 种基本类型在内存空间上的利用和执行效率上有着显著的优势。栈这里的栈指定是解释器栈帧。Java 虚拟机每调用一个 Java 方法,便会创建一个栈帧。解释栈帧是解释器使用的。一共有两个主要组成部分局部变量区this 指针局部变量方法接受的参数字节码操作数栈在局部变量区,除了 long、double 值需要用两个数组单元来存储之外,原创 2020-06-05 23:02:54 · 102 阅读 · 0 评论 -
如何修改字节码
asmtools 躲开 java 语言规范你可能还记得 boolean 类型在 java 中只有 true 或 false 两个选项,但是这是 Java 语言规范的,但是对于 Java 虚拟机就不同了。boolean 会被映射为 int 类型。准确是 true 映射为整数 1,false 映射为 0。接下来。通过 asmtools.jar(或者点击 这里 下载压缩包) 反编译字节码文件。然后我们对字节码文件修改,躲开 java 语法规范的约束。把 boolean 变量赋值其他值。书写一个 Test原创 2020-05-30 14:42:27 · 1105 阅读 · 0 评论