work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  S.JVM

摘要:1、类加载器的层次结构 在双亲委托机制中,各个加载器按照父子关系形成了树形结构(逻辑意义),除了根加载器之外,其余的类加载器都有且只有一个父加载器。 打印结果 null说明classLoader是启动类加载器 2、类加载器的双亲委托机制 3、返回String类的ClassLoader 返回结果 nu 阅读全文

posted @ 2019-06-09 19:29 work hard work smart 阅读(302) 评论(0) 推荐(0)

摘要:当Java虚拟机初始化一个类时,要求它的所有父类都已经初始化,但是这条规则不适于接口 1) 当初始化一个类时,并不会先初始化它所实现的类的接口。 2) 在初始化一个接口时,并不会先初始化它的父接口 因此,一个父接口并不会因为它的子接口或者实现类的初始化而初始化。只有当程序首次使用特定接口的镜头变量时 阅读全文

posted @ 2019-06-08 16:45 work hard work smart 阅读(556) 评论(0) 推荐(0)

摘要:1、类加载流程图 从磁盘加载到销毁的完整过程。 2、类加载流程图2 1、加载: 就是把二进制形式的java类型读入java虚拟机中 2、连接: 验证、准备、解析。 连接就是将已经读入到内存的类的二进制数据和合并到虚拟机的运行时环境中 验证: 类文件的结构检查 语义检查 字节码验证 二进制兼容性验证 阅读全文

posted @ 2019-06-08 15:26 work hard work smart 阅读(248) 评论(0) 推荐(0)

摘要:1、创建一个Mytest6类和Singleton类 输出结果 2、将counter2成员变量的位置移动到构造函数后面 输出结果如下: 首先Singleton singleton = Singleton.getInstance(); 是调用Singleton类的getInstance(),属于主动调用 阅读全文

posted @ 2019-06-08 12:59 work hard work smart 阅读(236) 评论(0) 推荐(0)

摘要:1、创建两个接口,MyParent5接口,MyChild5 接口继承自MyParent5接口 接口成员变量默认为:public static final 打印结果 1、删除MyParent5.class 程序还是能正常运行。 2、接着讲MyChild5.class 程序还是能正常运行 总结: 当一个 阅读全文

posted @ 2019-06-08 12:30 work hard work smart 阅读(265) 评论(0) 推荐(0)

摘要:1、创建数组 创建一个MyParent4[] 数组 打印结构 说明此处并不符合主动使用的场景,所有不会初始化MyParent4。 打印myParent4s.getClass()的结果为数组类型。[Lcom.example.jvm.classloader.MyParent4 这个类型是JVM在运行期创 阅读全文

posted @ 2019-06-08 10:47 work hard work smart 阅读(633) 评论(1) 推荐(0)

摘要:1、定义一个常量 打印结果: 此时MyParent2类不会进行实例化,因为str是一个常量。常量在编译阶段,会存如调用这个常量的方法所在类的常量池中。本质上,调用类并没有直接引用到定义常量的类,因此并不会触发定义常量的类初始化。 注意: 这里值的是将常量str存放到MyTest2类的常量池中,之后M 阅读全文

posted @ 2019-06-07 22:27 work hard work smart 阅读(260) 评论(0) 推荐(0)

摘要:主动使用和被动使用Demo 1、创建工程一个Gradle工程 下一步 下一步 点击完成 2、创建类 输出结果: 会发现MyChild1的类静态块没有执行。 总结:对于静态字段来说,只有直接定义了该字段的类才会被初始化。 修改后的类: 执行结果 因为使用到了MyChild的类,它会被初始化。当一个类在 阅读全文

posted @ 2019-06-07 20:40 work hard work smart 阅读(480) 评论(0) 推荐(0)

摘要:JVM 结构: 图片来自:https://blog.csdn.net/SivanL/article/details/88865084 194、说一下JVM的主要组成部分? 及其作用? 1) 类加载器 (ClassLoader) 2) 运行时数据区 (Runtime Data Area) 3) 执行引 阅读全文

posted @ 2019-05-12 20:17 work hard work smart 阅读(148) 评论(0) 推荐(0)

摘要:类加载 在Java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 类型可以是Class,Interface, 枚举等。 Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机将结束生命周期 1)执行了System.exit() 方法 2)程序正常执行结束 3)程序在执行过程 阅读全文

posted @ 2019-05-12 20:15 work hard work smart 阅读(1700) 评论(0) 推荐(0)

摘要:类加载 在Java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 类型可以是Class,Interface, 枚举等。 Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机将结束生命周期 1)执行了System.exit() 方法 2)程序正常执行结束 3)程序在执行过程 阅读全文

posted @ 2019-05-05 13:37 work hard work smart 阅读(242) 评论(0) 推荐(0)

摘要:Java内存模型JMM Java内存模型(即Java Memory Model简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式 JMM中的主内存和工作内存 1、JMM中的主内存 存储Ja 阅读全文

posted @ 2019-05-04 13:44 work hard work smart 阅读(242) 评论(0) 推荐(0)