随笔分类 - java
摘要:本文转载自深入理解JDK中的Reference原理和源码实现 前提 这篇文章主要基于JDK11的源码和最近翻看的《深入理解Java虚拟机-2nd》一书的部分内容,对JDK11中的Reference(引用)做一些总结。值得注意的是,通过笔者对比一下JDK11和JDK8对于java.lang.ref包的
阅读全文
摘要:本文转载自聊聊JMM 什么是JMM JMM (Java Memory Model )Java内存模型是一个语言级别的内存模型抽象,它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的统一的接口来提供保证内存一致性的编程能力。 Java作为一个跨平台的语言,Java内存模型作为一个中间层模型,它适
阅读全文
摘要:本文转载自聊聊CacheLine 导语 文章聊聊缓存一致性协议中我们提到过,缓存里面最小的单位是缓存行/缓存条目,但是缓存中的具体存储结构是什么样的,缓存行中有存放的是什么?在缓存中是如何寻找指定是还是还存在?本篇我们就聊聊一下Cache Line 缓存中的组构 文章中出现的缓存和Cache,指的是
阅读全文
摘要:本文转载自聊聊CPU的LOCK指令 导语 在多线程操作中,可能最经常被提起的就是数据的可见性、原子性、有序性。不管是硬件方面、软件方面都在这三方面做了很足的工作,才能保证程序的正常运行。 之前发表过一篇文章聊聊缓存一致性协议 如果感兴趣的话可以去阅读一下,里面谈到了缓存一致性的实现和处理过程,读完之
阅读全文
摘要:本文转载自聊聊内存屏障 #导语 在之前文章聊聊JMM,说到了内存屏障,内存屏障在Java语言实现一致性内存模型上起到了重要的作用,本文我们一起聊一聊内存屏障 内存屏障是什么 在cpu执行指令的过程中,对于同一个线程中没有数据依赖的指令可以重新排序优化,有数据依赖的指令按照顺序串行执行,来保证单线程程
阅读全文
摘要:本文转载自Java volatile 关键字底层实现原理解析 导语 在Java多线程并发编程中,volatile关键词扮演着重要角色,它是轻量级的synchronized,在多处理器开发中保证了共享变量的**“可见性”**。“可见性”的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的
阅读全文
摘要:本文转载自volatile关键字?MESI协议?指令重排?内存屏障?这都是啥玩意 摘要 三级缓存,MESI缓存一致性协议,指令重排,内存屏障,JMM,volatile。单拿一个出来,想必大家对这些概念应该有一定了解。但是这些东西有什么必然的联系,或者他们之间究竟有什么前世今生想必是困扰大家的一个问题
阅读全文
摘要:本文转载自聊聊缓存一致性协议 什么缓存一致问题 在谈缓存一致性协议之前我们先了解一下缓存一致性问题是什么,它是怎么出现的。 现在处理器处理能力上要远胜于主内存(DRAM),主内存执行一次内存读写操作,所需的时间可能足够处理器执行上百条的指令,为了弥补处理器与主内存处理能力之间的鸿沟,引入了高速缓(C
阅读全文
摘要:本文转载自JVM杂谈之JIT 导语 JIT技术是JVM中最重要的核心模块之一。我的课程里本来没有计划这一篇,但因为不断有朋友问起,Java到底是怎么运行的?既然Hotspot是C写的,那Java是不是可以说运行在C之上呢?为了澄清这些概念,我才想起来了加了这样一篇文章,算做番外篇吧。 Just In
阅读全文
摘要:本文转载自java 泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体
阅读全文
摘要:本文转载自Java中的逆变与协变 导语 看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> lis
阅读全文
摘要:本文转载自疯狂的String 导语 在java中字符串是我们比较常用的一个类型,字符串是不可变的,类被声明为final , 存储字符的char[] value数据也被声明为final ,我们对String真的了解么?我们看一下String是有多么的疯狂。本文中是在JDK8下面测试,不同的JDK可能会
阅读全文
摘要:本文转载自java中synchronized与Lock的异同 前言 synchronized和Lock通过互斥保障原子性,能够保护共享数据以实现线程安全,其作用包括保障原子性、可见性、有序性 常见问题 在平时聊天或者面试过程中,可能会被问到,既然已经有了synchronized了,为什么JSR166
阅读全文
摘要:本文转载自不使用的大对象为什么要手动设置null,真的有效吗? 导语 在我们开发过程中,对于大的对象使用过后,为了help gc ,我们会手动将大对象置为null,背后的原理是什么,是不是最佳的实践。 案例一 首先我们先看一段代码 package com.bk.exercise.stack; /**
阅读全文
摘要:本文转载自不使用反射如何调用某个实例对象的方法 导语 如何调用一个对象的方法?我们可以通过实例化对象直接调用、使用反射机制、通过代理对象等,本文介绍一种新的方法MethodHandle,这种方法在开发中很少会用到,但使用起来感觉很顺手。 什么是MethodHandle? MethodHandle是J
阅读全文
摘要:本文转载自JVM 字节码之 int 入栈指令(iconst、bipush、sipush、ldc) 前言 本文介绍 int 入栈指令 iconst、bipush、sipubh、Idc。 当 int 取值 -15 采用 iconst 指令,取值 -128127 采用 bipush 指令,取值 -3276
阅读全文
摘要:本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新。前几天测试小姐姐对网站进行压力测试,观察服务的CPU、内存、load、RT、QPS等各种指标。 在压测的过程中,测试小姐姐发现我们其中一个接口,在QPS上升到400以后,CPU利用率急剧升高。 在
阅读全文
摘要:本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 问题复现 线上系统突然运行缓慢,CPU飙升,甚至到100%,以及Full GC次数过多,
阅读全文
摘要:本文转载自Java线程池实现原理及其在美团业务中的实践 导语 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合
阅读全文
摘要:本文转载自深入解析String#intern 导语 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。 8种基本类型的常量池都是系统协调的,String类型的常
阅读全文

浙公网安备 33010602011771号