摘要:
HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器。根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率。 新生代垃圾收集器: a) 单线程:只开启一条GC线程进行垃圾回收,并且在垃圾回收过程中停止一切用户 阅读全文
摘要:
一、类和类加载器 a) 类加载器的作用:将class文件加载到JVM的方法区,并且在方法区中创建一个java.lang.Class对象作为外界访问这个类的接口。 b) 类和类加载器的关系:比较两个类是否相等,只有当这两个类由同一个类加载器加载才有意义;否则,即使同一个class文件被不同的类加载器加 阅读全文
摘要:
加载是类加载的第一步。 一、加载 a)加载的过程 1)通过一个类的全限定名获取这个类的二进制字节流,也就是class文件 2)将二进制字节流的存储结构转换为特定的数据结构,存储在方法区 3)在内存中创建一个Java.lang.Class的对象,接下来在程序运行的过程中所有对这个类的访问都是通过这个C 阅读全文
摘要:
如何在高性能服务器上进行JVM调优;以便充分利用高性能服务器的硬件资源,有两种JVM调优方案。 一、 采用64位操作系统,并为JVM分配大内存 分析:如果JVM中堆内存太小,那么就会频繁地发生垃圾回收,而垃圾回收都会伴随不同程度的程序停顿。 a) 优点:扩大堆内存的话可以减少垃圾回收的频率,从而避免 阅读全文
摘要:
什么是“JVM”的无关性 Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译,到处运行。 JVM不仅具有平台无关性,还具有语言无关性。平台无关性是指不同的操作系统都有各自的JV 阅读全文
摘要:
一、类的生命周期 二、类加载的时机 a) 加载、验证、准备、初始化是按照先后顺序依次执行的 b) 解析过程会发生在初始化过程中 a) 在类加载过程中遇到如下指令(new、getstatic、putstatic、invokestatic),如果当前的类尚未初始化,那么就要进行初始化。分别对应的Java 阅读全文
摘要:
一、对象创建的过程:当虚拟机遇到一条含有New的指令时,会进行一系列对象创建的操作。 a) 如果含有的话,直接进行下一步 b) 如果常量池中没有这个符号引用的话,说明这个类还没有被定义,回报ClassNotFounddError的异常。 2.检查该符号引用所属的类是否已经被加载到JVM中 a) 如果 阅读全文
摘要:
Java虚拟机的内存模型分为五部分:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。 程序计数器、Java虚拟机栈、本地方法栈都是线程私有的,也就是每个线程都拥有这三个区域,而且这三个区域会随着线程的创建而开始,随着线程的结束而销毁,那么垃圾收集器在何时清理这三个区域的问题就解决了。 堆和方法 阅读全文
摘要:
一、Java所承担的自动内存管理主要是针对对象内存的分配和回收。 二、在Java虚拟机的五块内存空间中,程序计数器、Java虚拟机栈、本地方法栈内存的分配和回收都具有确定性,一般在编译阶段就能确定需要分配的内存大小,并且由于都是线程私有,因此它们的内存空间都随着线程的创建而创建,线程的结束而回收。也 阅读全文
摘要:
Java虚拟机的内存空间分为五个部分,分别是: 接下来对这五部分分别进行详细的介绍 1、程序计数器: a)什么是程序计数器:程序计数器是内存中的一个很小的空间,可以看作是当前线程正在执行的字节码的行号指示器。也就是说,程序计数器里面记录的是当前线程正在执行的字节码指令的地址。需要注意的是:如果当前线 阅读全文