摘要: 前言 HotSpot采用的是解释器+编译器并存的架构,之前的这篇文章里面已经讲过了,本文只是把即时编译器这块再讲得具体一点而已。当然,其实本文的内容也没多大意义,90%都是概念上的东西,对于实际开发、实际解决项目里面的疑难问题并没有什么太大的帮助,只要看过就好了。 编译对象与触发条件 之前讲过,Su 阅读全文
posted @ 2020-08-03 14:52 路漫漫吾将上下而求索 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 前言 我们知道我们写的程序经过编译后成为了.class文件,.class文件中描述了类的各种信息,最终都需要加载到虚拟机之后才能运行和使用。而虚拟机如何加载这些.class文件?.class文件的信息进入到虚拟机后会发生什么变化?这些都是本文要讲的内容,文章将会讲解加载类加载的每个阶段Java虚拟机 阅读全文
posted @ 2020-08-03 14:49 路漫漫吾将上下而求索 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 类与类加载器 虚拟机设计团队把类加载阶段张的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为"类加载器"。类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限定于类加载 阅读全文
posted @ 2020-08-03 14:47 路漫漫吾将上下而求索 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 前言 定位系统问题的时候,知识、经验是基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。经常使用适当的虚拟机监控和分析的工具可以加快分析数据、定位解决问题的速度。 jps:虚拟机进程状况工具 首先约定一下运行的代码都是以下这段 1 阅读全文
posted @ 2020-08-03 14:46 路漫漫吾将上下而求索 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 前言 JVM的自动内存管理要自动化的解决两个问题:对象分配内存以及回收分配给对象的内存。对象的内存分配一般是指在堆上分配,少数情况下也可能会直接分配在老年代上,对象主要分配在新生代的Eden 区上,如果启动了本地线程分配缓存,将按线程优先在TLAB (本地线程分配缓存)上分配。分配的规则并不是百分之 阅读全文
posted @ 2020-08-03 14:44 路漫漫吾将上下而求索 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 部分商用虚拟机中,Java程序最初是通过解释器对.class文件进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁的时候,就会把这些代码认定为热点代码Hot Spot Code(这也是我们使用的虚拟机HotSpot名称的由来)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成 阅读全文
posted @ 2020-08-03 14:42 路漫漫吾将上下而求索 阅读(1165) 评论(0) 推荐(0) 编辑
摘要: 1.前言 垃圾收集器是前一章垃圾收集算法理论知识的具体实现了,不同虚拟机所提供的垃圾收集器可能会有很大差别,另外我们必须提前说明一个道理:没有最好的垃圾收集器,更加没有万能的收集器,只能选择对具体应用最合适的收集器。这也是HotSpot为什么要实现这么多收集器的原因,下面我们以HotSpot为例讲解 阅读全文
posted @ 2020-08-03 14:41 路漫漫吾将上下而求索 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 1.垃圾对象的判断 Java堆中存放着几乎所有的对象实例,垃圾收集器对堆中的对象进行回收前,要先确定这些对象是否还有用,判定对象是否为垃圾对象有如下算法: (1):引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器都为0的对象 阅读全文
posted @ 2020-08-03 14:40 路漫漫吾将上下而求索 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1.并发编程下 这两个名词都是并发编程中的概念,在并发编程的模型下的定义: 并发:是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。 并行:是多个或同时一个cpu上,每个cpu运行一个程序。 打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮 阅读全文
posted @ 2020-08-03 14:31 路漫漫吾将上下而求索 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 1.前言 在进行垃圾收集之前需要普及几个比较重要的概念。 2.内存溢出和内存泄露的概念和区别: (1):内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间可以分配,系统不能满足需求,出现了out of memory;比如申请了一个int,但是它存了long才能存下的数, 阅读全文
posted @ 2020-08-03 14:12 路漫漫吾将上下而求索 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 这里汇总一些平时用到的、看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般都要设置到10G、20G甚至还要 阅读全文
posted @ 2020-08-03 14:11 路漫漫吾将上下而求索 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1.对象创建 Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(克隆、反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此。看一下在虚拟机层面上创建对象的步骤: 对象的建立过程 图一:对象建立过程 1、类加载检查。 当JVM检测到有一条 阅读全文
posted @ 2020-08-03 13:27 路漫漫吾将上下而求索 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1.前言 上一篇我们介绍了java的内存区域结构,这一篇,模拟内存溢出的几个场景,下面一个图是总体的指导思想: 2.Java堆溢出 Java堆唯一的作用就是存储对象实例,只要保证不断创建对象并且对象不被回收,那么对象数量达到最大堆容量限制后就会产生内存溢出异常了。所以测试的时候把堆的大小固定住并且让 阅读全文
posted @ 2020-08-03 12:34 路漫漫吾将上下而求索 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 1.几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。 1、计算机存储单位 从小到大依次为位Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为2的10次方,即: 1Byte = 8bit 1K = 102 阅读全文
posted @ 2020-08-03 12:29 路漫漫吾将上下而求索 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 1.前言 最近上线了一个项目,做性能优化时又重新温习了一下Java虚拟机相关知识,随笔记录下来,转载的文章我会列出转载的地址。虽然我做不了技术的创造者,但是争取做一个好的传播者,我们不生产水~~ 2.什么是Java 经过了多年的发展,Java早已由一门单纯的计算机编程语言,演变为了一套强大的技术体系 阅读全文
posted @ 2020-08-03 12:24 路漫漫吾将上下而求索 阅读(194) 评论(0) 推荐(0) 编辑