
JVM
Steven_L_
这个作者很懒,什么都没留下…
展开
-
【JVM】Java内存区域详解
1、运行时数据区域1.1 程序计数器程序计数器是一块较小的内存空间,是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的, 在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条原创 2020-06-12 10:57:07 · 1609 阅读 · 0 评论 -
【JVM】垃圾收集器详解
垃圾收集器是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。这里讨论HotSpot虚拟机,包含的所有收集器如图:图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。1、Serial收集器Serial收集器是最基本、发展历史最悠久的收集器。这个收集器是一个单线程的收集器,但它的“单原创 2020-06-08 17:36:27 · 1637 阅读 · 0 评论 -
【JVM】Class字节码文件结构
类文件结构包含如下几个部分:魔数:固定值,确定文件是否是JVM接受的class文件版本号:class文件的版本,保证编译正常执行常量池:存放字面量和符号引用访问标志:类或接口的访问信息,包括是类还是接口、public还是private、是否abstract、final等当前类索引、父类索引:类索引用于确定类的全限定名,Java是单继承,父类索引只有一个,如果没有继承,默认继承java.lang.Object接口索引集合:描述这个类实现了哪些接口,按从左到右顺序加入接口集合中字段表集合:描述.原创 2020-05-22 20:38:03 · 742 阅读 · 0 评论 -
【JVM】类的加载过程
类的加载过程分为加载、连接、初始化,而连接过程又分为验证、准备、解析。加载在加载过程,完成3件事情:1) 通过全类名获取定义此类的二进制字节流;2) 将字节流代表的静态存储结构转换为方法区的运行时数据结构;3) 在内存中生成代表该类的class对象,作为方法区这些数据的访问入口。非数组类的加载还可以通过自定义类加载器去控制字节流的获取方式(重写一个类加载器的loadClass()方法),数组类型不通过类加载器创建,而是JVM直接创建。验证包括验证class文件的魔数、版本号、符号引用合法性、是否原创 2020-05-20 21:28:52 · 1145 阅读 · 0 评论 -
【JVM】一个Java对象的创建过程
Object obj = new Object();Java中创建对象时,需要经过5个阶段,分别是:类加载检查、分配内存、初始化零值、设置对象头、执行init方法。1、类加载检查当JVM执行到一条new指令时,先检查这条指令的参数是否能在常量池定位到这个类的符号引用,同时检查这个类是否已被加载、解析、初始化,如果没有则会先进行类加载过程。2、分配内存在类加载检查后,JVM为新对象分配内存。对象所需的内存大小在类加载完成后可确定,因此分配内存的过程就是把一块确定大小的内存从堆中划分出来。分配方式有指原创 2020-05-18 21:49:00 · 3403 阅读 · 0 评论 -
【JVM】双亲委派模型、优势及如何破坏双亲委派模型
**一、基本概念一个类是由加载它的类加载器和这个类本身来共同确定其在Java虚拟机中的唯一性。**二、什么是双亲委派模型类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。双亲委派模型要求除了最顶层的启动类加载器外,其余的类加载器都应有自己的父类加载器,在双亲委派模型中...原创 2020-04-28 19:03:09 · 2133 阅读 · 0 评论