JVM简介

1.类加载器

 启动类加载器为null,C++实现,所以为null。

双亲委派

寄存器

方法区 

1.8之前叫永久代

1.8之后叫元空间

 栈

 

类的加载:

构造代码块:

  直接在类中定义且没有static修饰没有名字的 { }代码块。

  构造代码块在每次创建对象时调用,构造代码块的执行次序优先于类构造函数。  

/**
 * @author YZC
 * @date 2021/12/1 13:52
 */
public class Stu {

    static {
        System.out.println("static静态代码块");
    }

    public Stu() {
        System.out.println("构造方法");
    }
    {
        System.out.println("代码块");
    }
    public static void main(String[] args) {
        new Stu();
        System.out.println("main");
    }

}

运行结果:
static静态代码块
代码块
构造方法
main

/**
 * @author YZC
 * @date 2021/12/1 13:52
 */
public class Stu {

    static {
        System.out.println("static静态代码块");
    }

    public Stu() {
        System.out.println("构造方法");
    }
    {
        System.out.println("代码块");
    }
    public static void main(String[] args) {
        System.out.println("main");
        new Stu();

    }

}

结果:

static静态代码块
main
代码块
构造方法

/**
 * @author YZC
 * @date 2021/12/1 13:52
 */
public class Stu {

    static {
        System.out.println("static静态代码块");
    }


    {
        System.out.println("代码块2..");
    }

    public Stu() {
        System.out.println("构造方法");
    }

    {
        System.out.println("代码块1");
    }

    public static void main(String[] args) {
        new Stu();
        System.out.println("===============");
        new Stu();
    }

}


运行结果:
static静态代码块
代码块2..
代码块1
构造方法
===============
代码块2..
代码块1
构造方法

主次分明:(主类,次类)

静态代码块、普通代码块、构造方法,在jvm中的运行?优先级,加载顺序,加载次数

静态的东西,是全局共有的,是100%注定的最优先被加载的

1. 静态属于全局,优先级最高,但是,加载时有且仅加载一次

2. 代码块,每new一次加载一次,优先级高于构造方法

静态> 代码块》构造方法

/**
 * @author YZC
 * @date 2021/12/1 14:27
 */

class Code{
    public Code() { //次类
        System.out.println("Code构造方法");
    }

    {
        System.out.println("Code构造块222");
    }

    static {
        System.out.println("Code静态代码块3333");
    }

}


public class CodeBlock03 {  //主类
    {
        System.out.println("CodeBlock03 构造块444");
    }
    static {
        System.out.println("CodeBlock03 静态代码块555");
    }

    public CodeBlock03() {
        System.out.println("CodeBlock03 构造方法666");
    }

    public static void main(String[] args) {
        System.out.println("分割线。。。。。。。。。。。。。。。。。");
        new CodeBlock03();
    }
}




运行结果:
CodeBlock03 静态代码块555
分割线。。。。。。。。。。。。。。。。。
CodeBlock03 构造块444
CodeBlock03 构造方法666
class Code {
    public Code() { //次类
        System.out.println("Code构造方法111");
    }

    {
        System.out.println("Code构造块222");
    }

    static {
        System.out.println("Code静态代码块3333");
    }

}

public class CodeBlock03 {  //主类
    {
        System.out.println("CodeBlock03 构造块444");
    }

    static {
        System.out.println("CodeBlock03 静态代码块555");
    }

    public CodeBlock03() {
        System.out.println("CodeBlock03 构造方法666");
    }

    public static void main(String[] args) {
        System.out.println("分割线。。。。。。。。。。。。。。。。。");
        new Code();
        System.out.println("==============================");
        new Code();
        System.out.println("++++++++++++++++++++++++++++++");
        new Code();
    }
}

结果:
CodeBlock03 静态代码块555
分割线。。。。。。。。。。。。。。。。。
Code静态代码块3333
Code构造块222
Code构造方法111
==============================
Code构造块222
Code构造方法111
++++++++++++++++++++++++++++++
Code构造块222
Code构造方法111

 

 

 

 

 

 方法区

 

 

堆内存调优

 

 

 

 

 注意区分monitorGC。。。。

 

 判断对象是否垃圾?

2个:

1.引用计数

2.GCRoots根可达算法

 

 

 

 

 

 1.复制算法

2.标记算法

优点:

节约空间。

缺点:

 

 3.标记压缩

 

 

优点:

无浪费空间,无碎片产生

缺点:

耗时 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值