Java
大林-Java
专注于互联网技术IT,Java架构,数据库及数据仓库,缓存,消息,分布式,大数据
展开
-
JVM&垃圾回收机制
1垃圾回收算法?根对象(java栈, 静态变量, 寄存器.典型的是Main函数)1. 引用计数(Reference Counting)比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。问题:没办法解决循环引用问题。比如:对象A有一个引用指向B对象,B也有一个引用指向原创 2014-02-17 16:14:31 · 1035 阅读 · 0 评论 -
java对象内存结构
public class Student {privateStringname;privateinthigh;privateIntegerage;privatelongjj;privateLongweight;privateBigDecimalincome;}System.out.println(VMSupport.vmDetails()转载 2015-08-19 16:12:08 · 408 阅读 · 0 评论 -
spring中获取request对象
1.通过注解获取(很简单,推荐):public class Hello {@Autowired HttpServletRequest request; //这里可以获取到request}2.在web.xml中配置一个监听: org.springframework.web.context.request.Reques转载 2015-09-07 14:12:30 · 523 阅读 · 0 评论 -
ThreadPoolExecuter 原理机制
当调用 execute() 方法添加一个任务时,线程池会做如下判断:a. 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务;b. 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列。c. 如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建线程运行这个任务;d. 如果队列满了原创 2015-11-21 13:05:51 · 2983 阅读 · 0 评论 -
内核空间与用户空间
内核空间与用户空间内核空间主要是指操作系统运行时所使用的用于程序调度、虚拟内存的使用或者连接硬件资源等的程序逻辑。为何需要内存空间和用户空间的划分呢?很显然和前面所说的每个进程都独立使用属于自己的内存一样,为了保证操作系统的稳定性,运行在操作系统中的用户程序不能访问操作系统所使用的内存空间。这也是从安全性上考虑的,如访问硬件资源只能由操作系统来发起,用户程序不允许直接访问硬件资源。如果原创 2016-03-01 15:20:03 · 2867 阅读 · 1 评论 -
秒杀
0 系列目录秒杀系统架构秒杀系统架构分析与实战1 秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2 秒杀技术挑战假设转载 2016-03-16 19:11:48 · 1058 阅读 · 0 评论 -
事务小结
事务1.XA(有一个单点协调事务管理器) XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信原创 2016-03-11 16:58:36 · 432 阅读 · 0 评论 -
code玩玩
public class recursive { /** * 倒叙递归 * @param args */ public static void main(String[] args) { String str = "I am student"; String[] s = str.split(" "); reverse(s,0); } public static vo原创 2016-03-24 18:05:21 · 385 阅读 · 0 评论 -
强制要求JVM始终抛出含堆栈的异常(-XX:-OmitStackTraceInFastThrow)
异常没有打印栈信息OmitStackTraceInFastThrow, jdk 1.6开始,默认server模式下开启了这个参数,意为当jvm检测到程序在重复抛一个异常,在执行若干次后会将异常吞掉,这里的若干次在jdk1.7测得是20707。即执行20707次后,stackTrace 长度会为0。有时这不利于我们排错,通过指定OmitStackTraceInFastThrow,可禁用这功能。转载 2016-12-22 23:00:53 · 2993 阅读 · 2 评论 -
Retry重试机制
业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作。这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果;第二步拿到第一步结果或者捕捉异常,如果出现错误或异常实现重试上传逻辑,否则继续逻辑操作。解决方案演化 这个问题的技术点在于能够触发重试,以及重试情况下逻辑有效执行转载 2016-12-25 18:53:36 · 27628 阅读 · 2 评论 -
JVM GC 垃圾回收算法图解
前面在Java垃圾收集算法中讲过垃圾收集算法中的分代收集器,今天看了一个视频发现里面将的也很不错,所以决定再总结一下。我们知道,在分代收集算法中堆空间被分为新生代和老年代。因为新生代中对象的存活率比较低,所以一般采用复制算法,老年代的存活率一般比较高,一般使用”标记-清理”或者”标记-整理”算法进行回收。上面的这个图已经很清楚的将堆的分区展现出来了。转载 2017-02-16 15:47:52 · 1885 阅读 · 0 评论 -
Dubbo请求响应解析
Dubbo中服务消费者和服务提供者之间的请求和响应过程 发表于 2017-03-21 23:58:13 | 分类于 dubbo | 服务提供者初始化完成之后,对外暴露Exporter。服务消费者初始化完成之后,得到的是Proxy代理,方法调用的时候就是调用代理。服务消费者经过初始化之后,得到的是一个动态代理类,InvokerInvocationHandler,包含MockCl转载 2017-04-10 16:02:13 · 1263 阅读 · 0 评论 -
JAVA IO 以及 NIO 理解
转载:http://www.cnblogs.com/hapjin/p/5736188.html由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍。IO,其实意味着:数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如,用户程序发起读操作,导致“ syscall read ”转载 2017-05-25 15:39:45 · 809 阅读 · 1 评论 -
J.U.C之AQS:同步状态的获取与释放
此篇博客所有源码均来自JDK 1.8在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步,主要是分为三类:独占式获取和释放同步状态、共享式获取和释放同步状态、查询同步队列中的等待线程情况。转载 2017-05-16 17:58:52 · 515 阅读 · 0 评论 -
CAS:Compare And Swap 无锁
CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。import java.lang.reflect.Field;import sun.misc.Unsafe;public class UnsafeTest{ private static Unsafe unsafe;原创 2015-08-19 14:32:40 · 464 阅读 · 0 评论 -
springMVC 笔记
springmvc工作流程:1 用户请求 如 /user.xhtml2 DispatchServlet拦截,web.xml中配置 *.xhtml 被DispatchServlet拦截3 DispatchServlet 通过handlerMaping检查 该请求匹配的controller4 执行Controller完毕后,如果返回字符串viewResolver包装成相应对象,如原创 2015-08-16 18:49:07 · 431 阅读 · 0 评论 -
Eden&Survivor
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会转载 2015-06-10 18:08:17 · 2384 阅读 · 1 评论 -
NIO机制深入及代码示例
NIO:将通道绑定端口,并且将通道注册到selector并且监听特定事件与外围设备数据通信需要channel通道,如像外部输出数据,先将数据写入缓冲区通过通道输出。如果从外部读取数据,需要通过通道channel读取到缓冲区,然后从缓冲区数据获取处理。NIO底层工作机制:Select 模型 的底层实现可以通过服务提供者配置,支持的方式有select、poll、epo原创 2014-02-17 20:34:37 · 914 阅读 · 0 评论 -
Java线程集合类ConcurrentHashMap&CopyOnWriteArrayList 深入
一:(阻塞队列)BlockingQueue(子类:常用LinkedBlockingQueue和ArrayBlockingQueue)private BlockingQueue entryQueue = new LinkedBlockingQueue();put( ) take( ) --阻塞方法,put当队列数据满会阻塞,take当队列空阻塞等待数据offer 添加一个元素原创 2014-02-17 20:28:21 · 925 阅读 · 0 评论 -
JVM垃圾回收
理解JAVA垃圾回收的好处是什么?满足求知欲是一方面,编写更好的JAVA应用是另外一方面。作为一家之言,我坚信理解了垃圾回收可以做更好的JAVA程序员。如果一个人对垃圾回收过程感兴趣,那表明他在应用程序开发领域有相当程度的经验。如果一个人在思考如何选择正确的垃圾回收算法,那意味着他对应用程序的特性完全了解。当然,不能一概而论。不过,相信很少人会不认为理解垃圾回收是做一个好的JAVA开发的前提。转载 2014-03-27 17:09:13 · 651 阅读 · 0 评论 -
ReentrantReadWriteLock & ReentrantLock & Synchronized 区别
1 ReentrantReadWriteLock :(读写锁、写写锁互斥,读读锁共享)2 ReentrantLock :(可轮询的、定时的、可中断 lock() unlock())结合Condition将线程放入相应阻塞队列,比较灵活 Condition notFull = lock.newCondition();3 Synchronized (单一对象锁监视器) 只能单一线程阻塞原创 2014-04-23 17:26:59 · 1713 阅读 · 0 评论 -
jvisualvm监测JVM
我有一个程序,里面有大量的synchronized关键字。我怀疑它们导致的多线程竞争影响了程序的性能。但不知道如何去检测,总不能只凭自己的猜测就去修改它们,万一改到最后发现不是它们的问题,岂不浪费了。用什么工具来测试呢?我以前用过jprofiler,那个虽然功能强大,但不是免费的。于是我在万能的stackoverflow上提了个问题,聆听神人的教诲。http://stackoverflow转载 2014-04-10 13:03:28 · 1327 阅读 · 0 评论 -
MAT内存分析
一、准备工作 分析较大的dump文件(根据我自己的经验2G以上的dump文件就需要使用以下介绍的方法,不然mat会出现oom)需要调整虚拟机参数 找个64位的系统在MemoryAnalyzer.ini设置-Xmx2g 如果是32位的xp可以使用下面的方法进行尝试:安装jrockit 6.0的JDKmat使用jrockit的jdk来启动Java代码转载 2014-04-12 19:09:08 · 1035 阅读 · 0 评论 -
AQS锁机制原理
ReentrantReadWriteLock 与 ReentrantLock 核心就是Sync(AQS子类)及AQS,Synchronized基于内部对象锁JVM指令的级别ReentrantReadWriteLock 引用传入 内部类 ReadLock和WriteLock,将其Sync传入两个内部类,如果读锁如果发现没有排他锁exclusiveCount则可以上锁 Reent原创 2014-05-13 16:39:26 · 3316 阅读 · 1 评论 -
JVM的GC简介和实例
本文是一次内部分享中总结了jvm gc的分类和一些实例, 内容是introduction级别的,供初学人士参考.成文仓促,难免有些错误,如果有大牛发现,请留言,我一定及时更正,谢谢!JVM内存布局主要包含下面几个部分:Java Virtual Machine Stack: 也就是我们常见的局部变量栈,线程私有,保存线程执行的局部变量表、操作栈、动态连接等。Java Heap转载 2014-05-13 16:41:36 · 705 阅读 · 0 评论 -
性能调优、虚拟机、垃圾回收
http://www.importnew.com/8147.htmlhttp://www.importnew.com/cat/architecture转载 2014-06-13 11:30:27 · 812 阅读 · 0 评论 -
Java程序员应该知道的10个Eclipse调试技巧
概述:图文介绍10个Eclipse调试技巧,可以帮助Java程序员识别和解决应用程序缺陷。Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧。小编从前辈程序员和网络中,整理了10个Eclipse调试技巧,希望对Java程序员有用。1 条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)转载 2014-06-13 11:15:47 · 944 阅读 · 0 评论 -
线程池异常统一处理
public class TestException { static class ExecuteRunnable implements Runnable{ CountDownLatch countDownLatch; int i; public ExecuteRunnable(CountDownLatch coun原创 2014-11-12 18:16:01 · 2456 阅读 · 0 评论 -
Java Thread Dump 日志分析
jstack Dump 日志文件中的线程状态dump 文件里,值得关注的线程状态有:死锁,Deadlock(重点关注) 执行中,Runnable 等待资源,Waiting on condition(重点关注) 等待获取监视器,Waiting on monitor entry(重点关注)暂停,Suspended对象等待中,Object.wait() 或 TIMED转载 2014-10-28 14:17:30 · 1733 阅读 · 0 评论 -
图解JVM内存分配和回收
最简单例子图解JVM内存分配和回收原文链接:最简单例子图解JVM内存分配和回收一、简介JVM采用分代垃圾回收。在JVM的内存空间中把堆空间分为年老代和年轻代。将大量(据说是90%以上)创建了没多久就会消亡的对象存储在年轻代,而年老代中存放生命周期长久的实例对象。年轻代中又被分为Eden区(圣经中的伊甸园)、和两个Survivor区。新的对象分配是首先放在Eden区,Survivor转载 2015-06-10 17:28:12 · 626 阅读 · 0 评论 -
J.U.C之AQS:CLH同步队列
此篇博客所有源码均来自JDK 1.8在上篇博客【死磕Java并发】—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列。CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会阻塞当前线转载 2017-05-16 18:40:37 · 552 阅读 · 0 评论