JVM学习积累】的更多相关文章

1. Java代码编译和执行的整个过程包含了三个重要的机制: Java源码编译机制 类加载机制 类执行机制 2. 关于Java源码编译机制 Java源码编译由以下三个过程组成: 分析和输入符号表 注解处理 语义分析和生成class文件 生成的class文件包括的信息有: 结构信息(class文件格式版本号以及各部分的数量和大小的信息) 元数据(源码中的声明与常量的信息,包括类继承的超类.实现接口的声明信息.域和方法声明信息及常量池) 方法信息(对应源码中语句和表达式的相关信息,包含自己吗.异常处…
2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上发现优点. 从人去学习:更为高层次的方式.从有经验的人身上学习闪光点(成本低,看书.但是因为不是自己经历的,要学会去发现被人的优点) 从事去学习:我们可能自己经历过的事情,我们会有自己的想法,自己踩到坑了,经历过了,失败过了.(成本更高,不撞南墙不回头) 写笔记,写微信公众号,写博客.自己输出,转化…
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 一些JVM的跟踪参数的设置 Java堆的分配参数 -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的性能尽可能的好呢?是不是虚拟机内存越大越好? Java 7之前和Java 8的堆内存结构 Java栈的分配参数 GC算法思想介绍 –GC ROOT可达性算法 –标记清除 –标记压缩 –复制算法 可触及性含义和在Java中的体现 finalize方法理解 Java的强引用,软引用,弱引用,虚引用 GC…
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 为什么学习Java的内存模式 缓存一致性问题 什么是内存模型 JMM(Java Memory Model)简介 volatitle关键字 原子性 可见性 有序性 指令重排 先行发生——happen-before原则 解释执行和编译执行 其他语言(c和c++)也有内存模型么? 为什么需要关注Java内存模型?   之前有一个我实习的同事(已经工作的)反讽我:学(关注)这个有什么用? 我没有回答,我牢记一句话…
Java虚拟机JVM学习07 类的卸载机制 类的生命周期 当Sample类被加载.连接和初始化后,它的生命周期就开始了. 当代表Sample类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,Sample类在方法区内的数据也会被卸载,从而结束Sample类的生命周期. 由此可见,一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期. 引用关系 加载器和Class对象: 在类加载器的内部实现中,用一个Java集合来存放所加载类的引用. 另一方面,一个Clas…
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定的类的名字,返回对应的Class对象的引用. 自定义类加载器的例子 代码: package com.mengdd.classloader; import java.io.ByteArrayOutputStream; import…
Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap) 扩展类加载器(Extension) 系统类加载器(System) 2.用户自定义的类加载器: java.lang.ClassLoader的子类,用户可以定制类的加载方式. JVM自带的加载器 Java虚拟机自带了以下几种加载器. 1.根(Bootstrap)类加载器: 该加载器没有父加载器. 它…
Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有经过显式初始化的静态变量将原有的值. 一个比较奇怪的例子: package com.mengdd.classloader; class Singleton { // private static Singleton mInstance = new Singl…
Java虚拟机JVM学习03 连接过程:验证.准备.解析 类被加载后,就进入连接阶段. 连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去. 连接阶段三个步骤:验证.准备和解析. 类的验证 类的验证内容: 1.类文件的结构检查 确保类文件遵从Java类文件的固定格式. 2.语义检查 确保类本身符合Java语言的语法规定,比如验证final类型的类没有子类,以及final类型的方法没有被覆盖. 注意,语义检查的错误在编译器编译阶段就会通不过,但是如果有程序员通过非编译的手段生成了…
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构. 加载.class文件的方式: 1.从本地系统中直接加载 2.通过网络下载.class文件 3.从zip,jar等归档文件中加载.class文件 4.从专有数据库中提取.class文件 5.将Java源文件动态编译为.class文件 类的加载的最终产品是位于堆区中…