JVM
QAQ打包
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
jvm篇 类加载器
类加载器类与类加载器判断类是否“相等”任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。这里的“相等”,包括代表类的 Class 对象的 equals() 方法、isInstance() 方法的返回结果,也包括使用转载 2020-06-02 17:17:02 · 221 阅读 · 0 评论 -
jvm篇 类加载的过程
类加载的过程类加载过程包括 5 个阶段:加载、验证、准备、解析和初始化。加载加载的过程“加载”是“类加载”过程的一个阶段,不能混淆这两个名词。在加载阶段,虚拟机需要完成 3 件事:通过类的全限定名获取该类的二进制字节流。将二进制字节流所代表的静态结构转化为方法区的运行时数据结构。在内存中创建一个代表该类的 java.lang.Class 对象,作为方法区这个类的各种数据的访问入口。获取二进制字节流对于 Class 文件,虚拟机没有指明要从哪里获取、怎样获取。除了直接从编译好的 .cla转载 2020-06-02 17:16:41 · 182 阅读 · 0 评论 -
jvm篇 类加载的时机
类加载的时机类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段:加载验证准备解析初始化使用卸载验证、准备、解析 3 个阶段统称为连接。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FSFPXtU0-1591088476985)(./images/loadclass.png)]加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始(注意是“开始”,而不是“进行转载 2020-06-02 17:16:21 · 200 阅读 · 0 评论 -
jvm篇 类文件结构
类文件结构JVM 的“无关性”谈论 JVM 的无关性,主要有以下两个:平台无关性:任何操作系统都能运行 Java 代码语言无关性: JVM 能运行除 Java 以外的其他代码Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。JVM 只认识 .class 文件,它不关心是何种语言生成了 .class 文件,只要 .class 文件符合 JVM 的规范就能运行。 目前已经有 JRuby、Jython、Scala转载 2020-06-02 17:16:01 · 222 阅读 · 0 评论 -
jvm篇 jvm性能调优
JVM 性能调优在高性能硬件上部署程序,目前主要有两种方式:通过 64 位 JDK 来使用大内存;使用若干个 32 位虚拟机建立逻辑集群来利用硬件资源。使用 64 位 JDK 管理大内存堆内存变大后,虽然垃圾收集的频率减少了,但每次垃圾回收的时间变长。 如果堆内存为14 G,那么每次 Full GC 将长达数十秒。如果 Full GC 频繁发生,那么对于一个网站来说是无法忍受的。对于用户交互性强、对停顿时间敏感的系统,可以给 Java 虚拟机分配超大堆的前提是有把握把应用程序的 Full G转载 2020-06-02 17:15:38 · 160 阅读 · 0 评论 -
jvm篇 内存分配与回收策略
内存分配与回收策略对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的垃圾收集器组合以及相关的参数配置。以下列举几条最普遍的内存分配规则,供大家学习。对象优先在 Eden 分配大多数情况下,对象在新生代 Eden 区中分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC。????Minor GC vs Major GC/Ful转载 2020-06-02 17:15:01 · 222 阅读 · 0 评论 -
jvm篇 HotSpot垃圾收集器
HotSpot 垃圾收集器HotSpot 虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,虽然我们要对各个收集器进行比较,但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。新生代垃圾收集器Serial 垃圾收集器(单线程)只开启一条 GC 线程进行垃圾回收,并且在垃圾收集过程中停止一切用户线程(Stop The World)。一般客户端应用所需内存较小,不会创建太多对象,而且堆内存不大,因此垃圾收集器回收时间短,即使在这段时间停止一切用户线程,也不会感觉明显卡顿。因此转载 2020-06-02 17:14:14 · 132 阅读 · 0 评论 -
jvm篇 垃圾收集策略与算法
垃圾收集策略与算法程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。判定对象是否存活若一个对象不被任何对象或变量引用,那么它就是无效对象,需要被回收。引用计数法在对象头转载 2020-06-02 17:13:51 · 127 阅读 · 0 评论 -
jvm篇 HotSpot虚拟机对象探秘
HotSpot 虚拟机对象探秘对象的内存布局在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域:对象头(Header)实例数据(Instance Data)对齐填充(Padding)对象头对象头记录了对象在运行过程中所需要使用的一些数据:哈希码GC 分代年龄锁状态标志线程持有的锁偏向线程 ID偏向时间戳对象头可能包含类型指针,通过该指针能确定对象属于哪个类。如果对象是一个数组,那么对象头还会包括数组长度。实例数据实例数据部分就是成员变量的值,其中包括父转载 2020-06-02 17:13:20 · 332 阅读 · 0 评论 -
jvm篇 jvm内存结构
JVM 内存结构Java 虚拟机的内存空间分为 5 个部分:程序计数器Java 虚拟机栈本地方法栈堆方法区JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。程序计数器(PC 寄存器)程序计数器的定义程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此转载 2020-06-02 17:12:32 · 134 阅读 · 0 评论
分享