摘要: Java 内存模型 Java 内存模型(Java Memory Model)的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节 1. 主内存与工作内存 Java 内存模型规定了 所有的变量都存储在主内存(Main Memory)中(虚拟机内 阅读全文
posted @ 2023-12-26 16:51 holyholic704 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收 垃圾回收需要完成的三件事情 哪些内存需要回收? 什么时候回收? 如何回收? 1. 如何判断对象是否存活 在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,首先就要确定对象的存活状态 1.1 对象存活算法 1.1.1 引用计数算法(Reference Count 阅读全文
posted @ 2023-12-22 17:19 holyholic704 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 类加载机制 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的类加载机制 与那些在编译时需要进行连接的语言不同,在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这 阅读全文
posted @ 2023-12-21 21:10 holyholic704 阅读(10) 评论(0) 推荐(0) 编辑
摘要: Class 类文件的结构 Class 文件是一组以 8 个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符,这使得整个 Class 文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在 当遇到需要占用 8 个字节以上空间的数据项时,则会按照高位在前 阅读全文
posted @ 2023-12-21 21:09 holyholic704 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 对象 1. 对象的创建 Java 是一门面向对象的编程语言,Java 程序运行过程中无时无刻都有对象被创建出来 1.1 类加载检查 当虚拟机遇到一条字节码 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果 阅读全文
posted @ 2023-12-21 21:03 holyholic704 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 运行时数据区域 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域 JDK 1.7 JDK 1.8 1. 程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器 字节码解释器工作时就 阅读全文
posted @ 2023-12-21 21:01 holyholic704 阅读(56) 评论(0) 推荐(0) 编辑
摘要: JVM JVM(Java Virtual Machine)是一种能够执行 Java 字节码的虚拟机,是实现 Java 跨平台特性的核心部分,他屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 JDK、JRE 与 阅读全文
posted @ 2023-12-21 20:58 holyholic704 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1、Java 8 2014 年 3 月 18 日,Oracle 发布了 Java 8,为目前唯二的 LTS(长期支持)版本之一,另一个是 Java 11,目前最新的版本为 Java 15 Java 8 为目前使用最多的发行版本 更多:Java版本历史、Jetbrains Java编程 2、接口默认实 阅读全文
posted @ 2020-09-22 22:57 holyholic704 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 1、内部类 内部类是定义在一个类的内部的类,内部类 不能定义静态变量和方法。接口内也可以使用内部类,但没必要 更好的实现隐藏:内部类可以被 private 与 protected 修饰 内部类拥有外部类的所有元素的访问权限:可以直接调用所有外部类的成员,包括 private 修饰的变量和方法、非静态 阅读全文
posted @ 2020-09-17 19:59 holyholic704 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 1、Object 类 所有类的父类,所有类都 隐式地 继承 Object,因此省略了 extends Object 关键字 1.1 boolean equals() 判断两个对象是否相同,Object 中的 equals 方法比较的是两个引用的内存地址。工作中,不应该比较内存地址,应该比较地址里面的 阅读全文
posted @ 2020-09-17 16:55 holyholic704 阅读(248) 评论(0) 推荐(0) 编辑