![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 84
大小鱼鱼鱼与鱼.
太阳当空照,花儿对我笑。
展开
-
synchronized锁的优化过程
在java并发中synchronized一直是一个重要的角色,有人称它为重量级锁,但在jdk1.6之后synchronized得到了优化,引入了偏向锁和轻量级锁,避免线程上下文切换带来的耗时,所以看起来就没有那么重了。对象的组成 因synchronized锁信息都是保存在对象头部中,故而先从对象头入手...原创 2020-03-17 19:15:29 · 389 阅读 · 0 评论 -
Java内存模型与volatile不得不说的秘密
java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。 说到java内存模型,首先要说一下及计算硬件方面的知识。CPU与主内存...原创 2020-03-14 19:48:18 · 283 阅读 · 0 评论 -
Java多线程:深入理解synchronized
一、概述synchronized关键字是java应用中解决线程安全必不可少的,线程安全是并发编程中的重要关注点,造成线程不安全的诱因实质就是共享数据,以及多线程操作共享数据,为了解决多线程操作共享数据的问题,需要保证在同一时刻只有一个线程可以操作共享数据,其它线程处于等待状态,只有操作共享数据的线程执行结束,其他线程才可以进行,这种关系就是互斥锁,需要用到synchronized关键字, syn...原创 2019-12-26 18:17:13 · 283 阅读 · 1 评论 -
Java虚拟机:垃圾收集器与内存分配策略
一、对象 堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象有哪些还“存货”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。1.1 引用计数算法 判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。 客...原创 2019-12-18 16:51:47 · 160 阅读 · 0 评论 -
Java虚拟机:实战OutOfMemoryError异常
在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其它几个运行时数据区域都有发生OutOfMemoryError(OOM)一、Java堆溢出/** * @author: hs * @Date: 2019/12/11 10:25 * @Description: * -Xms30m -Xmx30m -XX:+PrintGCDetails -XX:SurvivorRatio=8...原创 2019-12-11 15:16:52 · 299 阅读 · 0 评论 -
Java虚拟机:内存模型
内存模型Java内存模型(Java Memory Model ,JMM)就是一种复核人内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。JMM的主要目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行带来的问题。可以保证并发编程场景中的原子性、可见性和有...原创 2019-12-05 18:00:19 · 245 阅读 · 0 评论 -
Java虚拟机:类加载器
类加载过程类的加载指的时将类的.class文件的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后再内存中创建一个java.lang.Class对象,用来封装类在方法区的数据结构。加载.class文件的方式:从本地系统中直接加载通过网络下载.class文件从zip、jar等归档文件中加载.class文件从专有数据库中提取.class文件将java源文件动态编译为.clas...原创 2019-11-26 16:14:40 · 195 阅读 · 0 评论 -
Java8:HashMap源码分析(实现原理)
HashMap是Java开发中常用的数据结构,了解它的内部实现有助于更好的使用它,Java8中的HashMap由三种数据结构组成:数组、链表、红黑树内部存储HashMap的内部存储是一个数组(bucket),数组的元素Node实现了是Map.Entry接口(hash, key, value, next),next非空时指向定位相同的另一个Entry,如图:内部主要特点:使用哈希表进行数...原创 2019-11-06 17:37:16 · 188 阅读 · 0 评论 -
JAVA:手动实现简单的HashMap
package com.staryea.ocmbuisidserver.pojo;/** * @des 自定义简单的HashMap */import java.util.LinkedList;public class MyMap { // 链表数字 private LinkedList[] arr = null; // 大小 int size; ...原创 2019-09-16 09:33:16 · 152 阅读 · 0 评论 -
Apache-commons:lang3.SystemUtils源码
package org.apache.commons.lang3;//源码import java.io.File;public class SystemUtils { private static final String OS_NAME_WINDOWS_PREFIX = "Windows"; private static final String USER_HOME_KE...原创 2019-06-10 21:15:22 · 766 阅读 · 0 评论 -
Apache-commons:codec编解码(Base64 | MD5)
@Testpublic void base64() throws Exception{ String str="中国合伙人"; byte[] encodeBase64 = Base64.encodeBase64(str.getBytes()); System.out.println(new String(encodeBase64)); byte[] bytes =...原创 2019-06-10 20:34:47 · 1741 阅读 · 0 评论 -
Apache-commons:collections4.CollectionUtils工具类
public static void main(String[] args) { List<Integer> in1 = Arrays.asList(1, 2, 3, 4, 4, 5); List<Integer> in2 = Arrays.asList(4, 5, 6); //集合不为空判断 boolean notEmpty = Colle...原创 2019-06-10 19:35:36 · 2920 阅读 · 0 评论 -
Spring:AnnotationUtils工具类与注解参数说明
getAnnotation: 从某个类获取某个annotationfindAnnotation: 从类或方法中查找某个annotation。isAnnotationDeclaredLocally: 验证annotation是否直接注释在类上而不是集成来的。isAnnotationInherited: 验证annotation是否继承于另一个class。getAnnotationAttri...原创 2019-06-10 17:15:46 · 9708 阅读 · 0 评论 -
String,StringBuffer,StringBuilder
String 是final修饰的类,因此不可被继承,char[] value数组是private final修饰的,所以字符串常量池中一旦存在了一个字符串便不可以修改,因String类中兵没提供setter方法,所以也不可以访问.String类中重写了equals方法,用来比较两个字符串的值是否相等.String s1=“a”;String s2=s1+“a”;String s3=“...原创 2018-12-07 23:22:37 · 102 阅读 · 0 评论 -
java排序
//选择排序 int arr []={1,14,10,15}; int min=-1; for(int i=0;i<arr.length-1;i++){ min=i; for(int j=i+1;j<arr.length;j++){ if(arr[min]<arr[j]){ min=j; } } if(min!=i){ int t...原创 2019-01-17 18:49:14 · 190 阅读 · 0 评论 -
队列的使用(BlockingQueue)
package com.staryea.jsondemo.test;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent....原创 2019-01-28 11:55:56 · 281 阅读 · 0 评论 -
内部类json模板
package com.staryea.jsondemo.test;import com.alibaba.fastjson.JSON;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.ArrayList;import java.util...原创 2019-01-28 15:12:45 · 275 阅读 · 0 评论 -
Enum枚举学习
/** * @Auther: hs * @Date: 2019/2/24 12:57 * @Description:私有构造,枚举单例 */@AllArgsConstructor(access = AccessLevel.PRIVATE)@Getterpublic enum Day { MONDAY("星期一"), TUESDAY("星期二"), WEDNE...原创 2019-02-24 15:45:33 · 164 阅读 · 0 评论 -
Java8:函数式编程(lambda)
为什么要用lambda表达式?1.java中普通命令式编程参数的传入和返回只能是值或者是对象的引用,我们无法将一个函数作为参数的方法,也无法声明返回一个函数的方法。2.由于python语言受欢迎程度呈线性增长,函数式编程也得到了业界的肯定。总结以上两点,java8中添加了一些新的特性,这是java有史以来版本改动中最大的一次,其中在保证了传统命令式编程风格的基础上,增加了函数式编程风格,la...原创 2019-03-05 00:25:19 · 251 阅读 · 0 评论 -
Java多线程:线程池的使用
以下摘自阿里开发手册原话线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors各个方法的弊端:1)newFixedThreadPool和newSingleThreadExecutor: 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。2)...原创 2019-05-12 16:13:55 · 1253 阅读 · 0 评论 -
Java8:stream Api与Collectors数据收集器
首先流是一个抽象的概念,动态的,具有方向的,代表着数据的一种状态;流是数据的渠道。因此,流代表了一个对象序列。流操作数据库,如数组或者集合。流本身不存储数据,而是移动数据,再移动过程中可能会对数据执行过滤、排序或者其他操作。然而,一般来说,流操作本身不修改数据源。例如,对流排序不会修改数据源顺序,相反,对流排序会创建一个新流,其中包含排序后的结果。流api定义了几个流接口,包含在java.ut...原创 2019-05-27 20:16:42 · 411 阅读 · 0 评论 -
Java8:新Map方法操作
如果map不是null,忽略以下方法。 List<User> userList = Lists.newArrayList(); @Before public void initTest() { List<Address> addressList = Lists.newArrayList(); addressList.add...原创 2019-05-31 15:33:06 · 2830 阅读 · 0 评论 -
书籍推荐
https://blog.csdn.net/panjin72/article/details/81078834http://blog.didispace.com/freebooks/原创 2019-06-13 12:11:42 · 131 阅读 · 0 评论 -
Apache-commons:lang3.builder包
CompareToBuilder – 用于辅助实现Comparable.compareTo(Object)方法;EqualsBuilder – 用于辅助实现Object.equals()方法;HashCodeBuilder – 用于辅助实现Object.hashCode()方法;ToStringBuilder – 用于辅助实现Object.toString()方法;ReflectionT...原创 2019-06-10 17:02:10 · 1084 阅读 · 0 评论 -
23种设计模式
一、单例模式1、饿汉式:public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return INSTANCE; ...原创 2018-10-09 19:08:09 · 127 阅读 · 0 评论