![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
高性能编程
文章平均质量分 79
段落总是简写
一个小菜鸡
展开
-
高性能编程——BIO阻塞式网络编程
文章目录BIO编程初体验服务端客户端结果展示客户端:服务端存在的问题用浏览器访问服务端Http协议 - 请求数据包解析第一部分第二部分第三部分第四部分http响应状态码BIO -阻塞IO的含义阻塞(blocking)IO非阻塞(non-blocking)IO同步(syschronous)IO异步(asynchronous)IO总结BIO编程初体验服务端先写一段服务端代码,用于接收客户端信息:...原创 2020-02-03 13:56:51 · 652 阅读 · 0 评论 -
高性能编程——并发容器类list_set_queue
文章目录listArrayListCopyOnWriteListSetHashSetCopyOnWriteArraySetQueuelistArrayList线性表,最常用的是ArrayList,其底层是数组。这个再我一篇集合框架的文章里有详解,可以自己去看看。CopyOnWriteList相当于加了读写锁的ArrayList,适用于读多写少的场景。写锁被占用的时候,大量的读线程就会被阻...原创 2020-01-27 20:02:13 · 308 阅读 · 0 评论 -
高性能编程——并发容器类CurrentHashMap
文章目录JDK1.7版本带注释的源码1.8添加操作1.8对比1.7的优点JDK1.7版本带注释的源码/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * ...原创 2020-01-26 20:54:50 · 316 阅读 · 0 评论 -
高性能编程——不安全的容器类HashMap
文章目录HashMap带注释的源码1.7初始长度和扩容1.8红黑树HashMap带注释的源码1.7/* * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license te...原创 2020-01-26 20:03:06 · 232 阅读 · 0 评论 -
高性能编程——AQS抽象队列同步器详解
文章目录ReadWriteLock概念缓存缓存雪崩ReadWriteLock概念维护一对关联锁,一个只用于读操作,一个只用于写操作;读锁可以由多个读线程同时持有,写锁是排他的。同一时间,两把锁不能被不同线程持有。就类似如图的效果:同一时间只能持有读锁或者写锁。缓存在进入正题前先来了解一下缓存的概念,先用伪代码模拟一下Redis缓存的使用场景://实现缓存//使用数据class...原创 2020-01-26 13:17:26 · 276 阅读 · 0 评论 -
高性能编程——线程安全问题之Java锁相关(Synchronized深度解析)
文章目录Java中锁的概念自旋锁乐观锁悲观锁独享锁(写锁)共享锁(读锁)可重入锁、不可重入锁公平锁、非公平锁同步关键字synchronized认识synchronizedsynchronized的特性锁消除锁粗化Java中锁的概念其实在上一章原子性的讲解中已经提到并写过一个锁了,但是这还远远不够,Java中关于锁还是有很多东西需要学习,这里先介绍几个与锁相关的概念。自旋锁指当一个线程在获取...原创 2020-01-14 13:35:07 · 297 阅读 · 0 评论 -
高性能编程——线程安全问题之原子操作
文章目录原子性问题原子操作问题产生的原因原子性问题其实多线程就只有两个重要的问题,一个是可见性问题,另一个则是原子性问题了。本章将会着重讲原子性问题。原子操作上面说到了的原子性问题究竟是什么?先看两段代码和输出结果就知道了。public class Counter { volatile int i = 0 ; public void add(){ i++...原创 2020-01-13 11:18:20 · 2199 阅读 · 1 评论 -
高性能编程——Java系统性能调优之JVM性能篇
文章目录类加载机制类加载器Bootstrap loaderExtension Class Loaderapplication class loader查看类对应的加载器垃圾回收机制自动垃圾收集如何确定内存需要被回收不同类型内存的判断方式对象回收-引用计数对象回收-可达性分析引用类型和可达性级别引用类型可达性级别垃圾收集算法类加载机制想要了解类加载的机制,首先就要了解类的生命周期,下面的图示就是...原创 2020-01-08 14:44:05 · 769 阅读 · 0 评论 -
高性能编程——高并发网络编程之TCP/UDP协议
文章目录OSI七层网络模型低三层物理层数据链路层网络层传输层高三层会话层表示层应用层传输控制协议TCPTCP握手机制四次挥手用户数据报协议UDPUDP应该注意的几点Socket编程常用接口主要socket API及其调用过程OSI七层网络模型为了实现不同计算机商家生产的机器可以相遇通信,就需要唯一的协议来指导网络的建设,而OSI七层模型就是很有指导意义的一套模型,虽然实用性不高,但是对其他模型...原创 2020-01-07 09:45:52 · 728 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程池引用及实现原理剖析
文章目录为什么要用线程池线程是不是越多越好?线程池原理 - 概念线程池API中接口的定义和实现类为什么要用线程池在学习线程池之前首先要明白为什么要用线程池,难倒创建线程他不香吗?线程是不是越多越好?答案肯定是否定的,因为如果是的话,就没必要创建线程池了,那么为什么线程不是越多越好呢?线程在java中是一个对象,更是操作系统的资源,线程创建、销毁都需要时间。如果创建时间+销毁时间>...原创 2020-01-06 16:59:10 · 383 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之线程安全之可见性问题
文章目录Java内存模型(JMM)详解语言规范和虚拟机规范内存模型和JVM的关系多线程中的问题所见非所得可见性问题成因思考会不会是高速缓存的原因真正的罪魁祸首——CPU指令重排序JIT编译器(Just In Time Compiler)真正成因该如何解决可见性问题volatileShared Variables定义冲突线程间操作的定义对于同步的规则定义Word Tearing字节处理Java内存...原创 2020-01-06 16:58:33 · 474 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程封闭
文章目录线程封闭的概念ThreadLocal线程封闭的概念多线程访问共享可变数据时,涉及到线程间数据同步的问题。并不是所有时候都要用到共享数据,所以线程封闭概念就被提出来了。数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的技术称为线程封闭。ThreadLocalThreadLocal是Java里一种特殊变量。它是一个线程级别的变量,每个线程都有一个...原创 2020-01-02 14:50:18 · 186 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程通信
文章目录线程通信的方式文件共享网络共享变量共享线程协作-JDK API被弃用的suspend和resume死锁成因wait/notify机制详细代码park/unpark机制代码示例死锁演示伪唤醒总结线程通信的方式要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。涉及到线程之间相互通信,分为下面四类:文件共享网络共享共享变量jdk提供的线程协调API:细...原创 2020-01-02 14:27:57 · 560 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之CPU缓存和内存屏障
文章目录CPU性能优化手段——缓存缓存同步协议——MESI协议运行时指令重排两个问题解决方案内存屏障结语CPU性能优化手段——缓存我们都知道CPU是计算机的核心,也是程序所运行之处,人们为了提高程序运行的效率,CPU做了很多优化。缓存就是为了减少访问主内存的开销而使用的。缓存同步协议——MESI协议MESI规定了每个缓存都必须有一个状态位,具体如下:当使用多处理器的时候,单个CPU对缓...原创 2019-12-31 14:29:53 · 222 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之线程中止
文章目录不正确的线程中止Stop方法Destroy代码示例不正确的线程中止Stop方法中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不推荐使用DestroyJDK并没有实现该方法代码示例为什么不推荐使用stop呢?一段代码就能解答:package com.study.hc.thread.chapter1.thread;public class StopThre...原创 2019-12-31 09:54:27 · 219 阅读 · 1 评论 -
高性能编程——多线程并发编程Java基础篇之线程状态
文章目录线程状态线程间状态的转换线程状态实战线程状态线程有6个状态,在Java中通过Thread下的一个枚举类Java.lang.Thread.State可以获取,分别是:New:尚未启动的线程状态Runnable:可运行线程的线程状态Blocked:线程阻塞等待监视器锁定的线程状态,一般都是处于synchronized代码块或者在方法中被阻塞的。Waiting:等待线程的等待状态,...原创 2019-12-30 16:56:01 · 295 阅读 · 0 评论 -
高性能编程——多线程并发编程Java基础篇之Java程序运行原理
文章目录1.1.1Java程序运行原理class文件的内容JVM学习1.1.1Java程序运行原理class文件的内容class文件包含java程序运行的字节码,是数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符;文件开头是一个0xcafebabe的特殊标志,象征了咖啡宝贝(与Java图标相对应),例如下图:这文件有复杂的格式,是专门给JVM看的,人类可以借助工具...原创 2019-12-30 14:26:19 · 379 阅读 · 0 评论