随笔分类 -  JVM

深入Java虚拟机
摘要:CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。 目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用需求。 从名字(包含 阅读全文
posted @ 2018-11-14 17:20 _sanjun 阅读(474) 评论(0) 推荐(0)
摘要:Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 C/C++直接使用武力硬件和操作系统的内存模型,因此,有可能导致程序在一套平台上并发完全正常,而在另一 阅读全文
posted @ 2018-11-12 21:56 _sanjun 阅读(142) 评论(0) 推荐(0)
摘要:由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓冲中,让运算能快速进行,当运算结束后再从缓冲同步回内存之中,这样处理器就无须等待缓慢的内存读 阅读全文
posted @ 2018-11-12 17:38 _sanjun 阅读(345) 评论(0) 推荐(0)
摘要:虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作到放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器可以说是Java语言的一项创新,也就是Java语言流行的重要原因之一,它最初是为了满 阅读全文
posted @ 2018-11-11 17:26 _sanjun 阅读(136) 评论(0) 推荐(0)
摘要:1、加载 “加载”是“类加载”(Class Loading)过程的一个阶段。在加载阶段,虚拟机需要完成以下3件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流。 2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3)在内存中生成一个代表这个类的java.lang.Cla 阅读全文
posted @ 2018-11-09 16:38 _sanjun 阅读(210) 评论(0) 推荐(0)
摘要:1、概述 在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 在Java语言里面,类型的加载、连接和初始化过程都是在 阅读全文
posted @ 2018-11-04 23:46 _sanjun 阅读(117) 评论(0) 推荐(0)
摘要:1、概述 GC需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,需要对这些“自动化”的技术实施必要的监控和调节。 程序计数器、虚拟机栈、本地方法栈不需要过多考虑回收的问题,因为方法结束或者线程结束时 阅读全文
posted @ 2018-10-22 23:59 _sanjun 阅读(150) 评论(0) 推荐(0)
摘要:目的:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域存储的内容;第二,工作中遇到实际的内存溢出异常时,能根据异常的信息快速判断是哪个区域的内存溢出,知道什么样的代码可能会导致这些区域内存溢出,以及出现这些异常后该如何处理。 1、Java堆溢出 Java堆用于存储对象实例,只要不断地创建对 阅读全文
posted @ 2018-10-21 16:40 _sanjun 阅读(670) 评论(0) 推荐(0)
摘要:基于使用优先的原则,以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程。 1、对象的创建 划分可用空间 在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(主要讨论的对象限于普 阅读全文
posted @ 2018-10-21 13:19 _sanjun 阅读(358) 评论(0) 推荐(0)
摘要:注:有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,互不影响,独立存储,称为“线程私有” 阅读全文
posted @ 2018-10-21 10:41 _sanjun 阅读(116) 评论(0) 推荐(0)