目录

hymn

忽有故人心头过,回首山河已是秋。

jvm 参数

nohup /usr/local/jdk1.8.0_111/bin/java -Ddisconf.env=online -Dlogging.level=INFO -Dloader.path=./lib -jar -Xms1000m #JVM最大可用内存 -Xmx1000m #JVM最大可用内存 -Xmn512m #年轻代大小 -Xss1024k #每个线程的堆栈大小 -XX:SurvivorRatio=8 #年轻代中Eden区与Survivor区的大小比值 2Survivor : Eden = 2 : 8 -XX:MetaspaceSize=256m #元空间大小 -XX:MaxMetaspaceSize=256m #最大元空间大小 -XX:MaxTenuringThreshold=15 #设置垃圾最大年龄 -XX:CMSInitiatingOccupancyFraction=75 #老年代占用率达到70%时触发cms gc。 -XX:+UseConcMarkSweepGC #设置年老代为并发收集 -XX:+CMSClassUnloadingEnabled #cms扫描未使用的clas....

dubbo 并发配置

并发控制 executes:每个客户端最大并发线程的配置(只有提供段) actives:每个客户端最大占用请求数 服务连接配置 accepts:提供端最大的连接数 connettions:消费端最大的连接数

Java 1.8扩容机制怎么确定当前元素在原位置还是原位置+原下标

扩容后新增的那个参与与运算的位是0还是1, 0:原位置,1:原位置加原长度 为什么? 因为扩容后,hashmap的长度变为之前的2倍,长度的位多了一位,比如之前16,是1 0000,扩容后变为32,是10 0000, 而计算key的下标是key的hash值 与(&)长度减一,假如key 的hash值是10,二进制就是1010,下标就是 1010 & 1111,扩容后就是1010 & 1 1111, 就是参与计算 多出来的那个位 是0就是原位置,是1就是原位置加原长度

Java 异常

总体上我们根据Javac对异常的处理要求,将异常类分为2类。 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try...catch...finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。 检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try...catch...finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用t....

spring事务传播机制整理

支持当前事务的情况: TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性) 不支持当前事务的情况: TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。 TransactionDefinition.PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 ....

负数 有更新!

计算机中表示正数 比如 6 :0000 0110 负数 在正数的基础上取反加一就是计算机表示负数的方式 比如 -6: 6:0000 0110 取反:1111 1001 加一:1111 1010 这就是计算机表示负数的值 怎么快速判断 计算机中表示的数是几 假如 :1111 1010 是表示的是十进制中的几 方法:设 最右边1的位置为 k ,k之前的数取反,得到:0000 0110 表示 6,所以 1111 1010 这个数表示的是 -6

线程池状态 有更新!

ThreadPoolExecutor继承了AbstractExecutorService,成员变量ctl是一个Integer的原子变量,用来记录线程池状态和线程池中线程个数,类似于ReentrantReadWriteLock使用一个变量来保存两种信息。

java 并发队列总结 有更新!

ConcurrentLinkedQueue 无界非阻塞队列,底层用单链表实现,出队和入队用cas实现。 LinkedBlockingQueue 底层用单链表实现,有界,独占锁实现出队和入队,有两个锁,takeLock和putLock takeLock:控制同时只能有一个线程可以从队头获取元素,其他线程等待 putLock:控制同时只能有一个线程可以从队尾添加元素,其他线程等待 ArrayBlockingQueue 底层数组实现,通过锁实现出队和入队,有界(可以指定,默认Integer.Max_VALUE) PriorityBlockingQueue 带有优先级的无界队列,底层通过二叉树堆实现, DelayQueue 通过 PriorityBlockingQueue来装数据,只有过期的数据才会出队。

AQS 有更新!

AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的 AQS是一个FIFO的双向队列,其内部通过节点 head和 tail记录队首和队尾元素,队列元素的类型为 Node。 其中 Node中的 thread变量用来存放进入AQS队列里面的线程; Node节点内部的 SHARED用来标记该线程是获取共享资源时被阻塞挂起后放入AQS队列的, EXCLUSIVE用来标记线程是获取独占资源时被挂起后放入AQS队列的; waitStatus记录当前线程等待状态,可以为 CANCELLED(线程被取消了)、SIGNAL(线程需要被唤醒)、CONDITION(线程在条件队列里面等待)、PROPAGATE(释放共享资源时需要通知其他节点); prev记录当前节点的前驱节点,next记录当前节点的后继节点。 在AQS中维持了一个单一的状态信息 state,可以通过 getState、setState、compareAndSetState函数修改其值。 对于 ReentrantLock的实现来说,state可以用来表示....

随笔(思考) 有更新!

随笔,随想,思考