随笔分类 - JAVA深入浅出原理
摘要:上周同事去听了阿里openJDK的讲座,收集整理了一下。随着Oracle 撒手,Java 8 官方支持时间持续到 2020 年 12 月;对商业用户(Commercial Users),2019 年 1 月之后不再提供免费更新。 华为openJDK特性 主要讲解了协程之间的优化概念,及性能优化讲解
阅读全文
摘要:1、为什么用HashMap? HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快HashMap可以接
阅读全文
摘要:知识回顾: 第一篇《Jvm垃圾回收器(基础篇)》主要讲述了判断对象的生死?两种基础判断对象生死的算法、引用计数法、可达性分析算法,方法区的回收。在第二篇《Jvm垃圾回收器(算法篇)》中主要介绍了垃圾回收的几种常用算法:标记-清除、复制算法、标记-整理算法、分代收集算法。那么接下来我们重点研究Jvm的
阅读全文
摘要:文档地址:https://www.sofastack.tech 简介摘要 SOFA 是蚂蚁金服自主研发的金融级分布式中间件,包含构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分
阅读全文
摘要:volatile关键字很重要的两个特性: 1、保证变量在线程间可见,对volatile变量所有的写操作都能立即反应到其他线程中,换句话说,volatile变量在各个线程中是一致的(得益于java内存模型—"先行发生原则"); 2、禁止指令的重排序优化; 所以volatile 并非原子性操作。 Ato
阅读全文
摘要:初学者很容易看错,如果没有看到spring或者JUC源码的人肯定是不太了解的。 ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进
阅读全文
摘要:Guava地址:https://github.com/google/guava 第一次接触我是在16年春github上,当时在找单机查缓存方法,google guava当初取名是因为JAVA的类库不好用,所以谷歌工程师自己开发一套,想着google出品必属精品理念,我们一起来了解一下。 guava在
阅读全文
摘要:1. 初始化 大致单步跟了下Spring IOC的初始化过程,整个脉络很庞大,初始化的过程主要就是读取XML资源,并解析,最终注册到Bean Factory中: 在完成初始化的过程后,Bean们就在BeanFactory中蓄势以待地等调用了。下面通过一个具体的例子,来详细地学习一下初始化过程,例如当
阅读全文
摘要:1.泛型接口 我们举个例子,以前来看一下JPA定义的写法: 以前的写法为(定义一个静态内部类实现): 1.8以后的写法为: 2.谓词链(讨论在Java 8中链接Predicates的不同方法): 在这个例子中,我们过滤了名称列表,只使用谓词保留以“A”开头的名称: name -> name.star
阅读全文
摘要:前言: 想提高Java开发,了解jvm是必不可少的。它让开发者了解他们的代码,jvm是如何变异与运行。深入了解jvm:会让你的代码写的高效,逐步成为大神 下面介绍jvm的基本知识 >>数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。 基本类型的变量保存原始值,即:他代表的值就是
阅读全文
摘要:http://www.cnblogs.com/smyhvae/p/4748392.htm 主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一、JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的。 二、JVM基本结构: JVM基本结构图: 《深入理
阅读全文
摘要:Java类加载器采用双亲委派模型: 1.启动类加载器:这个类加载器负责放在<JAVA_HOME>\lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库。用户无法直接使用。 2.扩展类加载器:这个类加载器由sun.misc.Launcher$AppClass
阅读全文
摘要:Class文件是以8位字节为基础单位的二进制流,各部分中间没有分隔符。遇到8位字节以上的空间数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。 Class文件采用类似C语言的伪结构体来存储,这种伪结构体只有两种数据类型:无符号数和表。无符号数以u1,u2,u4,u8四种,数字代表字节数。
阅读全文
摘要:1.类加载的时机 类从被加载到虚拟机内存开始,到卸载出内存为止,它整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using) 和 卸载(Unloading)七个
阅读全文
摘要:JVM内存分配策略 关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识: 1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。 2、我们通常认为JVM中运行时数据存储包括堆和栈。这里所提到的栈其实指的是
阅读全文
摘要:在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章、书籍和演讲来介绍我所做的工作。在整个过程中,经常对 Minor、Major、和 Full GC 事件的使用感到困惑。这也是我写这篇博客的原因,我希望能清楚地解释这其中的一些疑惑。 文章要求读者熟悉 JVM 内置
阅读全文
摘要:对象的内存分配,大方向上讲,就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中,分配规则并不是百分百固定,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。 1.对象优先在
阅读全文
摘要:一.对象的创建 1.类加载检查 普通对象的创建过程:虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。 2.分配内存 分配内存时主要注意两个问题:1.如何分
阅读全文
摘要:1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下: 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下
阅读全文