摘要:类只有被加载到JVM中才能运行。ClassLoader(类加载器)的作用就是将class文件加载到JVM中,程序就可以正确运行了,但类的加载时动态的,并不会一次性加载所有的class文件,而是根据需要去动态加载。 类加载的方式 1. 隐式加载:使用new等方式创建对象时,会隐式地调用类的加载器把对应
阅读全文
摘要:双亲委派模型的概念 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的加载器都是如此,因此所有的类请求都会传给顶层的启动类加载器(Bootstrap ClassLoader),只有当父加载器反馈自己无法完成该加载请求时,子加载器才会
阅读全文
摘要:类的加载过程 1. 装载:查找并加载类的二进制数据 2. 链接: (1) 验证:确保被加载类的正确性 (2) 准备:为类的静态变量分配内存,并将其初始化为默认值 (3) 解析:把类中的符号引用转换为直接引用 3. 初始化:为类的静态变量赋予正确的初始值 类什么时候被初始化 类的初始化步骤
阅读全文
摘要:Serial收集器 ParNew收集器 Parallel Scavenge收集器 CMS收集器 (1) 初始标记:仅仅是标记一个GC Roots能直接关联到的对象,速度很快,Stop the world (2) 并发标记:进行GC Roots Tracing的过程,Stop the world (3
阅读全文
摘要:Minor GC 当Eden区没有足够空间进行分配时,虚拟机就会进行一次Minor GC Full GC
阅读全文
摘要:程序计数器PC Java虚拟机栈 本地方法栈 与虚拟机栈非常相似,区别是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用Native方法服务 也会抛出StackOverFlowError和OutOfMemoryError异常 Java堆 方法区 运行时常量池
阅读全文
摘要:面试:如何改进复制算法? 分情况使用复制算法,在新生代和老年代使用不同的策略。在新生代中的对象98%都是朝生暮死的类型,所以不必要按照1:1的比例去划分内存空间,只需要将内存划分为一块比较大的Eden和两块比较小的Survivor内存就好。每次使用一块Eden和Survivor,当回收时,将Eden
阅读全文
摘要:GC的两种判定方法 (1) 引用计数法 给对象添加一个引用计数器,每当引用一次+1,每次失效时-1,当计数器为0时,表示对象就是不可能再被使用的。 (2) 可达性分析算法 将“GC Roots”对象作为根节点,开始向下搜索,所走过的路径成为引用链。当一个对象到GC Roots没有任何引用链时,说明此
阅读全文
摘要:Java语言把异常当做对象来处理,并定义了一个基类(java.util.Throwable)作为所有异常的父类。异常分为Error和Exception两大类。 Error 不可恢复的异常。 程序中不推荐去捕获Error类型的异常,主要原因是:运行时异常多是由于逻辑错误导致的,属于应该解决的错误。也就
阅读全文
摘要:引用分为强引用、软引用、弱引用和虚引用,这四种引用强度一次减弱:
阅读全文