
java
文章平均质量分 81
jackie_sparrow
有梦想的咸鱼
展开
-
jvm内存布局(一)
最近在学习JVM,顺便写下所学习到的知识,也能加强自己对知识的理解。 直接上图Java的内存模型主要有五个部分组成,如果更加粗糙的划分,Java的内存模型可以划分成两大类,分别是栈和堆,当然这样划分是不太准确的。由图可以看到Java的内存模型主要由本地方法栈(线程私有),虚拟机栈(线程私有),程序计数器(线程私有),方法区,堆。本地方法栈与虚拟机栈发挥的作用是十分类似的,不原创 2017-04-20 20:23:42 · 373 阅读 · 0 评论 -
BlockQueue
用法Queue也就是队列,只能有两种基本的操作,在头部取走一个元素和在尾部增加一个元素,所以是一种FIFO结构(先进先出),不同于栈,栈是一种后进先出的数据结构。阻塞Queue常用的方法:add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove 移除并返回队列头部的元素 如原创 2018-01-15 14:51:30 · 1161 阅读 · 0 评论 -
CopyOnWrite
什么是CopyOnWrite容器Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和Co原创 2018-01-18 18:06:08 · 447 阅读 · 0 评论 -
读写锁
转载自 http://ifeve.com/read-write-locks/相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资转载 2018-01-19 14:56:34 · 288 阅读 · 0 评论 -
tomcat配置文件server.xml详解
前言Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元...转载 2018-03-18 20:28:55 · 298 阅读 · 0 评论 -
java类加载器
java类加载器的种类java默认的类加载器有三种分别是:启动类加载器,扩展类加载器,应用程序加载器。启动类加载器:启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 <JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,注意必由于虚拟机是按照文件名识别加载...原创 2018-03-19 22:56:21 · 245 阅读 · 0 评论 -
jstack用法
本文继续介绍Java自带的性能监测工具,本文使用jstack (Java Stack Trace)工具来玩~ 使用jstack命令工具可以得到线程堆栈信息,根据这些线程堆栈信息,我们可以去检查Java程序出现的问题,如检测死锁,并输出死锁的信息...转载 2018-03-24 14:03:13 · 17049 阅读 · 1 评论 -
ThreadPoolExecutor源码分析
原 Java 线程池 ThreadPoolExecutor 源码分析 2016年02月18日 18:51:33 阅读数:58...转载 2018-06-29 18:40:54 · 401 阅读 · 0 评论 -
java反射调用方法
java反射调用方法先上代码import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test { public Test(String a) { } public Test() { } publ...原创 2018-07-12 15:49:05 · 588 阅读 · 0 评论 -
CountDownLatch闭锁
用法CountDownLatch是一种灵活的闭锁实现,它可以使一个活多个线程等待一组事件发生。闭锁状态包括一个计数器,该计数器被初始化一个正数,表示需要等待的时间数量。countDown方法递减计数器,表示有一个事件已经发生了,而await方法等待计数器达到0,这表示所有需要等待的时间都已经发生。如果计数器的值非零,那么await会一直阻塞知道计数器为零,或者等待中的线程中断,或者等待超时。原创 2018-01-14 14:16:08 · 388 阅读 · 0 评论 -
一次诡异的NIO和IO性能测试
一次诡异的NIO和IO性能测试1 NIONIO是jdk1.4推出的新IO,和之前的IO最大的不同就是NIO采用了虚拟内存,普通的IO如果从磁盘文件读取一个文件需要经过这借步骤,首先从磁盘文件中读取一定的字节到内核缓冲区中,然后再拷贝到用户空间,如图:而NIO采用虚拟内存,将应用程序的buffer和内核的buffer都作为虚拟内存,并且两块不同的虚拟内存指向相同的物理内存,内核通过DMA将数据读取到b原创 2017-12-15 21:49:12 · 987 阅读 · 1 评论 -
spring上下文和springMVC上下文的关系
在tomcat部署一个用SSM搭起来的项目,一般会有两个上下文容器,分别是spring和SpringMVC的容器,在spring中一个容器是可以有父容器的,那么spring的容器和SpringMVC的容器关系是怎么样的。 先看tomcat中的web.xml配置文件spring的上下文:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="htt原创 2017-12-05 14:02:04 · 8444 阅读 · 3 评论 -
Java容器之LinkedHashMap源码解读
对于HashMap我们可能比较熟悉,HashMap中的键值对节点并不是有序的,如果在我们日常开发中有需要保存键值对的顺序时就可以使用LinkedHashMap,从字面上可以看出这是一个基于链表的有序HashMAP。 LinkedHashMap常用的API大部分和HashMap是差不多的,但是在内部实现机制上和HashMap有些地方还是有所不同的。 首先我们来看LinkedHashMap原创 2017-07-17 23:16:47 · 300 阅读 · 0 评论 -
mybatis之MapperFactoryBean源码解读
在我们使用mybatis开发dao层的时候,我们可以直接可以写好dao层接口,然后借助MapperFactoryBean直接代理代理,这样我们就不需要显示的实现dao接口,刚接触到这个技术点的时候就对这个MapperFactoryBean十分感兴趣,所以在了解了背后的实现机制时,就写下我的所见所得。 先来看看MapperFactoryBean的继承关系 从类的的继承图中可原创 2017-07-19 20:02:53 · 1201 阅读 · 0 评论 -
并发编程之synchronized
并发编程一个很棘手的问题就是对临界资源的访问,当大量线程同时对一个不安全的临界资源访问时,为了不出现与我们期望不符的结果,我们在写程序的时候需要考虑做适当的线程同步。其中synchronized关键字就是对线程同步的一种手段,synchronized可以修饰普通方法,静态方法,代码块。 在我初次接触到synchronized关键字的时候,当我使用synchronized修饰普通方法时,我有一原创 2017-08-10 11:03:42 · 298 阅读 · 0 评论 -
一个简单的HTTP请求与应答基于socket
tomcat是一个web容器,网络请求基于HTTP,HTTP底层基于socket抽象层,直接上图(盗的图) 我就简单实现了一个socket来模拟HTTP请求与应答package Socket;import java.io.*;import java.net.ServerSocket;import java.net.Socket;/** * Created b原创 2017-08-03 18:47:03 · 7227 阅读 · 2 评论 -
Java关键字default
今天打算写一篇ConcurrentHashMap的源码分析,在看源码过程中发现一个接口中有了default关键字,这是生平第一次见到这个关键字,然后Google了一线,发现是Java8的新特性,所以就打算写一篇关于default的文章。 default常用语接口中,从它的中文意思行来看,大概能猜个差不多,我们本来写Java接口的时候,是不能有方向体的函数,就类似于C++中的虚函数原创 2017-08-01 21:07:48 · 73628 阅读 · 9 评论 -
Java NIO的特点
java nio原理和它的优点 标签: Java 2015-11-06 15:转载 2017-09-07 21:54:40 · 1170 阅读 · 0 评论 -
servlet线程模型
servlet在Javaweb的开发中是必不可少,尽管有SSM这些优秀的框架,尤其是SpringMVC解放了我们写大量的servlet,但是核心原理是基于servlet,DispatchServlet,就是一个servlet,它会拦截所有请求,然后分发。回到正题,servlet在tomcat容器内是怎么样的存在,是当每一次请求,web容器就重新初始化一个servlet实例,还是只存在一个servl原创 2017-09-20 12:41:47 · 1388 阅读 · 0 评论 -
图解Java多线程
Java内存模型(JMM)定义了:how and when different threads can seevalues written to shared variables by other threads,and how to synchronize access to shared variables when necessary.Java堆和栈中的对象存储位置:Java内存模型与硬件模型转载 2017-11-01 22:08:17 · 500 阅读 · 0 评论 -
JDK 动态代理
JDK 接口的动态代理最近在看动态代理,有JDK和CGLIB,其中JDK动态代理只能代理接口,CGLIB既能代理接口也能代理类,在网上看了很多的JDK 的动态代理,发现先要定义一个接口,然后再去实现这个接口,当时就对这个产生疑惑,既然已经实现接口了,那么实现的接口直接写代理逻辑不就行了,干嘛还要使用JDK 的动态代理,这不是为了代理而代理嘛,后来去了公司实习,公司使用的热天retrofit...原创 2018-07-19 10:24:14 · 236 阅读 · 0 评论