1 JVM的位置
类加载器的类别
BootstrapClassLoader(启动/根类加载器)
c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作
ExtClassLoader (标准扩展类加载器)
java编写,加载扩展库,如classpath中的jre ,javax.*或者
java.ext.dir 指定位置中的类,开发者可以直接使用标准扩展类加载器。
AppClassLoader(系统类加载器)
java编写,加载程序所在的目录,如user.dir所在的位置的class
CustomClassLoader(用户自定义类加载器)
java编写,用户自定义的类加载器,可加载指定路径的class文件
4 双亲委派机制:
当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,则抛出异常,通知子类加载器去加载这个类
双亲委派机制的作用
1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。
5 Native关键字
如果出现native关键字,则说明Java的作用范围达不到了,需要调用底层由C语言写的本地方法库
调用流程
1 先进入本地方法栈
2 通过本地方法接口(JNI)来调用本地方法库
JNI的作用
为了融合其它的语言被Java调用
历史
在Java诞生之初,C,C++横行,为了融合C ,C++ 专门开辟了一个内存空间(本地方法栈),来记录本地方法,在最后加载时通过JNI来加载本地方法库
6 栈
特点: 先入后出
主管程序的运行,生命周期与线程同步,线程结束,栈空间就释放,所以栈不可能有GC
运行原理:栈帧,就是一个方法在栈空间所占的空间
存储内容: 八大基本类型,对象的引用,实例的方法
初始化时:
1、类加载器ClassLoader,加载Student.class字节码到内存;
2、在栈里面为变量s申请一个空间,用来声明s;
3、new的时候,在堆内开辟空间。然后,开始进行默认初始化,String类型默认给null,int类型默认给0等。默认初始化后,开始进行显示初始化,比如成员变量里name默认值为Alice,所以这时会初始化name为Alice。
3、执行Student()构造方法,构造方法进栈,进行构造方法初始化
4、执行构造方法初始化,构造方法执行完毕后出栈,把堆内的对象物理地址,复制给栈内的s,也就是s存放的是对象的引用(物理地址)。
5、执行Student里面的方法时,方法进栈,方法里隐式的this指向堆内存空间
7 堆
8 GC
JVM在进行GC时,并不是进行对三个区域都进行GC,而是大多数GC都在新生区
8.1 GC题目
1 JVM的内存模型和分区,详细到每一个分区应该放什么
2 堆里面的分区有哪些Eden(伊甸园区)from(幸存0区) to(幸存1区) 养老区 ,说说各自的特点br> 3 GC的算法有哪些 标记清除法 标记压缩法 引用计数法 复制算法,怎么用br> 4 轻GC 和 重GC 什么时候发生/p>
8.2 GC算法
1 引用计数法
优点:节省空间
缺点:两次扫描,严重浪费时间,会产生内存碎片
4 标记压缩算法
YGC的触发条件:
1 Eden区剩余空间放不下新的对象
2
FGC的触发条件
1 Old区剩余空间放不下新的对象
2 系统调用System.gc 可能调用
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91338 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!