JVM
许大侠0610
Yesterday you said tomorrow
展开
-
JVM几种常见的垃圾收集器总结
前言在介绍垃圾收集器之前,首先介绍以下这几个概念1. Stop-the-world它是指 JVM 由于要执行 GC 而停止了应用程序的执行,并且这种情形会在任何一种 GC 算法中发生。当 Stop-the-world 发生时,除了 GC 的线程以外,其他的线程均处于等待的状态,直到 GC 任务完成。实际上,很多 GC 优化都是通过减少 Stop-the-world 的时间来提高程序的性能。...原创 2019-07-01 15:27:46 · 9122 阅读 · 1 评论 -
JVM垃圾收集算法总结
JVM 所采用的垃圾收集算法主要有如下三种:标记 - 清除算法标记 - 整理算法复制算法我们来逐一看一下。 一、标记 - 清除算法如同它的名字一样,算法分为 “标记” 和 “清除“ 两个阶段:标记阶段:标记出所有需要回收的对象。(标记方法为 GC Roots可达性分析算法)清除阶段:统一回收刚刚所有被标记的对象。图示如下:这种算法主要有两个缺点:标记和...原创 2019-07-01 08:24:27 · 141 阅读 · 0 评论 -
判断对象是否凉了的两个算法
判断一个对象是否为垃圾的算法主要有如下这两种:引用计数算法可达性分析算法下面我们来分别看一下。 引用计数算法为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。优点:实现简单执行效率高,对程序的执行影响较小引用计数算法在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,比如使用 Act...原创 2019-06-30 16:28:46 · 158 阅读 · 0 评论 -
Java虚拟机运行时数据区域
运行时数据区域整体概览下图为 JDK1.6 版本的 Java 虚拟机运行时数据区域。关于新版本的改动:JDK1.7 将字符串常量池从运行时常量池挪到了堆中JDK1.8 对比 JDK 1.7 最大的改动就是使用元空间替代了永久代(即方法区)的实现,并且元空间被挪到了本地内存当中。原来方法区中存放的已被加载的类信息置于元空间中,而原来方法区中存放的常量池被放入堆中。如下图所示本文主要...原创 2019-06-29 14:30:44 · 340 阅读 · 0 评论 -
Java虚拟机的结构梳理
可以归纳为如下四个部分: 类加载器(Class Loader):把描述类的数据从 Class 文件加载到内存,除了启动类加载器是 Java 虚拟机的一部分以外,其他的类加载器是被放到 Java 虚拟机外部去实现的,以便让应用程序自己决定如何去获取所需要的类。运行时数据区域(Runtime Data Area):Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同...原创 2019-06-29 10:09:27 · 190 阅读 · 0 评论 -
loadClass()和forName()的区别
类加载的方式主要有两种:隐式加载:使用 new + 构造方法时,隐式的调用类加载器,加载对应的类到 JVM 中,是最常见的类加载方式。显式加载:使用 loadClass()、forName() 等方法显式的加载需要的类,对于显式加载这种类加载方式来讲,当我们获取到了 Class 对象后,需要调用 Class 对象的 newInstance() 方法来生成对象的实例。两种类加载方式的区别...原创 2019-06-28 21:53:03 · 7609 阅读 · 3 评论 -
虚拟机类加载机制总结
简介虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括如下 7 个阶段:加载(Loading)验证(Verification)准备(Preparation)解析(Resolut...原创 2019-06-28 19:47:27 · 416 阅读 · 0 评论 -
一文搞懂双亲委派模型
类加载器虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。从 Java 虚拟机的角度来讲,只存在以下两种不同的类加载器:启动类加载器(Bootstrap ClassLoader),使用 C++ 实现,是虚拟机自身的一部分所有其它类的加载...原创 2019-06-28 14:42:07 · 22031 阅读 · 6 评论 -
实现一个自己的ClassLoader
ClassLoader 简介 ClassLoader 在 Java 中有着非常重要的作用,它主要工作在 Class 装载的加载阶段。其主要作用是从系统外部获得 Class 二进制数据流。它是 Java 的核心组件,所有的 Class 都是由 ClassLoader 加载的,ClassLoader 负责通过将 Class 文件里的二进制数据流装载进系统,然后交给 Java 虚拟机进...原创 2019-06-28 10:39:11 · 830 阅读 · 0 评论 -
Java 四种引用类型
在 JDK 1.2 以前,Java 中的引用的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。这种定义很纯粹,但是太过于狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态,对于如何描述一些 “食之无味,弃之可惜” 的对象就显得无能为力。在 JDK 1.2 之后,Java 对引用的概念进行了扩充,将引用扩充为如下四种...原创 2019-07-01 16:47:56 · 194 阅读 · 0 评论 -
JVM垃圾回收与内存分配策略
Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存回收分配给对象的内存堆区内存结构图(JDK1.8 之后移除了永久代,GC 只需要对堆区的新生代和老年代负责)其中,Eden 区(就是伊甸园的意思,所有对象的起源,在后面介绍分配策略的时候你会更加明白为什么这么命名),From 区和 To 区是两块 Survivor 区(幸存者空间)。相关性能...原创 2019-07-01 10:03:56 · 262 阅读 · 0 评论