java
41摄氏度男
每个人的一生都是一部史诗,等着你自己书写!
可以接受失败,但不能接受放弃!
技术之路最公平也最残酷的原因是:没有捷径,需要日积月累的积累,以及对技术持久的热情;
展开
-
Cannot allocate memory 的分析及解决方法
背景拿到一台基于VMware的虚拟机,安装一个公司产品,包含各个组件(微服务springboot),内存要求较高。问题安装产品过程中,出现如下问题:问题分析 问题定位:无非就是软件安装时的问题或者服务器问题。但考虑到之前该产品已经在多台服务器、现场都进行了正常安装,优先排查问题的思路方向指向服务器上。那目前情况必须要先连上服务器...原创 2020-03-21 17:05:29 · 90064 阅读 · 8 评论 -
关于打印debug日志是否加判断日志级别的分析
一、问题由来在代码中,我们经常会看到打印debug日志的时候,会判断下当前的日志级别:到底有没有必要呢?二、答案1、如果打印的实参不含计算的,【完全没有必要】2、如果打印的实参含有计算的,【完全有必要】三、实验探究1、Log4j 源码debug()方法中,一开始就做了和isDebugEnabled()一样的事情,那是不是就不需要判断了?public...转载 2019-12-12 12:03:41 · 2330 阅读 · 0 评论 -
策略模式与工厂模式的结合使用
简介:策略模式:定义了一组算法(业务规则);封装了每个算法;这族的算法可互换代替(interchangeable)。组成: 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 具体策略角色:包装了相关的算法和行为。环境角色:持有一个策略类的引用,最终给客户端调用。实操代码:1、定义策略抽象类:2、自...原创 2019-11-28 14:55:22 · 3552 阅读 · 1 评论 -
Algorithm negotiation fail
修复升级OpenSSH版本至8.1后(7.5以后),连接不上SSH: 1、修改/etc/ssh/sshd_config配置文件,添加jdk1.6支持的加密算法,如下: KexAlgorithms +diffie-hellman-group1-sha1 2、重启服务,service sshd restart...原创 2019-11-07 10:22:42 · 380 阅读 · 0 评论 -
Java多线程编程-(18)-借ThreadLocal出现OOM内存溢出问题再谈弱引用WeakReference
https://blog.csdn.net/xlgen157387/article/details/78513735转载 2019-01-16 15:41:56 · 177 阅读 · 0 评论 -
利用guava创建MapCache
LoadingCache<String, Object> DETECTION_RULE_CACHE = CacheBuilder.newBuilder() //设置并发级别为8,并发级别是指可以同时写缓存的线程数 .concurrencyLevel(8) //设置写缓存后8秒钟过期 //....原创 2019-01-16 15:45:46 · 1069 阅读 · 0 评论 -
final关键字
https://blog.csdn.net/CSDN_bang/article/details/868510781、当用 final 修饰一个类时,表明这个类不能被继承。2、使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性...转载 2019-02-13 14:05:43 · 102 阅读 · 0 评论 -
java中的内部类总结
内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类而心脏又在人体当中,正如同是内部类在外部内当中 实例1:内部类的基本结构 1 2 3 4 ...原创 2019-02-15 10:28:16 · 107 阅读 · 0 评论 -
Java多线程编程-(17)-多线程异步调用之Future模式
https://blog.csdn.net/xlgen157387/article/details/78390642转载 2019-01-16 14:37:29 · 205 阅读 · 0 评论 -
Java多线程编程-(16)-等待/通知模式接口Condition接口深入分析
https://blog.csdn.net/xlgen157387/article/details/78383184转载 2019-01-16 14:09:32 · 131 阅读 · 0 评论 -
Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析
https://blog.csdn.net/xlgen157387/article/details/78375986转载 2019-01-16 10:22:44 · 110 阅读 · 0 评论 -
Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析
https://blog.csdn.net/xlgen157387/article/details/78298840转载 2019-01-09 15:56:10 · 201 阅读 · 0 评论 -
Java多线程编程-(8)-多图深入分析ThreadLocal原理
https://blog.csdn.net/xlgen157387/article/details/78297568转载 2019-01-09 14:35:23 · 150 阅读 · 0 评论 -
Java多线程编程-(14)-无锁CAS操作以及Java中Atomic并发包的“18罗汉”
https://blog.csdn.net/xlgen157387/article/details/78364246转载 2019-01-14 16:47:13 · 121 阅读 · 0 评论 -
深入JVM垃圾回收算法
1. 标记——清除算法(Mark-Sweep)标记——清除算法是第一种使用和比较完善的垃圾回收算法,算法分为两个过程:1、标记正所有需要回收的对象2、标记完成后清除被标记的对象。其标记的过程就是判断对象有效性,执行可达性分析的过程。其执行流程图大体如何下所示: 同样,我们也借助现实的场景进行描述。图书管里有好多人在看书,图书管理员想要收集起没有被看的书的时候,他决定让所有正在看书的人...原创 2019-02-15 14:49:20 · 168 阅读 · 0 评论 -
Thread.sleep(0)的作用是什么
触发操作系统立刻重新进行一次CPU竞争原创 2019-02-16 15:25:00 · 1830 阅读 · 1 评论 -
JVM调优
jvm调优没有一个固定模板配置说必须如何操作,它需要根据系统的情况不同对待。1、初始化内存和最大内存尽量保持一致,避免内存不够用继续扩充内存。最大内存不要超过物理内存,例如内存8g,你可以设置最大内存4g/6g但是不能超过8g否则加载类的时候没有空间会报错。2、gc/full gc频率不要太高、每次gc时间不要太长、根据系统应用来定。-Xmx1800M:设置JVM最大可用内存为1800...原创 2019-02-22 10:07:20 · 176 阅读 · 0 评论 -
java中的notify和notifyAll有什么区别?
先说两个概念:锁池和等待池锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。等待池:假设一个线程A调用了某个对象的wait()方法,线...转载 2019-03-15 16:31:11 · 197 阅读 · 0 评论 -
Kafka为什么拥有高性能?
架构层面1.利用Partition实现并行处理 Kafka中的每个Topic都包含一个或多个Partition,且它们位于不同节点。同时,Partition在物理上对应一个本地文件夹,每个Partition包含一个或多个Segment,其中包含一个数据文件与一个索引文件。Partition像一个数组,可以通过索引(offset)去访问其数据。 Kafka不仅可以实...原创 2019-02-21 11:14:33 · 1681 阅读 · 0 评论 -
GC Root 对象有哪些
JVM垃圾回收的根对象的范围有以下几种: (1)虚拟机(JVM)栈中引用对象(2)方法区中的类静态属性引用对象 (3)方法区中常量引用的对象(final 的常量值)(4)本地方法栈JNI的引用对象...原创 2019-02-26 15:51:42 · 3998 阅读 · 3 评论 -
深度解析volatile—底层实现
我们都知道,Java关键字volatile的作用1、内存可见性2、禁止指令重排序可见性是指,在多线程环境,共享变量的操作对于每个线程来说,都是内存可见的,也就是每个线程获取的volatile变量都是最新值;并且每个线程对volatile变量的修改,都直接刷新到主存。下面重点介绍指令重排序。为什么要指令重排序?为了提高程序执行的性能,编译器和执行器(处理器)通常会对指令做一些...原创 2019-02-20 16:44:30 · 177 阅读 · 0 评论 -
Java类加载过程
类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。类加载器的任务就是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例。BootstrapClassLoader、ExtClassLoader和A...原创 2019-02-20 14:32:48 · 166 阅读 · 0 评论 -
Java内存模型
定义Java内存模型并不是一件容易的事情,这个模型必须定义得足够严谨,才能让Java的并发操作不会产生歧义;但是,也必须得足够宽松,使得虚拟机的实现能有足够的自由空间去利用硬件的各种特性(寄存器、高速缓存等)来获取更好的执行速度。经过长时间的验证和修补,在JDK1.5发布后,Java内存模型就已经成熟和完善起来了。3.1 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的...原创 2019-02-19 14:23:34 · 143 阅读 · 0 评论 -
Spring中的9种设计模式汇总
1. 简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 2. 工厂方法...原创 2019-02-13 16:32:14 · 232 阅读 · 0 评论 -
finally到底是在return之前执行还是return之后执行?
https://blog.csdn.net/csdn_bang/article/details/86662998 1、finally是在return语句执行之后,return语句返回之前,finally是必执行的(当然是建立在try执行的基础上);2、finally中修饰的基本类型没有return是不影响返回结果的,有了return才会影响返回结果;3、finally中修改set、...原创 2019-02-13 14:55:13 · 5700 阅读 · 0 评论 -
在静态方法和非静态方法上加 Synchronized的区别
synchronized修饰不加static的方法,锁是加在单个对象上,不同的对象没有竞争关系;修饰加了static的方法,锁是加载类上,这个类所有的对象竞争一把锁。 Synchronzied 修饰非静态方法==》对象锁Synchronzied 修饰静态方法==》其实是类锁,因为是静态方法,它把整个类锁起来了; 1.Synchronized修饰非静态方法,实际上是对调用该方法的对象...原创 2019-02-22 15:59:04 · 746 阅读 · 0 评论 -
Java多线程编程-(13)- 关于锁优化的几点建议
https://blog.csdn.net/xlgen157387/article/details/78363616转载 2019-01-14 14:19:42 · 90 阅读 · 0 评论 -
Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析
https://blog.csdn.net/xlgen157387/article/details/78341626转载 2019-01-14 13:54:46 · 137 阅读 · 0 评论 -
Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力
https://blog.csdn.net/xlgen157387/article/details/78327228转载 2019-01-14 10:47:38 · 130 阅读 · 0 评论 -
调用 getResourceAsStream 获取类路径下的文件对应的输入流.
public class ReflectionTest { @Test public void testClassLoader() throws FileNotFoundException{ //src目录下,直接加载 InputStream in1 = null; in1 = this.getClass().getClassLoa...原创 2018-12-28 16:27:36 · 2160 阅读 · 1 评论 -
获取指定文件的绝对路径
String path = this.getClass().getClassLoader().getResource("").getPath() + "conf/test.xml";path = URLDecoder.decode(path, "utf-8");原创 2018-12-28 16:24:27 · 903 阅读 · 0 评论 -
ConditionalOnExpression
@ConditionalOnExpression("${properties.debug:true}==true")如果properties.debug获取不到,则默认为true,如果properties.debug=true才会进行相关的配置类的初始化原创 2018-12-28 14:46:15 · 1254 阅读 · 0 评论 -
spring 获取bean的几种方式
1.读取xml文件的方式,这种在初学入门的时候比较适用 。 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:tt.xml"); ApplicationContext applicationContext = new FileSystemXmlApplica...原创 2018-12-28 14:09:55 · 1052 阅读 · 0 评论 -
打包jar到本地私服
<build> <plugins> <!--<plugin>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-maven-plug原创 2018-12-19 15:38:01 · 135 阅读 · 0 评论 -
Springboot 整合activeMq,使用@jmsListener
1、编写连接工厂package com.example.test.conf;import org.apache.activemq.ActiveMQConnectionFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Confi...原创 2018-12-06 11:13:07 · 15189 阅读 · 4 评论 -
深入理解Java:注解(Annotation)--注解处理器
详细内容:https://blog.csdn.net/dd864140130/article/details/53875814如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.Anno...转载 2018-12-04 11:53:13 · 123 阅读 · 0 评论 -
深入理解Java:注解(Annotation)基本概念
什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。 Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档...转载 2018-12-04 11:06:55 · 124 阅读 · 0 评论 -
lambda与函数式——响应式Spring的道法术器
https://blog.csdn.net/jinzhencs/article/details/50748202https://blog.csdn.net/get_set/article/details/79480121 Lambda语法详解我们在此抽象一下lambda表达式的一般语法:1(Type1 param1, Type2 param2, ..., TypeN para...转载 2018-09-06 16:16:06 · 162 阅读 · 0 评论 -
JAVA内存模型分析:堆,栈,方法区。
java内存中分为好几块,本文只讲解最常见的三个java内存概念(堆,栈,方法区)以及它们之间的区别。 堆(下面文字版是我自己总结的,图片中是书面版+正式版): 1.堆中存储的是用new关键字创建的对象和数组 2.为线程所共享 3.是一片不连续的地址空间,存取速度慢,优点是栈可以动态地分配空间大小 栈: 1.在运行类的方法时JVM会在栈中为该方法创建一个栈帧栈:栈帧里是用来存放该方法中...转载 2018-09-06 14:00:42 · 252 阅读 · 0 评论 -
使用jedis操作redis
1、引入jar<redis.clients.version>2.9.0</redis.clients.version><!--redis缓存相关依赖--> <dependency> <groupId>org.springframework.data</groupId> ...原创 2018-06-29 11:39:23 · 745 阅读 · 0 评论