![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 92
家中老九
这个作者很懒,什么都没留下…
展开
-
面试之线程并发volatile关键字
作用volatile关键字主要有两个功能:1、变量的可见行2、防止指令重排序可见行如下图:Java线程工作模型Java的线程内存模型分为主内存和工作内存。主内存是所有的线程所共享的,工作内存是每个线程自己有一个,不是共享的。线程工作时将要用到的变量从主内存拷贝到自己的工作内存,然后在工作内存中进行读和写,写完之后,可能没被更新到主内存去。导致其他线程从主内存拷贝数据到自己的工作区时,拷贝的不是最新的数据。这就是内存可见性问题。而被volatile修饰的变量,在发生改变的时候会告诉其他线程原创 2020-07-07 23:04:36 · 97 阅读 · 0 评论 -
Java8 JVM内存模型
一、JDK1.8 JVM内存模型二、各区域介绍1、程序计数器指向当前线程正在执行的字节码指令的行号(地址)2、本地方法栈为虚拟机使用的Native方法服务3、虚拟机栈每个Java方法在被调用的时候都会创建一个栈帧,用来存储局部变量表(八大原始类型、封装类型)、作数栈、动态链接、方法出口4、堆几乎所有的对象实例及数组都在堆上进行分配;生明的全局变量。在jdk1.7中,符号引用(Symbols)转移到了Native Memory;字符串常量池(interned strings)转移到了Jav原创 2020-06-07 11:03:24 · 2885 阅读 · 0 评论 -
Java 位运算符
1、十进制转二进制原理:给定的数循环除以2,直到商为1或者0为止,将每一步除的结果的余数记录下来,然后反过来就得到相应的二进制。比如:9转二进制第一次除以2等于4(余数1) 第二次除以2等于2(余数0) 第三次除以2等于1(余数0) 最后余数1,得到的余数依次为1001,反过来就是1001,Java中二进制(字节码)是8位的,补齐高位000010012、二进制转十进制原理:比如9的二进制是00001001,去掉补齐的高位就是1001,从个位开始计算2的幂(个位是0,依次往后推)乘以对应位数上的原创 2020-06-06 14:45:08 · 180 阅读 · 0 评论 -
JVM性能调优
1、性能分析1.1、 CPU分析- top命令: 列出指定进程下线程的信息,会按CPU的使用占比从大到小排列。top -H -p <pid>平均负载(load average)有三个数字:63.66,58.39,57.18,分别表示过去 1 分钟、5 分钟、15 分钟机器的负载。按照经验,若数值小于 0.7*CPU 个数,则系统工作正常;若超过这个值,甚至达到 CPU 核数的四五倍,则系统的负载就明显偏高。上图负载明显过高确定好cpu使用率最高的进程之后就可以使用jstack来打印出异原创 2020-06-06 14:26:07 · 95 阅读 · 0 评论 -
一个接口的性能问题定位和分析过程
一个接口的性能问题定位和分析过程使用jprofiler分析dump文件一个实例jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令原创 2020-06-04 22:45:29 · 579 阅读 · 0 评论 -
一致性Hash
前言 伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数据库水平切分演变的例子:假设我们的系统中有一张会员表 customer_info, 我们的系统刚开始无人问津,我们在一个单个的数据库中放这张表,所有的会员记录都插入到这个数据库的这张表中,这没什么问题,是一转载 2020-05-25 11:29:41 · 469 阅读 · 0 评论 -
JDK1.8 HashMap原理实现
前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。JDK1.8版本HashMap的内部数据结构1、HashMap采用数组和链表(红黑树)的结构2、HashMap的数据插入原理计算 k 的 hash 值判断数组是否为空,为空进行初始化;不为空,通过(n - 1) & hash计算应当存放在数组中的下标 i...原创 2020-03-25 17:31:46 · 191 阅读 · 0 评论 -
深入理解Java中的AQS
ReentrantLock主要利用CAS和CLH队列来实现。支持公平锁和非公平锁,两者的实现类似CAS:Compare And Swap,比较并交换。CAS有三个参数:内存值V、预期值A、要修改的新值B。当且仅当预期值A=内部才能值V,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java底层。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI...转载 2019-07-09 17:13:01 · 109 阅读 · 0 评论 -
Java基本数据类型
1、基本数据类型大小数据类型基本类型字节空间范围值整数byte1字节(8位bit)-2^7 - 2^7-1整数short2字节(16位bit)-2^15 - 2^15-1整数int4字节(32位bit)-2^31 - 2^31-1整数long8字节(64位bit)-2^63 - 2^63-1浮点数(单精度)float4字...原创 2019-06-04 22:12:30 · 91 阅读 · 0 评论 -
JVM GC
在前文JVM运行时数据区 说过,JVM对堆内存采用分代策略。内存空间新生代:新生代的绝大部分对象有朝生熄灭的特点,存活率很低,回收效率高老年代:老年代的对象由新生代中存活多次、或者特殊原因(后面介绍)从新生代直接移来的。老年代的对象生命周期较长,垃圾回收后对象存活率较高,但回收效率很慢元数据区:垃圾回收对象存活判断添加链接描述...原创 2019-06-06 17:14:39 · 123 阅读 · 0 评论