关闭

[置顶] CyclicBarrier核心代码dowait()方法分析(底层实现机制)

引言:     相信大家对CyclicBarrier并不陌生,当一个线程调用了CyclicBarrier的await方法时,线程阻塞,直到指定数量的线程都执行完await方法后才唤醒所有线程。那么CyclicBarrier的代码底层是如何实现的呢?它和CountDownLatch有什么区别呢?     很显然,CyclicBarrier底层是使用ReentrantLock中的get...
阅读(22) 评论(0)

[置顶] JVM调优总结(含tomcat调优配置)

JVM参数     -     标准参数(所有jvm都支持)     -X  非标准参数(不同jvm不同) -    XX 不稳定参数(下一版本可能取消) JVM中的垃圾收集器     Serial Collector单线程串行执行GC(效率高,但吞吐量小)     Parallel Collector多线程并行GC(默认,效率高,吞吐量...
阅读(39) 评论(0)

[置顶] 关于JVM对象分配的小实验

首先来看看JVM虚拟机对于对象的空间分配有哪几种方式: 栈上分配(JVM默认开启栈上优化) 线程私有、小对象(方法结束栈清空不需要垃圾收集) 无逃逸(方法结束,对象消失。如果仍然有其它对象持有它的引用,说明逃逸了(作用域逃出了方法)) 1-XX:+UseTLAB2-XX:+DoEscapeAnalysis   //使用逃逸分析---可以在栈上分配对象(不使用...
阅读(66) 评论(0)

[置顶] Jvm内部锁机制总结

一、线程安全和对象头Mark 每个对象都有一个对象头标记Mark(32位) Mark描述对象hash、锁信息、垃圾回收标记、年龄 二、锁的分类 偏向锁:(只在单线程有效) --------- 偏心锁,锁会偏向让当前已经持有锁的线程持有 --------- Mark中:标记为偏向,写入线程ID --------- 只要没有竞争,获得偏向锁的线程将...
阅读(46) 评论(0)

[置顶] 从一个 NullPointerException 探究 Java 的自动装箱拆箱机制

转载自知乎专栏:https://zhuanlan.zhihu.com/p/28645185 作者:mzlogin 前天遇到了一个 NullPointerException,触发的代码类似下面这样: public class Test { public static long test(long value) { return value; ...
阅读(64) 评论(0)

[置顶] SQL范式优化和反范式优化

1、范式优化     主要满足第三范式(数据冗余、插入异常、删除异常、传递依赖)     什么是第三范式?数据表中不存在字段的传递依赖,也就不会产生数据冗余、插入异常、删除异常。     优化:拆分表(1拆3),一张具有传递依赖的表(商品,商品分类,分类描述),拆分成 商品表(主表),商品分类+分类描述表(依赖关系表),商品+商品分类表(关联关系表)。 ...
阅读(47) 评论(0)

[置顶] SQL优化、索引优化

一、发现哪些SQL语句有性能问题 开启MySQL慢查询日志对SQL语句进行监控 1   show variables like 'slow_query_log'; -- 查看是否开启慢查询日志2    set global slow_query_log = on; -- 开启慢查询日志3    set global log_queries_not_using_indexes ...
阅读(64) 评论(0)

[置顶] 【整理】JavaWeb开发的高并发优化思路

一、瓶颈分析 用户高并发场景下(几万级别的QPS) 可能出现的瓶颈分析:     Java虚拟机访问内存:每秒大约1亿次内存读写(不是瓶颈)     MySQL数据库IO:每秒大约4万次读写(不是瓶颈)     网络延迟(毫秒级)+JVM的GC产生全局暂停(毫秒级)+MySQL行级锁(可能是瓶颈) 二、多用户对数据库中同一行数据抢占修改 ...
阅读(85) 评论(0)

[置顶] GC参数

串行回收器: -- 古老、稳定、效率高、单线程回收 -- 可能产生较长停顿 -- 开启使用:-XX:+UseSerialGC -- 使用场所:新生代(复制算法)、老年代(标记-压缩) 并行回收器: -- 多线程(不一定快,单核CPU不会变快,切换线程上下文需要时间) -- 标记-压缩算法 -- 开启使用:     新生代并行收集器 ...
阅读(36) 评论(0)

[置顶] GC算法和种类

GC垃圾回收的对象:堆空间和永久区 GC算法分类: 引用计数法 -- 老算法(Java不使用) -- 用于python、COM -- 增加一个引用,引用数加一,引用消失,引用数减一,当引用变为0时GC回收 -- 缺点:引用增加减少伴随着加减法,影响性能。循环引用的问题难处理。 循环引用的例子: ...
阅读(45) 评论(0)

[置顶] JVM调优---常用JVM配置参数

一、Trace跟踪参数(跟踪GC、类、变量的内存变化情况) 打开GC跟踪日志(每次执行GC的信息都能打印,获得执行时间,空间大小): -verbose:gc 或 -XX:+printGC 或 -XX:+printGCDetails 类加载监控:(监控类加载的顺序) -XX:+TraceClassLoading 二、堆的分频参数 -Xm...
阅读(39) 评论(0)

[置顶] Lock接口与读写锁(lock 和 synchronized 的比较)

出现:JDK1.5 实现类: ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock 主要方法: lock() unlock() 使用: TestLock.java public class TestLock implement Runnable{ ReentrantLoc...
阅读(41) 评论(0)

[置顶] Spring事务管理详解

事务的四个特性:A原子性 D持久性 I隔离性 C一致性 隔离级别:Read-Uncommited(读未提交的一行数据:脏读、不可重复读、幻读)                    Read-Commited(读已提交的一行数据:不可重复读、幻读)                    Read-Repeatable(可重复读已提交的一行数据:幻读)----MySQL...
阅读(199) 评论(0)

Spring5源码解析-Spring中的Context loader

原文:https://zhuanlan.zhihu.com/p/29375083 Spring5源码解析-Spring中的Context loader 我们已经知道,应用程序上下文是Spring管理的bean所在的容器。但是我们依然要问一个问题:这个上下文是如何创建的?那么在这篇文章中我们来探讨这个问题。 在第一部分中,会说下在Spring的应用程序上下文中所谓的...
阅读(29) 评论(0)

MySQL优化实例(详细)

一、打开MySQL,输入show status命令查看数据库状态  主要查看当前连接数、当前运行的线程数、总共进行的查询数。 二、使用数据统计工具awk(Linux系统) 1awk '{printf("%s\n",$0)}' a.txt   //按行打印文件a.txt2    正则表达式+处理方式+文件名3    4mysqladmin -ur...
阅读(30) 评论(0)

RESTful API设计规范

原文: https://muyinchen.github.io/2016/12/13/%E8%B7%9F%E7%9D%80%20Github%20%E5%AD%A6%E4%B9%A0%20Restful%20HTTP%20API%20%E8%AE%BE%E8%AE%A1/ 如何更好的设计RESTful API 当您的数据模型已开始稳定,您可以为您的网络应用程序创建公共API。...
阅读(93) 评论(0)

JDBC数据库连接池实现原理(手动实现)

一、普通的数据库连接     如下图所示,个用户获取数据库数据都要单独建立一个jdbc连接,当用户获取数据完成后再将连接释放,可见对cpu的资源消耗很大。  二、建立数据库连接池     数据库连接池创建后,每次获取数据库数据不需要另外建立连接,而是从连接池里拿出连接进行数据交互  三、手动实现连接池 核心:使用线程安全...
阅读(49) 评论(0)

Nginx反向代理服务器实现负载均衡

Nginx是一款轻量级的WEB服务器/反向代理服务器 一、什么是反向代理?     要理解反向代理,首先先看看什么是正向代理:例如我们平常使用VPN翻墙访问外网,就是通过正向代理的服务器(代理了海外某台服务器)访问外网。                                                 用户正向代理发送请求       下面看看反向代理的例子...
阅读(24) 评论(0)

MySQL主从复制

1.从linux到linux的主从复制: http://369369.blog.51cto.com/319630/790921/ 2.从windows(主)到linux(从)的主从复制: mysql主从配置,是在如下环境测试的:   主数据库所在的操作系统:win10   主数据库的版本:5.0   主数据库的ip地址:192.168.1.111...
阅读(33) 评论(0)

常见IO模型

一、常见IO模型: (1)同步阻塞IO:服务端阻塞等待客户端发送请求 (2)同步非阻塞IO:服务端采用轮询的方式处理客户端请求 (3)多路复用IO:Reator设计模式(Java中的selector和epoll) (4)异步IO:Proactor设计模式 二、同步和异步的区别(用户线程和CPU交互方式): (1)同步(调用者主动等待调用结果):用户发起IO请求后要等待或轮询CP...
阅读(30) 评论(0)

【转载】为什么说Java匿名内部类是残缺的闭包

前言 我们先来看一道很简单的小题: public class AnonymousDemo1 { public static void main(String args[]) { new AnonymousDemo1().play(); } private void play() { Dog dog = new D...
阅读(25) 评论(0)

JDK7与JDK8中HashMap的区别

关于JDK7中的HashMap源码分析可移步:http://blog.csdn.net/qq_17305249/article/details/76877193         总的来说,JDK7中的hashMap底层采用了数组+链表的数据结构实现数据存储,随着存储数据量的增大,Hash碰撞会越来越频繁。也就意味着链表会越来越长,查找效率不断降低。         JDK8的出现解决了...
阅读(22) 评论(0)

Java线程池ThreadPoolExecutor的execute()原理

从线程提交任务的submit方法说起         众所周知,Java的线程池底层是使用工作队列+阻塞队列来实现的。 当工作队列(workQueue)任务数大于线程池的最大线程数时,任务阻塞,被放入一个阻塞队列(blockingQueue)中。         那么,在任务提交到线程开始工作这段时间里发生了什么呢?         下面是submit方法的源码,对Runn...
阅读(27) 评论(0)

Java线程池及其底层源码实现分析

相关类: Executors ExecutorService Callable ThreadPool Future 接口: Executor Executor接口的使用: 1public class TestExecutor implements Executor{2    @Override3    public void...
阅读(37) 评论(0)

运用ForkJoin多线程框架实现归并排序

一、普通归并排序 1public class MergeSort {23    /**4     * 原地归并排序(每次只将数组分为大和小两部分,并不是完全排序完成。需要递归)5     *6     * @param arr7     * @param lo8     * @param mid9     * @param hi10     */11    public void m...
阅读(36) 评论(0)
75条 共5页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:3934次
    • 积分:719
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条