JVM
文章平均质量分 93
福建选手阿俊
在无人问津的地方训练,在万众瞩目的地方出现
展开
-
深入理解Java虚拟机——线程安全
文章目录1:概述2:线程安全2.1 Java语言中的线程安全2.2 线程安全实现方法1:概述并发处理的广泛应用是使得Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因对于高并发来说,首先需要保证并发的正确性,然后在此基础上实现高效,所已,我们要先从如何保证并发的正确性和如何实现线程安全讲起2:线程安全线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得原创 2021-03-13 21:55:04 · 222 阅读 · 0 评论 -
深入理解Java虚拟机——Java内存模型与线程
文章目录1:Java内存模型1.1 主内存与工作内存1.2 内存间交互操作1.3 对于volatile型变量的特殊规则1.4 对long和double型变量的特殊规则1.5 原子性,可见性,有序性2:Java与线程2.1 线程的实现2.2 Java 线程调度2.3 状态转化1:Java内存模型Java虚拟机试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都可以达到一致内存访问效果。之前的主流C/C++直接使用物理硬件和操作系统的内存原创 2021-03-11 22:34:41 · 261 阅读 · 0 评论 -
深入理解Java虚拟机——JMM介绍
JMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量( 包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:1线程解锁前,必须把共享变量的值刷新回主内存2线程加锁前,必须读取主内存的最新值到自己的工作内存3加锁解锁是同一把锁由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),工作内存是每个线程的私有数据区域,而J原创 2020-08-26 11:30:12 · 255 阅读 · 1 评论 -
Java8新特性——核心——Lambda和Stream
文章目录1:Lambda1.1:Lambda介绍1.2:为什么使用 Lambda 表达式1.3 Lambda的语法2:函数式接口2.1 函数式接口介绍2.2 Java 内置四大核心函数式接口演示3:方法引用与构造器引用3.1 方法引用3.2 构造器引用3.3 数组引用4:强大的 Stream API4.1 什么是 Stream4.2 Stream 的操作三个步骤4.2.1 创建 Stream4.2.2 中间操作4.2.2.1 中间操作——筛选与切片4.2.2.2 中间操作——映射4.2.2.3原创 2020-07-04 18:01:05 · 736 阅读 · 2 评论 -
深入理解Java虚拟机——StringTable——超级详细篇——第七章
文章目录1:String的基本特性2:String的内存分配3:String的基本操作4:字符串拼接操作4.1 拼接操作与append操作效率比较5:intern()的使用5.1 new String()到底创建几个对象5.2 关于intern()的面试难题5.3 intern的练习题6:StringTable的垃圾回收7:G1中的String去重操作1:String的基本特性String基本特性String存储结构变更2:String的内存分配在Java语 言中有8种基本数据类型和一原创 2020-06-04 23:11:31 · 553 阅读 · 0 评论 -
深入理解Java虚拟机——执行引擎——超级详细篇——第六章
文章目录1:执行引擎概述2:Java代码编译和执行过程3:机器码,指令,汇编语言4:解释器5:JIT编译器5.1 热点代码探测确定何时JIT5.1.1 方法调用计数器5.1.2 回边计数器5.2 HotSpot VM设置模式——C1,C2编译器5.3 Graal编译器与AOT编译器1:执行引擎概述执行引擎是Java虛拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执原创 2020-06-04 12:34:42 · 932 阅读 · 0 评论 -
深入理解Java虚拟机——直接内存——超级详细篇——第五章
深入理解Java虚拟机——Java虚拟机介绍深入理解Java虚拟机——类加载子系统深入理解Java虚拟机——运行时数据区和本地方法接口——超级详细篇深入理解Java虚拟机——对象在内存中的布局深入理解Java虚拟机——Java垃圾回收器——史上最烂的图文并茂结合文章目录1:直接内存介绍2:使用本地内存读取数据的测试3:直接内存的OOM与内存大小设置1:直接内存介绍不是虛拟机运行时数据区的部分,也不是《Java虚拟机规范》 中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的原创 2020-06-04 09:11:36 · 351 阅读 · 0 评论 -
深入理解Java虚拟机——对象的实例化内存布局与访问定位——超级详细篇——第四章
文章目录1:对象在内存中的布局1.1 对象的创建1.1.1 给对象分配内存1.1.2 线程安全性问题1.2 对象的内存布局1.3 深入理解对象的访问定位1:对象在内存中的布局介绍完Java虚拟机的内存区域后,我们知道了内存中放了些什么后,我们就会想更进一步知道他们(对象)是如何创建,如何布局,和如何访问?1.1 对象的创建1.1.1 给对象分配内存指针碰撞:创建一个对象放到堆内存中,...原创 2020-02-16 17:32:47 · 583 阅读 · 1 评论 -
深入理解Java虚拟机——类加载子系统——第二章
Java内存区域结构我们今天要说的就是Java内存区域结构中的类加载子系统部分文章目录1:类加载子系统作用2:类加载器ClassLoader角色3:类加载过程4:类加载器分类4.1 引导类加载器(Bootstrap ClassLoader)4.2 扩展类加载器(Extension ClassLoader )4.3 应用程序类加载器(系统类加载器,AppClassLoader )4.4 自...原创 2020-02-14 22:31:44 · 743 阅读 · 2 评论 -
深入理解Java虚拟机——Java虚拟机介绍——第一章
文章目录1:Java虚拟机的介绍2:JVM的存在位置3:JVM整体结构4:Java代码执行流程5:JVM指令集的架构模型6:JVM的生命周期7:常见的Java虚拟机7.1 Sun Classic VM7.2 Exact VM7.3 HotSpot VM1:Java虚拟机的介绍Java虚拟机的介绍1: Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Jav...原创 2020-02-14 01:30:29 · 4121 阅读 · 2 评论 -
深入理解Java虚拟机——内存泄露和内存溢出——史上最烂的图文并茂结合
内存溢出系统已经不能再分配出你所需要的空间,比如你需要100G的空间,系统只剩900G了,这就叫内存溢出内存泄露对象已经没有被应用程序使用,但是垃圾回收器没办法移除他们,因为还在被引用者原理图对于刚在上大二的我而言,以下是我遇到过的内存泄露问题,并查阅资料总结出来如何防止内存泄露?特别注意一些像HashMap、ArrayList的集合对象,它们经常会引发内存泄漏。当...原创 2020-01-23 19:46:26 · 410 阅读 · 1 评论 -
深入理解Java虚拟机——Java垃圾回收器——史上最烂的图文并茂结合——第八章
文章目录1:垃圾回收机制概述2:如何判断对象为垃圾对象?2.1 引用计数法2.2 可达性分析法3:垃圾回收算法3.1 标记清除算法3.2 复制算法3.3 标记-整理算法3.4 分代收集算法3.5 垃圾回收时的停顿现象(为什么垃圾回收频繁执行会降低程序效率?)4:垃圾回收器垃圾回收器概述4.1 Serial 垃圾回收器(串行回收器)4.2 parnew 垃圾回收器(并行回收器)4.3 Parall...原创 2020-01-23 21:57:15 · 726 阅读 · 2 评论 -
深入理解Java虚拟机——运行时数据区和本地方法接口——详细篇——第三章
前言我们学习Java的第一天开始,老师就告诉我们Java语言相比较其他语言,他有一个非常强大的地方就是内存管理,我们使用Java不需要申请内存,释放内存,这一切工作都由Java虚拟机来完成。文章目录1:Java虚拟机内存管理1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆内存1.5 方法区2:对象在内存中的布局2.1 对象的创建2.2 给对象分配内存2.3 线程安...原创 2020-01-23 21:57:04 · 1678 阅读 · 3 评论 -
深入理解Java虚拟机——JVM命令行监控工具——第十四章——下篇
文章目录1:概述2:jps:查看正在运行的Java进程2.1 基本情况2.2 jps命令格式3:jstat:查看JVM统计信息3.1 基本情况3.2 jstat命令格式4:jinfo:实时查看和修改JVM配置参数4.1 基本情况4.2 jinfo命令格式5:jmap:导出内存映像文件&内存使用情况5.1 基本情况5.2 jmap命令格式5.3 jmap的三种使用6:jhat: JDK自带堆分析工具7: jstack:打印JVM中线程快照1:概述性能诊断是软件工程师在日常工作中需要经常面对和解决的原创 2021-03-30 21:02:26 · 557 阅读 · 0 评论 -
深入理解Java虚拟机——性能监控与调优概述——第十三章——下篇
文章目录1:大厂面试题2:性能监控与调优的背景3:调优概述4:性能优化步骤4.1 (发现问题):性能监控4.2 (排查问题):性能分析4.3 (解决问题):性能调优5:性能评价/测试指标1:大厂面试题支付宝:支付宝三面: JVM性能调优都做了什么?小米:有做过JVM内存优化吗?从SQL、JVM、架构、数据库四个方面讲讲优化思路蚂蚁金服:JVM的编译优化,JVM性能调优都做了什么,JVM诊断调优工具用过哪些?二面:JVM怎样调优,堆内存、栈空间设置多少合适三面:JVM相关的分析工具使用原创 2021-03-29 22:57:17 · 278 阅读 · 0 评论 -
深入理解Java虚拟机——再谈类的加载器——第十二章——中篇
文章目录1:概述1.1 类加载器分类1.2 类加载器的必要性1.3 命名空间1.4 类加载器的基本特性2:类的加载器分类2.1 引导类加载器2.2 扩展类加载器2.3 系统类加载器2.4 用户自定义类加载器3:测试不同的类加载器4:ClassLoader源码解析4.1 ClassLoader的主要方法4.2 SourceClassLoader与URLClassLoader4.3 ExtClassLoader和AppClassLoader4.4 Class.forName()与ClassLoader.load原创 2020-10-01 00:04:35 · 1376 阅读 · 1 评论 -
深入理解Java虚拟机——类的加载过程(类的生命周期)——第十一章——中篇
文章目录1:概述2:过程一:Loading(加载)阶段2.1 加载完成操作2.2 二进制流的获取方式2.3 类模型与Class实例的位置2.4 数组类加载3:过程二:Linking(链接)阶段3.1 环节1:链接阶段之Verification(验证)3.2 环节2:链接阶段之Preparation(准备)3.3 环节3:链接阶段之Resolution(解析)4:过程三:Initialization(初始化)阶段4.1 static与final的搭配问题4.2 < clinit >()的线程安全性原创 2020-09-30 14:24:04 · 712 阅读 · 1 评论 -
深入理解Java虚拟机——字节码指令集与解析指令——第十章——中篇
文章目录1:概述2:加载与存储指令3:算术指令4:类型转化指令5:对象的创建于访问指令6:方法调用与返回指令7:操作数栈管理指令8:比较控制指令1:概述2:加载与存储指令3:算术指令4:类型转化指令5:对象的创建于访问指令6:方法调用与返回指令7:操作数栈管理指令8:比较控制指令...原创 2020-09-29 21:41:06 · 1165 阅读 · 1 评论 -
深入理解Java虚拟机——Class文件结构——第九章——中篇
深入理解Java虚拟机——Java虚拟机介绍——第一章深入理解Java虚拟机——类加载子系统——第二章深入理解Java虚拟机——运行时数据区和本地方法接口——详细篇——第三章深入理解Java虚拟机——对象的实例化内存布局与访问定位——超级详细篇——第四章深入理解Java虚拟机——直接内存——超级详细篇——第五章深入理解Java虚拟机——执行引擎——超级详细篇——第六章深入理解Java虚拟机——StringTable——超级详细篇——第七章深入理解Java虚拟机——Java垃圾回收器——史上最烂原创 2020-09-28 21:40:51 · 839 阅读 · 1 评论