![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java相关
文章平均质量分 69
fjs_cloud
这个作者很懒,什么都没留下…
展开
-
java nio之buffer的分析
在java nio中,与数据打交道是通过channel与buffer进行的。。。其实buffer的定义在I/O操作中还是蛮平常的,起码在nginx和libevent中都有自己定义buffer,只不过nginx的定义可能更复杂一些,libevent就相对简单一些吧。。。其实在java nio中buffer的定义也还蛮简单的吧。。。。有三个重要的属性:(1)limit(2)原创 2013-06-28 21:25:47 · 1603 阅读 · 0 评论 -
spring的ioc原理(java反射机制)
为什么要有ioc这个概念,其实自己以前一直不是很理解,后来随着自己经验稍微多了一些,认识到,在一些系统中,通过这种依赖注入的方式确实可以让代码之间的耦合更弱一些,可以更好管理对象之间的关系。。。其实本来是想直接分析spring的源代码的,但是将ioc部分的代码,也就是beanfactory部分的代码大致的看了一次以后觉得spring的代码可能有点太多了,而且封装的太复杂,因此就直接打消了这中想原创 2013-09-27 16:33:09 · 3662 阅读 · 1 评论 -
java的classLoader分析与jettty的WebAppClassLoader
classLoader,从名字就可以知道,用于加载class的东西。我们知道在java中,源文件是会被编译成class文件的,我们的程序的运行也是需要依赖这些编译成字节码的class文件,而这些字节码文件就必须要被classLoader加载到内存之后才能使用。。。如果classLoader无法加载到我们要用的类型的class文件,那么将会抛出classnodfound的异常。。。先用一张图原创 2013-10-28 20:21:06 · 3513 阅读 · 0 评论 -
java的Reference与DirectBuffer的内存回收
java的Reference与DirectBuffer内存的自动回收的实现。。。其实比较曲折的折中的方法实现了DirectBuffer的自动回收。。。原创 2013-10-30 16:57:47 · 3573 阅读 · 2 评论 -
无锁编程(CAS以及java的实现)
无锁的编程可以使程序获得更好的伸缩性,通过对处理器的CAS指令的利用。然后介绍一下java中是如何使用的。。。。原创 2013-11-29 15:51:45 · 6071 阅读 · 1 评论 -
跳表(SkipList)与其在java中的使用
跳表(SkipList)这种数据结构算是以前比较少听说过,它所实现的功能与红黑树,AVL树都差不太多,说白了就是一种基于排序的索引结构,它的统计效率与红黑树差不多,但是它的原理,实现难度以及编程难度要比红黑树简单。原创 2014-02-05 20:38:26 · 8267 阅读 · 0 评论 -
JMX入门
嗯,看tomcat源码的时候发现了这个东西。。还挺不错的。。。就稍微了解一下。。。首先啥叫JMX:java management extension,字面翻译就是java管理扩展了。。。不说那么多了,直接上代码吧:import java.lang.management.ManagementFactory;import javax.management.MBeanServer;impo原创 2014-02-27 19:11:19 · 1362 阅读 · 0 评论 -
Tomcat源码阅读之JMX部分的设计与实现
Tomcat通过读取XML文件中的描述,动态的通过JMX来注册对象,将一些属性以及方法暴露出来,可以很方便的实现对当前Tomcat服务器的监控和管理。。。本文详细分析了Tomcat实现的这部分的细节,以及如何通过Tomcat的代码来动态的注册自己的对象到JMX上面去。。。原创 2014-02-28 16:01:13 · 2751 阅读 · 1 评论 -
java类库concurrent中最核心类型AbstractQueuedSynchronizer的学习
首先,concurrent类库在java中应该算是非常重要的类库了,在构建一些同步代码,容器,并发什么的都可以在这个类库中找到现成的可以用...而在这个类库中最最核心的一个类型就是AbstractQueuedSynchronizer类型,可以基于它来实现自己的同步工具,例如ReentrantLock类型其实就是基于它来实现的...原创 2014-03-30 21:00:52 · 1302 阅读 · 0 评论 -
支持并发的http客户端(基于tcp连接池以及netty)
闲来无事,将以前自己写的一个库放出来吧。。有的时候会有这样子的需求:(1)服务器A通过HTTP协议来访问服务器B(2)服务器A可能会并发的像B发送很多HTTP请求类似于上述的需求,可能并不常见。。。因为在业务中确实遇到了这样子的场景,所以就自己动手开发了一个库。。。原创 2014-06-22 18:05:36 · 8132 阅读 · 2 评论 -
java动态代理的实现
先来无事,由于有打算读spring框架,那么还是来打一些基础吧,java的反射机制总得了解一些吧,这里就来看一个实现动态代理的例子:package proxy1;public interface OutPut { public String outPut(String aa);}这里是定义了一个接口,也就定义了一个方,outPut方法,接下来我们来看它的实现:pack原创 2013-09-18 11:20:59 · 1726 阅读 · 0 评论 -
java的HashMap与ConcurrentHashMap
好像今天没有什么源码读,那么就来看看java的这两种HashMap有啥不一样的地方吧,在这之前先普及一下HashMap的一些基本知识:(1)放入HashMap的元素是key-value对。(2)底层说白了就是以前数据结构课程讲过的散列结构。(3)要将元素放入到hashmap中,那么key的类型必须要实现实现hashcode方法,默认这个方法是根据对象的地址来计算的,具体我也记不太清楚了原创 2013-09-17 14:03:11 · 6486 阅读 · 0 评论 -
java线程池的实现原理(netty)
博客已经好久都没有写了,感觉自己变慵懒了。。。这本来也是应该早就应该要写的。。。在前面读netty源代码的时候就可以看到netty本身就自己实现了一个线程池,而且也自己实现了future,并且实现的功能更加的强大。。。future还可以添加listener,这个刚开始自己觉得最为神奇。。当看完了它是怎么实现的之后觉得设计还是挺漂亮的。。。要自己实现java的线程池,那么有两个接口是需要熟悉原创 2013-08-02 18:13:52 · 7300 阅读 · 0 评论 -
java nio selector的使用
在继续深入netty之前,还是补习一下java的selector的使用吧,没想到java里面用起来跟epoll什么的也差不太多。。。好吧,废话少说,直接上代码了,反正也比较的简单,也就不细说了。。。。。package fjs;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.By原创 2013-06-18 15:49:15 · 1788 阅读 · 0 评论 -
红黑树--java TreeMap
红黑树是自己看源代码时候最先遇到的比较高级的数据结构,早就想写一篇关于红黑树的文章了,但是因为时间的关系,一直没有弄。。。首先来说在什么地方用到了红黑树:(1)nginx的定时事件用到了红黑树,用它来定位当前超时时间最近的节点(libevent采用的是小根堆)(2)STL中的map底层就是采用红黑树实现的(3)linux调度中对进程的管理有用到(4)java的TreeMap采用原创 2013-07-17 18:58:01 · 2093 阅读 · 0 评论 -
java所谓的闭包与回调
之所以觉得javascript写起来特别的爽,尤其是在编写异步程序的时候,是因为javascript的闭包,使得我们能够简单的写出异步回调回调函数。。。。所以node.js的异步编程也能很简单的实现。。在服务器端编程方面,高性能十分依赖非阻塞,异步和回调,同时java这一大大的语言却并没有闭包这一概念(据说新版本有,但是我不知道),也可以采用一定委婉的方式来实现。。。。那就是内部类,因为内部类原创 2013-07-02 14:30:44 · 1749 阅读 · 0 评论 -
java的Callable接口
java也算是原生的支持多线程吧,但是如何让线程执行完成之后能够有返回值返回到主线程呢。。。?一般情况下线程是实现runable接口,但是如果想要返回值的话那么就应该实现Callable接口了。。。好了,还是不多说废话,直接上一个简单的例子就好了。。。package fjs;import java.util.ArrayList;import java.util.concurr原创 2013-05-14 09:59:02 · 2761 阅读 · 0 评论 -
java ThreadLocal与其应用(netty)
刚开始看netty源代码的时候就遇到了ThreadLocal这个东西,当时就不太明白这个东西到底干嘛用的,上网稍微查了一下,好像大家说法都不太一样,有的说是为了方便线程维护自己的变量,有的又说是什么方便并发编程。。我擦。。感觉凌乱了。。还是自己好好看看靠谱。。。首先ThreadLocal确实是用于线程存储本地变量的一种很不错的方法,在这里,一般情况下,都用于保存当前变量独有的对象实例,如果好多原创 2013-07-18 16:56:45 · 2306 阅读 · 0 评论 -
小根堆(java)
晚上睡不好觉白天效率就不行,昨天就已经把小根堆的代码写好了,但是因为没什么状态,文章拖到了今天才写。。首先什么是小根堆:(1)它是一颗完全二叉树(2)任意一个节点均小于或等于其左右子节点的关键码(大根堆相反就是了)因此可以得知,当前树形结构的根节点就是当前整个树形结构最小的节点。。。至于说这种堆结构有什么作用:(1)以前本科的时候上数据结构课的时候就有讲过堆排序,好原创 2013-07-20 11:02:07 · 3520 阅读 · 1 评论 -
红黑树与小根堆性能对比(java)
因为nginx与libevent采用了不同的数据结构来维护超时事件,其中nginx采用了红黑树,libevent采用的是小根堆,所以一直比较好奇,这两种数据结构谁在这种应用场景下更合适(当做优先权队列来用)好吧,好奇那就试一下就好了。。。小根堆就用前面的那篇文章中自己实现的那个代码,代码比较挫,也没有做什么优化,红黑树通过继承java的TreeMap来实现。。。测试案例:向两种结构原创 2013-07-20 17:22:44 · 3915 阅读 · 0 评论 -
java volatile关键字详解
嗯,其实以前就一直没有把volatile关键字的具体意思搞清楚,只是隐隐约约觉得好像是防止对这个关键字修饰的变量的访问和操作进行优化。。。。要搞清楚volatile关键字,首先要从内存说起,在jvm中,每一个线程的运行都有属于它自己的线程栈,当我们在线程中访问一个公共变量的时候,这个值可能会被最终引用到当前线程的本地栈中保存一个副本(这也和现在多处理器有关,每一个处理器都有自己的本地缓存),也原创 2013-07-22 14:07:14 · 1797 阅读 · 1 评论 -
java的final关键字与闭包
前面一篇文章曾经有提到过java中闭包的实现,其实当时比较的粗糙,所以一直觉得有必要要把这部分搞的比较明白才行。。。首先先从java的final关键字说起:(1)final的方法,这个方法不能被改变,不能被重载(2)final的类,这个类型不能被继承(3)final的数据,该数据域是不能被改变的。。。对于第三种,可能会引起一些误会,但是误会归误会,它始终是正确的。。。要讲清原创 2013-07-24 14:34:24 · 2651 阅读 · 0 评论 -
volatile在java与c++
volatile 关键字,粗暴理解为读取,赋值都必须是进入主存。。。。在java环境下,其内存模型 load, store等操作都是原子的(64位非volatile可以不是原子),所以volatile修饰的变量可以用作一些标志开关。。。。但是在c++环境下,由于没有load,store这些原子操作保证,所以无法直接用volatile来修饰一个bool来作为多线原创 2017-06-27 09:43:18 · 1826 阅读 · 0 评论