JVM
琦小虾
抱拳会天下英豪,煮酒论成败是非。
展开
-
Lucene基本知识入门
Lucene 篇 参考地址:《Lucene介绍与使用》 1. Lucene 简介 Lucene 是一套用于全文检索和搜寻的开源程序库,提供了一个简单却强大的 API,能够做全文索引和搜寻。在 Java 开发环境里,Lucene 是一个成熟的免费开放源代码工具,它并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品。Solr 和 ElasticSearch 都是基于 Lucene 开发的企业级的搜索引擎产品。 Lucene 的 API 来实现对索引的增(创建索引)、删(删除索引)、改(修改索引)、查(搜索原创 2020-07-17 00:02:08 · 708 阅读 · 0 评论 -
JVM技术总结之七——volatile关键字
接上篇《JVM技术总结之六——JVM的锁优化》 七. volatile 关键字 参考地址:《并发关键字volatile(重排序和内存屏障)》 7.1 volatile 关键字 Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。它有两条特性: 禁止指令的重排序;保证了有序性; 当一个线程修改了内存,volatile 关键字保证它能够立即刷新到主内存中;这条特性保证了 volatile 关键字的可见性; 7.2 指令重排序 通常情况下,处理器为了提高程序运行效率.原创 2020-07-16 23:45:07 · 262 阅读 · 0 评论 -
JVM技术总结之六——JVM的锁优化
接上篇《JVM技术总结之五——JVM逃逸分析》 六. JVM 的锁优化 参考地址: 《java 中的锁 – 偏向锁、轻量级锁、自旋锁、重量级锁》 《彻底搞懂synchronized(从偏向锁到重量级锁)》 《synchronized实现原理》 在介绍 JVM 锁优化之前,首先明确几个概念,用于后续的介绍。 6.1 线程状态切换 由于需要限制不同的程序之间的访问能力,防止他们获取别的程序的内存数据,或者获取外围设备的数据,CPU 划分出两个权限等级:用户态和内核态。 内核态:CPU 可以访问内存所有.原创 2020-07-16 23:37:08 · 1228 阅读 · 1 评论 -
JVM技术总结之五——JVM逃逸分析
接上篇《JVM技术总结之四——JVM内存结构》 五. JVM 逃逸分析 参考地址:《JVM的逃逸分析》 5.1 逃逸的定义 一个对象(或变量)在方法中处理完毕返回时,返回结果可能会被其他对象引用,或者全局引用,这种现象即为逃逸。或者可以说,一个对象指针被多个线程或方法引用时,该对象指针就是逃逸状态。 public StringBuilder escapeDemo1(String a, String b) { StringBuilder stringBuilder = new StringBu.原创 2020-07-16 23:33:12 · 242 阅读 · 0 评论 -
JVM技术总结之四——JVM内存结构
接上篇《JVM技术总结之三——类加载机制》 四. JVM 的内存结构 哪些是共享的,哪些是线程私有的? Java虚拟机里堆栈分别存放什么? 4.1 JVM 栈结构 每个线程由多个栈帧构成,每个栈帧包含线程中该方法的处理信息。栈帧由四部分组成:局部变量表、操作数栈、动态链接、方法返回地址。 4.1.1 局部变量表 局部变量表包含该方法内相关的所有局部变量,包括方法内的局部变量,以及传入方法的参数。数据类型是几种基本的数据类型,以及引用类型。 4.1.2 操作数栈 操作数栈用于操作的执行,方法进行操作时,将.原创 2020-07-16 23:26:58 · 244 阅读 · 0 评论 -
JVM技术总结之三——类加载机制
接上篇《JVM技术总结之二——GC机制》 三. 类加载机制 参考地址: 《类加载机制-深入理解jvm》 《Java Class文件格式、常量池项目的类型、表的结构》 3.1 类的加载过程 Java 类的加载过程主要分为五步:加载、验证、准备、解析、初始化。其中验证、准备、解析可以合称为连接。此外,这五步的顺序并不是完全固定的,比如为了支持动态绑定,解析的过程可以放在初始化之后。类的加载过程如下图所示: 3.1.1 加载 加载过程主要做三件事情: 根据全类名获取 *.class 文件的路径,通过二.原创 2020-07-16 23:24:48 · 166 阅读 · 0 评论 -
JVM技术总结之二——GC机制
接上篇《JVM技术总结之一——JVM调优》 二. GC 机制 GC 的机制是什么?垃圾回收器的基本原理是什么?是否可以立即回收内存?怎么样主动的通知 JVM 进行垃圾回收? 2.1 GC 的目标与流程 GC 的目标,是在 GC Root 链之外的所有对象,GC Roots 是可达性分析算法的回收目标。GC Root 对象如下: 被 JVM 栈引用的所有对象; 方法区中,类静态引用的对象; 本地方法中静态引用的对象; 方法区中常量引用的对象; 可达性分析时,需要找 GC Roots 的引用链。为了保证.原创 2020-07-16 23:16:17 · 199 阅读 · 0 评论 -
JVM技术总结之一——JVM调优
一. JVM 调优 1.1 JVM 调优如何使用 笔者首先会使用到的工具: java 自带工具:JVisualVM 用于监控,jstack 查看线程状态,jmap 用于堆 dump; Memory Analyser:载入堆 dump 文件,进行分析。 在项目启动的时候,加入 -XX:+PrintGCDetails 参数,可以观察 GC 的频率。观察 GC 频率可以判断 GC 频率是否正常(主要是针对 Full GC)。如果不正常,就可以观察 GC 日志,并且针对 GC 的频率进行原因的猜测。 如果有堆原创 2020-07-16 23:14:10 · 256 阅读 · 0 评论