- 博客(25)
- 收藏
- 关注
转载 JDK1.8如何解决伪共享问题
Java8引入了@Contented这个新的注解来减少伪共享的发生。CPU在读取数据的时候并非一次读取一个字节,而是通过缓存行来进行读取。不同的CPU缓存行的长度并非一样,一般为64个字节长度。比如有个数据类型内容如下:public class MyNode { volatile MyN...
2018-01-28 17:08:00
345
转载 GC触发条件总结
GC触发条件总结当Eden内存不够用的时候,某些情况下会尝试到Old里进行分配(比如说要分配的内存很大),如果还是没有分配成功,于是会触发一次ygc的动作,而ygc完成之后我们会再次尝试分配,如果仍不足以分配此时的内存,那会接着做一次full gc(不过此时的soft reference不会...
2018-01-26 11:18:00
375
转载 System.arrayCopy案例
System.arrayCopyjava中可以通过System.arrayCopy进行数组的拷贝。通过System.arrayCopy属于浅拷贝。方法参数说明:public static void arraycopy(Object src, int srcPos, Object dest...
2017-12-21 15:44:00
188
转载 JDK代理和CGLIB代理
java代理模式java可以分为JDK动态代理和CGLIB代理。JDK动态代理只能对实现了接口的类生成代理,而不能针对类。CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承,所以该类或方法最好不要声明成final ,final可以阻止继承和多态。CGLib...
2017-12-11 13:45:00
107
转载 ClassLoader和Class.forName区别
ClassLoader和Class.forName区别先了解一下类加载的过程加载阶段:1.通过类的权限定名加载该类的二进制字节流。2.将这个类的二进制字节流转换为方法区的运行是数据结构。3.在方法区中生成一个代表这个类的java.lang.Class对象。验证阶段:验证阶段主要...
2017-12-08 17:06:00
115
转载 String,StringBuilder,StringBuffer
String,StringBuilder,StringBuffer它们的区别是什么?String是通过被final修饰的char[]来存储字符串,不能被修改,StringBuffer是字符数组存储。String是字符串常量,每次的变更都会产生一个新的String对象复制给String引用。...
2017-12-07 19:46:00
89
转载 StampedLock读写锁改进
StampedLock简单案例。java 8对读写锁进行改进,实现读-读之间不互斥。但是仍然是悲观策略,读和写之间仍然是冲突的。StampedLock提供了一种乐观锁的读策略。使得乐观锁完全不会阻塞写线程。StampedLock内部通过自旋锁实现,并且保证锁公平,避免饥饿发生。下面是使用示...
2017-10-07 18:08:00
153
转载 ReentrantReadWriteLock读写锁
ReentrantReadWriteLock读写锁读写锁可以将读写分离,有效的减少锁竞争。通过读写锁达到读-读不互斥。读-写以及写-写互斥。如果读的次数多,写的次数少,可以发挥很好的功效。public class ReenterReadWriteLockTest { private ...
2017-10-07 14:06:00
90
转载 ReentrantLock学习
ReentrantLockReentrantLock可以实现可重入锁。可以替代synchronized。ReentrantLock更加灵活。下面是ReentrantLock使用案例:public class ReenterLockTest implements Runnable{ p...
2017-10-06 21:15:00
73
转载 java join方法介绍
join方法介绍当我们需要控制线程的执行顺序可以用Join方法。下面使用简单的使用案例。public class JoinTest { public static volatile int count = 0; public static void main(String[] args...
2017-10-06 14:55:00
113
转载 java线程中断方法
java线程中断的方法。Thread.stop()stop方法可以直接结束线程,并立即会释放掉该线程持有的锁,方法过去暴力容易造成数据不一致。目前属于废弃方法不建议直接使用。public class ThreadInteruptTest { @SuppressWarnings("dep...
2017-10-04 11:51:00
148
转载 CountDownLatch
使用案例当我们需要控制线程的执行顺序的时候,java自身提供了一个非常方便的类CountDownLatch。可以通过来实现对线程执行顺序的控制。比如有个需求:主线程要在A线程和B线程都执行完后才能向下执行。下面是简单的执行案例。如果只是简单的情况可以使用Thread.join()方法来控制。...
2017-10-03 17:46:00
90
转载 java8 Optional类详解
Optionaljava8中引入一个新的类java.util.Optional<T>。这是一个包装引用类型的一个类。java8之前调用方法的时候当我们不知道返回值是否可能为null的时候,我们要对每个结果使用前进行null检查,如果不慎对null引用进行调用就会抛出NullPoi...
2017-10-02 00:15:00
241
转载 java assert基本用法
java assert基本用法 assert简介: java assert(断言) 一般断言在开发和测试的阶段进行开启,用于检查程序的基本正确性,在VM arguments里面输入-ea就可以开启了。如果没有这个参数,assert在程序中将不起作用。 assert基本语法: 1. a...
2017-10-02 00:13:00
858
转载 ThreadLocal内存泄漏分析
ThreadLocal内存泄漏问题。ThreadLocal线程局部变量,保证每个线程都有自己独立的副本,避免线程之间的变量共享。下面我们以Page对象为例,分析一下ThreadLocal内存的结构,以及可能发生的内存泄漏问题。代码示例:public class RandomTest {...
2017-10-02 00:09:00
140
转载 java线程死锁的检测方法
#java线程死锁的检测方法Java中线程状态:新建(New)、可运行(Runnable)、等待(Wating)、超时等待(Timed_Wating)、阻塞(Blocked)、Terminated(终止)。所有状态在Thread.state枚举类中。状态转换图:当线程中互相等待对方...
2017-10-01 18:12:00
138
转载 Java 信号量 Semaphore
Java 信号量 SemaphoreJava信号量在多线程环境下被广泛使用,实现控制某个资源被同时访问的个数。semaphore.acquire()获取许可证,不能获取许的线程变成waiting状态,加入等待队列。semaphore.release()释放许可证。通过的对资源竞争程度控制...
2017-10-01 18:10:00
113
转载 单链表逆置非递归实现
##单链表逆置非递归实现##public class LinkedUtils { public static void main(String[] args) { Node head = new Node(1); Node node2 = new Node(2); Node n...
2017-10-01 18:07:00
198
转载 JVM常用参数配置
##JVM常用参数配置##JVM主要接收两种类型的标志:布尔标志和附带参数标志。布尔标志语法:-XX:+FlagName表示开启,-XX:-FlagName表示关闭。附带参数标志语法:-XX:+FlagName=param表示开启,-XX:-FlagName=param表示关闭。-se...
2017-10-01 18:06:00
157
转载 java缓存应用
缓存回收策略1.基于空间设置缓存的存储空间,超过容量限制按照一定的规则去移除。2.基于容量当缓存条数超过规定容量按照一定的规则去移除旧数据。3.基于时间(存活时间空闲时间)TTl(Time To Live):存活期,缓存数据最后更新时间到指定时间如果没有更新或创建则进行过期清除。...
2017-10-01 18:04:00
105
转载 java高效获取多线程执行结果
java高效获取多线程执行结果java创建带有返回值的任务。需要实现Callable<T>接口。实现call()方法。如果不希望有返回结果的可以通过实现Runnable接口覆盖run()方法。那如何多线程下高效的获取任务执行的结果呢。1.下面是常规获取多线程任务返回值结果的...
2017-10-01 18:03:00
126
转载 JVM 常用命令
JVM 状态查询命令整合jcmdjcmd -l参数-l表示列出所有java虚拟机jcmd 5476 help列出该虚拟机所有支持的命令jcmd 5476 Thread.print打印线程栈信息,可以用来查看JVM中当时的线程信息。(下面是部分截图)jcmd 5476 GC...
2017-10-01 17:53:00
89
转载 java内省介绍
什么是JavaBeanJavaBean就是一个符合一定规则的java类。JavaBean要含有一个公共的且无参数的构造器,内部通过getter/setter方法暴露对JavaBean字段值的操作。为了使 JavaBean 的属性名和存取方法都符合规范, Sun 在 JSR 文档中规定了属性...
2017-10-01 17:52:00
120
转载 缓存更新模式(策略)
缓存更新模式(策略)缓存是现在系统中必不可少的模块,当用户请求增多时,对数据库的压力将大大增加,通过缓存能够大大降低数据库的压力,例如对缓存命中时应用程序从cache中取数据,取到后返回。有些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,...
2017-10-01 17:50:00
236
转载 Guava堆缓存
通过Guava可以方便的实现堆缓存,Guava实现了很多的缓存失效策略,下面是使用案例。import java.util.concurrent.TimeUnit;import com.google.common.cache.CacheBuilder;import com.google....
2017-10-01 17:47:00
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人