自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 ThreadLocal详解

ThreadLocal简介ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法。ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。先上代码public class ThreadLocalTest2 { //(1)创建ThreadLocal变量 public static ThreadL

2020-05-27 22:41:54 197

原创 JAVA堆溢出

前言:看到学校课程q群里面有个同学说遇到oom问题怎么办,然后有一个同学给出了分析dump文件,这让我回想当时看深入理解jvm这本书的时候也看到了相关的例子,不过当时没有跟着操作下去。现在来补一补实现内存泄漏–java堆溢出配置vm参数-Xms20m 堆的最小值-Xmx20m 堆的最大值 避免堆自动扩展-XX:+HeapDumpOnOutOfMemoryError 发生堆溢出的时候生成dump文件以便与后面分析java代码:// vm args:-Xms20m -Xmx20m -XX

2020-05-27 19:53:36 276

原创 单例模式双重检测锁详解以及为何双重检测

前言:在了解完volatile关键字之后,再仔细思考了单例模式的双重检测,发现以前挺多东西还没懂的。DCL(Double Check Lock)public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { //第一次检测 if (uniqueInstance == null

2020-05-22 11:49:55 4247 4

原创 线程安全与锁优化

前言:唏唏唏嘘嘘,终于看完了《深入理解jvm》这本书,虽然看的是跳着看的,部分性能调优方面并没有看,弥补了很多重要的知识,虽然写的博客都是根据书本摘抄而来带上一些个人的体会,但张家辉话斋:你最紧要记得自己为咩上台。没计,既然选择了这条路,点都要顶落去!线程安全与锁优化线程安全的实现方式:​ 同步是指在多线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用。1.互斥同步互斥同步是一种常见并发正确性保障手段。互斥时实现同步的一种手段,临界区、互斥量、信号量都是主要互斥的实现方式。互斥同步

2020-05-21 22:44:18 292

原创 JAVA内存模型与线程(二)

JAVA线程调度协同式线程调度线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另外一个线程上。优点:实现简单。缺点:执行时间不可控制。抢占式线程调度每个线程由系统分配执行时间,线程的切换不由线程本身决定。Java使用的就是这种线程调度方式。在这种实现线程调度的方式下,线程的执行时间是系统可控的,不会有一个线程导致整个进程阻塞的问题。Java提供10个级别的线程优先级设置,来让某个线程可以分配多一点的执行时间,不过Java线程是被映射到系统的原生线程

2020-05-21 14:30:04 133

原创 JAVA内存模型与线程(一)

前言:《深入理解jvm》差不多看完了重点的部分,揭秘下下一本书是《java并发艺术》,继续冲冲冲。JAVA内存模型(JMM)Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 C/C++等则直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台上内存模型的差异而导致程序的移植性比较差。Java内存模型必须定义得足够严谨,才能让Java的并发

2020-05-20 10:50:47 241

原创 双亲委派模型的破坏(JDBC例子)

双亲委派模型的破坏双亲委托模型并不是一个强制性的约束模型,而是java设计者推荐给开发者的泪加载器实现方式。但是双亲委托模型存在着缺陷,它虽然解决了各个类加载器的基础类的统一问题,基础被称为基础,就是因为他们总是被用户代码调用,但是如果基础类又要调用回用户代码呢?那么在就会使用基础类的类加载器(启动类加载器)去加载用户的代码,而启动类加载器是加载java_home\lib目录下的。而用户代码都是保存在classpath下,根本就不可能加载到啊=。=其中这个方面最典型的就是jdbc对于双亲委派模型的破坏了。

2020-05-17 10:56:23 1956 1

原创 虚拟机类加载机制

前言:​ 虚拟机并没有约束一定是本地文件才能进行加载,网络文件也是可以的,也没有约束必须是Java文件,一切遵守虚拟机解析规则的文件都能被加载,Java对应的就是Class字节码文件了。​ 不同于其他语言,在编译时就需要进行连接,Java语言中,类型的加载,连接和初始化都是在程序运行期间完成的,这会带来一定的开销,但是会为Java提供高度的灵活性。比如编写一个面向接口的程序,可以在运行时再指定其实际的实现类。虚拟机类加载机制​ 类从被加载到虚拟机内存开始,到卸载处内存,它的整个生命周期包括:卸载、验

2020-05-16 18:43:31 186

原创 垃圾收集器与内存分配策略(二)

前言:续更《深入理解jvm》,本来昨晚就可以出来的这篇,偷懒了=。=,keep going!!!垃圾收集器垃圾回收器是内存回收的具体实现。两个收集器间有连线,表明它们可以搭配使用:Serial/Serial OldSerial/CMSParNew/Serial OldParNew/CMSParallel Scavenge/Serial OldParallel Scavenge/Parallel OldG1其中Serial Old作为CMS出现"Concurrent Mode F

2020-05-15 21:33:38 204

原创 垃圾收集器与内存分配策略(一)

前言:好像蛮久没有更新《深入理解jvm》这本书了,又回来填坑了。垃圾收集器与内存分配策略。程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭。这几个区域的内存分配和回收都具备确定性,在这几个区域基本不需要考虑回收问题。因为方法结束或者线程结束,内存自然就回收了。而java堆和方法区则不一样。方法区存放类信息,一个接口中的多个实现类需要的内存不一样,并且只有在程序运行期间才知道会创建哪些对象。这部分内存的分配和回收都是动态的,所以垃圾回收器所关注的就是java堆和方法区。如何判断对象已死

2020-05-14 18:03:06 206

原创 Spring-Aop

前言:前面我们介绍了Spring的IOC容器,接下来,本篇要讲述的是Spring中另外一个常用的模块AOP。AOP简介AOP(面向切面编程)是对OOP中遇到的一些问题的补充,是OOP的扩展,在不改变原有代码的情况下增加新的功能,比如我们常见的日志功能,权限,异常处理,缓存等公共业务(即与软件的开发业务没有关联)。AOP概念Joinpoint(连接点):所谓连接点是指那些可被拦截到的点。在Spring中,这些点指的是方法,因为Spring只支持方法类型的连接点。Pointcut(切入点):

2020-05-12 19:13:15 156

原创 JDK动态代理详解

前言:最近在看Spring aop然后了解到了动态代理=。=,发现自己以前的认识还是停留在应用之上,这里跟着网上的大佬看了看源码,豁然开朗,特别是对于《head first 设计模式》里面的那一副动态代理的uml图。动态代理动态代理,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。 比如说,想要在每个代理的方法前都加上一个处理方法:开撸定义Hel

2020-05-10 17:19:45 377

原创 Spring的IoC容器

前言:本内容参考与《spring揭秘》一本挺老的书了,不过讲得知识比较透彻,顺着它的节奏只看比较有用的部分,还是蛮不错的。IoC的基本概念注意:这里指的不是spring的ioc容器,而是ioc的概念。IoC(Inversion of Control) 控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injec...

2020-05-08 14:54:29 154

原创 运输层(三)TCP协议

前言:来源于《计算机网络自顶向下方法》,终于来到了TCP协议,TCP协议也是面试中问的最多的知识点之一了。面向连接的运输:tcptcp被称为是面向连接的。这是因为一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互握手。即他们必须相互发送某些预备报文,以建立确保数据传输的参数。作为tcp连接建立的一部分。连接双方都将初始化与tcp连接相关的许多tcp状态变量。tcp连接...

2020-05-05 21:25:47 578

原创 运输层(三)流水线可靠数据传输协议、回退N步、选择重传

前言:来源于《计算机网络自顶向下方法》,承接上回可靠数据传输的原理,rdt3.0是一个功能正确的协议,但是无论如何他都是一个停等协议,需要等待接收方回应后,才能进行下一个分组的发送,所以它的性能不会特别的好。下面来介绍如何解决呢?流水线可靠数据传输协议这种特殊的性能问题的一个简单解决方法是:不以停等方式运行,允许发送方发送多个分组而无需等待确认。此技术成为流水线。必须增加序号的范围,因为...

2020-05-05 15:39:29 1358

原创 运输层(二)可靠数据传输原理

前言:来源于《计算机网络自顶向下方法》,承接上回UDP协议,不可靠的数据传输协议,这回来到了可靠数据传输协议,意味着来到了众所周知的TCP协议了,但是没这么快,先了解一下可靠数据传输原理。其实是因为篇幅太长=。= 跟tcp分开两篇写了可靠数据传输原理经完全可靠信道的可靠数据传输:rdt1.0它基于完全可信的信道来传输数据,传输的过程中不会出现比特错误或者丢包,在这个简单的协议中,一个单元数...

2020-05-04 00:53:13 787

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除