上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 33 下一页
摘要: 类的生命周期 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺 阅读全文
posted @ 2024-07-17 20:33 _Sylvan 阅读(63) 评论(0) 推荐(0)
摘要: 对象优先在 Eden 分配 堆分为新生代和老年代,新生代用于存放使用后就要被回收的对象(朝生夕死),老年代用于存放生命周期比较长的对象。 创建的大部分对象,都属于生命周期较短的对象,所以会存放在新生代。新生代又细分 Eden、From Survivor、To Survivor,对象会优先在 Eden 阅读全文
posted @ 2024-07-17 15:03 _Sylvan 阅读(57) 评论(0) 推荐(0)
摘要: JVM 的垃圾收集器主要分为两大类:分代收集器和分区收集器,分代收集器的代表是 CMS,分区收集器的代表是 G1 和 ZGC 分代收集器 CMS 以获取最短回收停顿时间为目标,采用“标记-清除”算法,分 4 大步进行垃圾收集,其中初始标记和重新标记会 STW,JDK 1.5 时引入,JDK9 被标记 阅读全文
posted @ 2024-07-17 14:20 _Sylvan 阅读(82) 评论(0) 推荐(0)
摘要: 垃圾回收的概念 垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存爆掉。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。 垃圾判断算法 引用计数算法 引用计数算法(Reachability Counting)是通过在 阅读全文
posted @ 2024-07-17 13:38 _Sylvan 阅读(41) 评论(0) 推荐(0)
摘要: Java 源代码文件经过编译器编译后会生成字节码文件,经过加载器加载完毕后会交给执行引擎执行。在执行的过程中,JVM 会划出来一块空间来存储程序执行期间需要用到的数据,这块空间一般被称为运行时数据区 根据 Java 虚拟机规范的规定,运行时数据区可以分为以下几个部分: 程序计数器(Program C 阅读全文
posted @ 2024-07-16 23:00 _Sylvan 阅读(82) 评论(0) 推荐(0)
摘要: 加载与存储指令 public int add(int a, int b) { int res = a + b; return res; } 字节码指令 public int add(int, int); descriptor: (II)I flags: (0x0001) ACC_PUBLIC Cod 阅读全文
posted @ 2024-07-16 19:56 _Sylvan 阅读(73) 评论(0) 推荐(0)
摘要: Java 的源码文件经过编译器编译后会生成字节码文件,然后由 JVM 的类加载器进行加载,再交给执行引擎执行。在执行过程中,JVM 会划出一块内存空间来存储程序执行期间所需要用到的数据,这块空间一般被称为运行时数据区。 栈帧(Stack Frame)是运行时数据区中用于支持虚拟机进行方法调用和方法执 阅读全文
posted @ 2024-07-16 17:01 _Sylvan 阅读(54) 评论(0) 推荐(0)
摘要: javap 字节码的基本信息 public class Test { private int age = 10; public int getAge() { return age; } } 在 class 文件的同级目录下输入命令 javap -v -p Test.class 来查看一下输出的内容 阅读全文
posted @ 2024-07-15 19:59 _Sylvan 阅读(39) 评论(0) 推荐(0)
摘要: .java源文件 package test.JVM; public class Test { public static void main(String[] args) { System.out.println("haha"); } } 十六进制查看.class文件 魔数 第一行中有一串特殊的字符 阅读全文
posted @ 2024-07-15 15:02 _Sylvan 阅读(62) 评论(0) 推荐(0)
摘要: 类加载器 运行时数据区 执行引擎 执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令 JVM架构图 阅读全文
posted @ 2024-07-15 14:48 _Sylvan 阅读(17) 评论(0) 推荐(0)
摘要: 缺点 破坏封装:由于反射允许访问私有字段和私有方法,所以可能会破坏封装而导致安全问题。 性能开销:由于反射涉及到动态解析,因此无法执行 Java 虚拟机优化 应用场景 开发通用框架:像 Spring,为了保持通用性,通过配置文件来加载不同的对象,调用不同的方法。 动态代理:在面向切面编程中,需要拦截 阅读全文
posted @ 2024-07-14 17:24 _Sylvan 阅读(41) 评论(0) 推荐(0)
摘要: 值传递:当一个参数按照值的方式在两个方法之间传递时,调用者和被调用者其实是用的两个不同的变量——被调用者中的变量(原始值)是调用者中变量的一份拷贝,对它们当中的任何一个变量修改都不会影响到另外一个变量 引用传递: 当一个参数按照引用传递的方式在两个方法之间传递时,调用者和被调用者其实用的是同一个变量 阅读全文
posted @ 2024-07-14 14:40 _Sylvan 阅读(29) 评论(0) 推荐(0)
摘要: // 手动装箱 Integer integer = new Integer(10); // 手动拆箱 int i = integer.intValue(); // 自动装箱,通过 Integer.valueOf() 完成 Integer integer = 10; // 自动拆箱,通过 Intege 阅读全文
posted @ 2024-07-14 13:56 _Sylvan 阅读(27) 评论(0) 推荐(0)
摘要: // Cloneable 接口是一个标记接口,用来表示某个功能在执行的时候是合法的 public interface Cloneable { } 没有引用类型字段时 class Writer implements Cloneable { private int age; private String 阅读全文
posted @ 2024-07-14 13:56 _Sylvan 阅读(18) 评论(0) 推荐(0)
摘要: public final class StringBuffer extends AbstractStringBuilder implements Serializable, CharSequence { public StringBuffer() { super(16); } public sync 阅读全文
posted @ 2024-07-14 12:20 _Sylvan 阅读(29) 评论(0) 推荐(0)
上一页 1 ··· 20 21 22 23 24 25 26 27 28 ··· 33 下一页