宋红康jvm学习p1-100

p1-26略

p27 类加载器及类加载过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

p28 类加载过程一:loading在这里插入图片描述

p29 类加载过程二:linking

在这里插入图片描述

p30 类加载过程三:初始化在这里插入图片描述

代码:
在这里插入图片描述
编译后class
在这里插入图片描述
从字节码指令可以看出number是先赋值20.再赋值10
在这里插入图片描述

p31 几种类加载器 在这里插入图片描述

在这里插入图片描述
引导类加载器不是用java写的,用c++写的

系统类加载器
在这里插入图片描述
扩展类加载器
在这里插入图片描述

public class ClassLoadTest {
    public static void main(String[] args) {
        //系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2
        //上层扩展类加载器
        ClassLoader extendClassLoader = systemClassLoader.getParent();
        System.out.println(extendClassLoader);//sun.misc.Launcher$ExtClassLoader@1b6d3586
        //上层启动类加载器
        ClassLoader bootstrapClassLoader = extendClassLoader.getParent();
        System.out.println(bootstrapClassLoader);//null
//        自定义使用系统类加载器
        ClassLoader systemClassLoader1 = ClassLoadTest.class.getClassLoader();
        System.out.println(systemClassLoader1);//sun.misc.Launcher$AppClassLoader@18b4aac2
//系统类使用启动类加载器
        ClassLoader bootstrapClassLoader1 = String.class.getClassLoader();
        System.out.println(bootstrapClassLoader1);//null
    }
}

p32 引导类 扩展类 系统类加载器的使用及演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

p33用户自定义类加载器

在这里插入图片描述
在这里插入图片描述

p34 ClassLoader的常用方法及获取方法

在这里插入图片描述
在这里插入图片描述

p35 双亲委派机制

在这里插入图片描述
在这里插入图片描述
比如说自定义一个java.lang.string类,但是会先交给启动类加载器去加载,启动类加载器负责加载的包下面已经有了这个类,所以我们写的sttring类就失效了

p36双亲委派机制的优势

在这里插入图片描述

p37 沙箱安全机制

在这里插入图片描述

p38类的主动使用与被动使用

在这里插入图片描述
在这里插入图片描述

p39 运行时数据区内部结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p40 jvm线程说明

在这里插入图片描述
在这里插入图片描述

p41 pc寄存器概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p42 pc寄存器使用举例

在这里插入图片描述

p44 虚拟机栈的主要特点

在这里插入图片描述
在这里插入图片描述

p45 虚拟机异常与如何设置栈大小

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

p46 栈的存储结构和运行原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p47栈帧的内部结构

在这里插入图片描述
在这里插入图片描述

p48局部变量表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p49 字节码中方法内部结构的剖析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

p50 变量槽slot在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p51静态变量与局部变量对比

在这里插入图片描述
在这里插入图片描述

p52操作数栈

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

p53涉及操作数栈的字节码指令执行分析

p54 栈顶缓存技术

p55 动态链接的理解与常量池的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p56 方法的绑定机制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p57 4种方法调用指令区分非虚方法与虚方法

在这里插入图片描述
在这里插入图片描述

package java2;

/**
 * 解析调用中非虚方法、虚方法的测试
 *
 * invokestatic指令和invokespecial指令调用的方法称为非虚方法
 * @author shkstart
 * @create 2020 下午 12:07
 */
class Father {
    public Father() {
        System.out.println("father的构造器");
    }

    public static void showStatic(String str) {
        System.out.println("father " + str);
    }

    public final void showFinal() {
        System.out.println("father show final");
    }

    public void showCommon() {
        System.out.println("father 普通方法");
    }
}

public class Son extends Father {
    public Son() {
        //invokespecial
        super();
    }
    public Son(int age) {
        //invokespecial
        this();
    }
    //不是重写的父类的静态方法,因为静态方法不能被重写!
    public static void showStatic(String str) {
        System.out.println("son " + str);
    }
    private void showPrivate(String str) {
        System.out.println("son private" + str);
    }

    public void show() {
        //invokestatic
        showStatic("atguigu.com");
        //invokestatic
        super.showStatic("good!");
        //invokespecial
        showPrivate("hello!");
        //invokespecial
        super.showCommon();

        //invokevirtual
        showFinal();//因为此方法声明有final,不能被子类重写,所以也认为此方法是非虚方法。
        //虚方法如下:
        //invokevirtual
        showCommon();
        info();

        MethodInterface in = null;
        //invokeinterface
        in.methodA();
    }

    public void info(){

    }

    public void display(Father f){
        f.showCommon();
    }

    public static void main(String[] args) {
        Son so = new Son();
        so.show();
    }
}

interface MethodInterface{
    void methodA();
}

p58 invokedynamic指令的使用

在这里插入图片描述
在这里插入图片描述

p59 方法重写的本质

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p60 方法返回地址的说明

在这里插入图片描述
在这里插入图片描述

p62 虚拟机栈的5道面试题

p63 本地方法接口的理解

在这里插入图片描述
在这里插入图片描述

p64 本地方法栈的理解

在这里插入图片描述

p66 堆空间概述

在这里插入图片描述

p67 堆空间关于对象创建和GC的概述

在这里插入图片描述

p68 堆细分内存结构

在这里插入图片描述

p69 堆空间大小设置

在这里插入图片描述
在这里插入图片描述

p70 OOM的说明与举例

p71 新生代与老年代相关参数的设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p72 图解对象分配的一般过程

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

p73 对象分配的特殊情况

在这里插入图片描述

p74 代码举例与jvisualVM演示对象的分配过程

在这里插入图片描述
在这里插入图片描述

p75 常用工具概述与jprofiler演示

在这里插入图片描述

下载地址

在这里插入图片描述

p76 minorGC MajorGC与fullGC的对比

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p77 GC举例与日志分析

p78 体会堆空间分代的思想

在这里插入图片描述
在这里插入图片描述

p79 总结内存分配策略

在这里插入图片描述
在这里插入图片描述

p80 堆空间为每个线程分配的TLAB

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
查询是否开启了tlab
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p81小结堆空间常用参数设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p82 通过逃逸分析看堆空间的对象分配策略

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
没有逃逸:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p83 代码优化之栈上分配

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p84 代码优化之同步省略

在这里插入图片描述
在这里插入图片描述

p85 代码优化之标量替换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
未开启前会在堆内进行垃圾回收,开启后直接存储在栈中,随着出栈就消失,不存在垃圾回收

p86代码优化及堆的小结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p87 方法区概述 栈堆方法区间的交互关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p88 方法区的基本理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p 89Hotspot中方法区的演进

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p90 设置方法区大小的参数

在这里插入图片描述
在这里插入图片描述

p91 oom metaspace举例

在这里插入图片描述

p92方法区的内部结构1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p93 方法区内部结构2

在这里插入图片描述

在这里插入图片描述

p94 class文件中常量池的理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p95 运行时常量池的理解

在这里插入图片描述

p96举例方法区的使用

在这里插入图片描述

p97 方法区在jdk6 7 8中的演进细节

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p098 stringtable为什么要调整位置

在这里插入图片描述

p99 如何证明静态变量存在哪

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

p100 方法区的垃圾回收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值