JDK

全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数

不羁的心 提交于 2021-02-05 09:58:16
今天,又是干货满满的一天。这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始。由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜) 全网最硬核 JVM TLAB 分析 1. 内存分配思想引入 全网最硬核 JVM TLAB 分析 2. TLAB生命周期与带来的问题思考 全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数 全网最硬核 JVM TLAB 分析 4. TLAB 基本流程全分析 全网最硬核 JVM TLAB 分析 5. TLAB 源代码全解析 全网最硬核 JVM TLAB 分析 6. TLAB 相关热门Q&A汇总 全网最硬核 JVM TLAB 分析(额外加菜) 7. TLAB 相关 JVM 日志解析 全网最硬核 JVM TLAB 分析(额外加菜) 8. 通过 JFR 监控 TLAB 6. JVM 中的期望计算 EMA 在上面提到的 TLAB 大小设计的时候,我们经常提到期望。这个期望是根据历史数据计算得出的,也就是 每次输入采样值,根据历史采样值得出最新的期望值 。不仅 TLAB 用到了这种期望计算,GC 和 JIT 等等 JVM 机制中都用到了。这里我们来看一种 TLAB 中经常用到的 EMA(Exponential Moving Average 指数平均数

内部类与静态内部类

左心房为你撑大大i 提交于 2021-02-05 05:30:17
前言   如果你是一个急性子,没什么耐性的人,可以只看下句,自己去品味理解:    内部类:就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)   静态内部类:就是我跟你没关系,自己可以完全独立存在,但是我就借你的壳用一下,来隐藏自己。   如果还不知道静态和普通成员的区别,就先学static吧。   静态成员:属于这个类,数据存放在class文件中,程序运行之前就已经存进去数据了。   普通成员:属于这个类的对象,程序运行后生成堆栈中。   先来看一下官方说法,根据Oracle官方的说法:    Terminology: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes . Non-static nested classes are called inner classes .   一个称为静态嵌套类(静态内部类),一个称为内部类。那么两者到底有什么区别呢?很多JDK源码用到了静态内部类。HashMap、ThreadLocal、AQS的sync等。那么接下来学习一下内部类吧! 内部类  

win10中安装jdk1.8

空扰寡人 提交于 2021-02-05 02:46:34
一、JDK下载 两种方法,第一种是从官网下载;第二种是拿来主义,小拿直接给你网盘地址。不过,作为java新手,最好还是学会去官网下载。 官网下载的文件才是最安全的,从不靠谱第三方下载有可能安装包有缺失或者干脆种点病毒木马神么的。再说,有可能哪天给别人装jdk或者自己升级jdk,找不到网盘地址又得回头点技能点了。 百度(或其它搜索引擎)搜“jdk 下载”,正好第一个就是1.8的下载链接。 image 1. 点击进入下载页 页面地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 目前官方刚对1.8做了一次bug升级,强烈建议使用191或者192的小版本,这里就选择8u191. image 2. 先选中上方的接受协议,再选择适合自己操作系统的包 我们这里选择最后一个windows64位的安装包,点击红框内右边的jdk-8u191-windows-x64.exe就可以下载了。 二、jdk安装 现在jdk的安装比网上各种文章简单多了,我们来动手搞定它。 1. 双击下载的exe文件,开始安装。如下图,点击下一步。 image 2. 选择jdk的安装目录,建议大家就算不使用默认路径,也放在C盘,除非你的C盘空间告急。 image 3、直接点击下一步,出现下图的告警信息。

spring cloud springcloud spring boot springboot电子商务源码

主宰稳场 提交于 2021-02-04 23:13:08
涉及平台:平台管理(包含自营店面)、商家端(PC端、手机端)、买家平台(PC端、H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 核心架构:Spring Cloud、Spring Boot、Mybatis、Redis、SFTP 前端框架:VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 核心思想:分布式、微服务、云架构、模块化、原子化、持续集成、集群部署、前后端分离、支持阿里Docker 开发模式:前后端分离、微服务开发 社交模式:VR全景虚拟现实、直播带货、短视频带货、分销分润、代跑腿配送等 JDK/数据库:JDK 1.8+/MYSQL 5.6+ 来源 来源: oschina 链接: https://my.oschina.net/u/3613013/blog/4945555

深入理解java虚拟机

纵然是瞬间 提交于 2021-02-04 17:52:58
目录:     一、运行时数据区域     二、对象创建,以及内存的分配     三、对象的内存布局     四、对象的访问定位     五、对象已死吗     六、再谈引用     七、回收方法区     八、JVM内存分代策略     九、垃圾收集算法     十、垃圾收集器     十一、class类文件的结构     十二、类加载时机     十三、类加载过程     十四、类加载器(启动类加载器、扩展类加载器、应用程序类加载器、还有自定义的加载器哦)     十五、类的实例化顺序 一、运行时数据区域 二、对象创建,以及内存的分配 1)分配策略(在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定) “指针碰撞”(Bump the Pointer):假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。 “空闲列表”(Free List):如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错

分布式Spring Cloud电子商务平台如何设计?

≡放荡痞女 提交于 2021-02-04 17:26:54
涉及平台:平台管理(包含自营店面)、商家端(PC端、手机端)、买家平台(PC端、H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 核心架构:Spring Cloud、Spring Boot、Mybatis、Redis、SFTP 前端框架:VUE、Uniapp、Bootstrap/H5/CSS3、IOS、Android、小程序 核心思想:分布式、微服务、云架构、模块化、原子化、持续集成、集群部署、前后端分离、支持阿里Docker 开发模式:前后端分离、微服务开发 社交模式:VR全景虚拟现实、直播带货、短视频带货、分销分润、代跑腿配送等 JDK/数据库:JDK 1.8+/MYSQL 5.6+ 来源 来源: oschina 链接: https://my.oschina.net/u/3613013/blog/4945283

全网最硬核 JVM TLAB 分析(额外加菜) 8. 通过 JFR 监控 TLAB

删除回忆录丶 提交于 2021-02-04 11:53:04
今天,又是干货满满的一天。这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始。由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外加菜) 全网最硬核 JVM TLAB 分析 1. 内存分配思想引入 全网最硬核 JVM TLAB 分析 2. TLAB生命周期与带来的问题思考 全网最硬核 JVM TLAB 分析 3. JVM EMA期望算法与TLAB相关JVM启动参数 全网最硬核 JVM TLAB 分析 4. TLAB 基本流程全分析 全网最硬核 JVM TLAB 分析 5. TLAB 源代码全解析 全网最硬核 JVM TLAB 分析 6. TLAB 相关热门Q&A汇总 全网最硬核 JVM TLAB 分析(额外加菜) 7. TLAB 相关 JVM 日志解析 全网最硬核 JVM TLAB 分析(额外加菜) 8. 通过 JFR 监控 TLAB 12. 监控 TLAB 慢分配与 TLAB 外分配 - JFR 相关事件解析 我们可以通过 JFR 来监控 TLAB 慢分配或者 TLAB 外分配事件。也就是 jdk.ObjectAllocationOutsideTLAB 与 jdk.ObjectAllocationInNewTLAB 这两个事件。 jdk.ObjectAllocationOutsideTLAB 和 jdk

为什么强烈推荐 Java 程序员使用 Google Guava 编程!

不羁岁月 提交于 2021-02-04 09:38:54
作者:张丰哲 www.jianshu.com/p/97778b21bd00 目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!正如标题所言,学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码! 以面向对象思想处理字符串:Joiner/Splitter/CharMatcher JDK提供的String还不够好么? 也许还不够友好,至少让我们用起来还不够爽,还得操心! 举个栗子,比如String提供的split方法,我们得关心空字符串吧,还得考虑返回的结果中存在null元素吧,只提供了前后trim的方法(如果我想对中间元素进行trim呢)。 那么,看下面的代码示例,guava让你不必在操心这些: Joiner/Splitter Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用on生成对象后在应用到String进行处理,这是可以复用的。要知道apache commons StringUtils提供的都是static method。 更加重要的是,guava提供的Joiner/Splitter是经过充分测试,它的稳定性和效率要比apache高出不少,这个你可以自行测试下~ 发现没有我们想对String做什么操作,就是生成自己定制化的Joiner

Java异步多线程编程探索之CompletableFuture

我的未来我决定 提交于 2021-02-04 08:53:45
  CompletableFuture是JDK1.8新增的一个异步执行任务类,可以发挥多核CPU的优势,也可以将任务并行执行,最后归并结果,下面是一个工具类,这个工具类使用在遍历集合处理数据或调用接口时,异步执行任务,最后归并任务,提升执行性能,具体代码如下。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.function.BiFunction; import java.util.function.Function; /** * 异步执行工具类 继承 CompletableFuture * @author yangchangkui */ public class AsyncUtil extends CompletableFuture { private static final Logger

我画了25张图展示线程池工作原理和实现原理,建议先收藏再阅读

元气小坏坏 提交于 2021-02-04 02:53:41
为什么要使用线程池 平时讨论多线程处理,大佬们必定会说使用线程池,那为什么要使用线程池?其实,这个问题可以反过来思考一下,不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过new Thread创建线程,每创建一个线程都需要在堆上分配内存空间,同时需要分配虚拟机栈、本地方法栈、程序计数器等线程私有的内存空间,当这个线程对象被可达性分析算法标记为不可用时被GC回收,这样频繁的创建和回收需要大量的额外开销。再者说,JVM的内存资源是有限的,如果系统中大量的创建线程对象,JVM很可能直接抛出OutOfMemoryError异常,还有大量的线程去竞争CPU会产生其他的性能开销,更多的线程反而会降低性能,所以必须要限制线程数。 既然不使用线程池有那么多问题,我们来看一下使用线程池有哪些好处: 使用线程池可以复用池中的线程,不需要每次都创建新线程,减少创建和销毁线程的开销; 同时,线程池具有队列缓冲策略、拒绝机制和动态管理线程个数,特定的线程池还具有定时执行、周期执行功能,比较重要的一点是线程池可实现线程环境的隔离,例如分别定义支付功能相关线程池和优惠券功能相关线程池,当其中一个运行有问题时不会影响另一个。 如何构造一个线程池对象 本文内容我们只聊线程池ThreadPoolExecutor,查看它的源码会发现它继承了AbstractExecutorService抽象类