当里个当
来源:互联网 发布:c语言保留三位小数 编辑:程序博客网 时间:2024/04/28 18:54
(1)、JVM如何加载一个类的过程,双亲委派模型中有哪些方法?
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。从类被加载到虚拟机内存中开始,到卸载出内存为止,类的生命周期包括七个阶段:
加载(Loading);
验证(Verification);
准备 (Preparation);
解析(Resolution);
初始化(Initialization);
使用(Using)
卸载 (Unloading)
其中验证、准备和解析三部分称为连接,在Java语言中,类型的加载和连接过程都是在程序运行期间完成的(Java可以动态扩展的语言特性就是依赖运行期动态加载、动态连接这个特点实现的),这样会在类加载时稍微增加一些性能开销,但是却为Java应用程序提供高度的灵活性。
加载、验证、准备、初始化和卸载这5个阶段的顺序是固定的(即:加载阶段必须在验证阶段开始之前开始,验证阶段必须在准备阶段开始之前开始等。这些阶段都是互相交叉地混合式进行的,通常会在一个阶段的执行过程中调用或激活另一个阶段),解析阶段则不一定,在某些情况下,解析阶段有可能在初始化阶段结束后开始,以支持Java的动态绑定(动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程称为动态绑定。)
在加载阶段,虚拟机主要完成三件事:
1.通过一个类的全限定名来获取定义此类的二进制字节流。
2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。
3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口
验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段
1.文件格式验证:验证字节流文件是否符合Class文件格式的规范,并且能被当前虚拟机正确的处理。
2.元数据验证:是对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言的规范。
3.字节码验证:主要是进行数据流和控制流的分析,保证被校验类的方法在运行时不会危害虚拟机。
4.符号引用验证:符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作将在解析阶段中发生。
准备阶段为变量分配内存并设置类变量的初始化。在这个阶段分配的仅为类的变量(static修饰的变量),而不包括类的实例变量。对已非final的变量,JVM会将其设置成“零值”,而不是其赋值语句的值:
pirvate static int size = 12;
那么在这个阶段,size的值为0,而不是12。 final修饰的类变量将会赋值成真实的值。
解析
在准备阶段,类变量已经经过一次初始化了,在这个阶段,则是根据程序员通过程序制定的计划去初始化类的变量和其他资源。这些资源有static{}块,构造函数,父类的初始化等。
至于使用和卸载阶段阶段,这里不再过多说明,使用过程就是根据程序定义的行为执行,卸载由GC完成。
从左到右加载:首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。
防止内存中出现多份同样的字节码
《2》标准扩展(Extension)类加载器
《3》应用程序类加载器(Application )
《4》上下文(Custom)类加载器
(2)HashMap如何实现的?
(3)HashMap和Concurrent HashMap区别, Concurrent HashMap 线程安全吗, Concurrent HashMap如何保证 线程安全?
(4)HashMap和HashTable 区别,HashTable线程安全吗?
(5)进程间通信有哪几种方式?
(6)JVM分为哪些区,每一个区干吗的?
(7)JVM如何GC,新生代,老年代,持久代,都存储哪些东西?
(8)GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?
(9)快速排序,过程,复杂度?
(10)什么是二叉平衡树,如何插入节点,删除节点,说出关键步骤。
(11)TCP如何保证可靠传输?三次握手过程?
(12)TCP和UDP区别?
(13)滑动窗口算法?
(14)Linux下如何进行进程调度的?
(15)Linux下你常用的命令有哪些?
(16)操作系统什么情况下会死锁?
(17)常用的hash算法有哪些?
(18)什么是一致性哈希?
(19)如何理解分布式锁?
(20)数据库中的范式有哪些?
(21)数据库中的索引的结构?什么情况下适合建索引?
(22)Java中的NIO,BIO,AIO分别是什么?
(23)用什么工具调试程序?JConsole,用过吗?
(24)现在JVM中有一个线程挂起了,如何用工具查出原因?
(25)线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
(26)同步和异步有什么区别?
(27)线程池用过吗?
(28)如何创建单例模式?说了双重检查,他说不是线程安全的。如何高效的创建一个线程安全的单例?
(29)concurrent包下面,都用过什么?
(30)常用的数据库有哪些?redis用过吗?
(31)了解hadoop吗?说说hadoop的组件有哪些?hdfs,hive,hbase,zookeeper。说下mapreduce编程模型。
(32)开源协议有哪些?
(33)开源软件有哪些?
(34)了解哪些设计模式?说说都用过哪些设计模式
(35)如何判断一个单链表是否有环?
(36)操作系统如何进行分页调度?
(37)匿名内部类是什么?如何访问在其外面定义的变量?
- 当里个当
- 当
- 当
- 当。
- 当.......
- 当
- 当
- 当
- 当个好男人
- 当里个当,免费的HTML5连载来了《HTML5网页开发实例详解》连载(一)
- 当,当,当
- 找个程序员当老公
- 当个小组长都难
- 如何用jquery取出table中当前行里的第一个文本框值
- 当迷茫在大学里泛滥成灾---李开复
- 当迷茫在大学里泛滥成灾
- 当while里有ssh,注意点
- java里,当long与上了int
- [CoffeeBot] 重写Auto-Docking服务器
- 兔子的烦恼(二) nyoj (规律)
- Linux CentOS7 下安装配置vncserver
- 解决android 7.0 popwindow的showAsDropDown没有效果问题
- android studio API等级对应android版本
- 当里个当
- 轮播图的实现
- SpringMVC中的路由配置及参数传递详解
- 5分钟了解MySQL5.7的undo log在线收缩新特性
- PyCharm社区2017.1版第三方库不识别
- 安卓禁止ScrollView内的控件改变之后自动滚动
- h5表格的跨行跨列
- 基于sinopia快速搭建npm私服
- Python中super关键字的用法