- 博客(24)
- 资源 (3)
- 收藏
- 关注
原创 SpringMvc运行流程及三大组件作用
一:SpringMvc运行流程图一.SpringMVC中的组件及各个组件的作用?1.DispatherServlet:前置控制器,负责接收并处理所有的web请求,根据handlerMapping找到具体的Controller,由controller完成具体的处理逻辑。2.HandlerMapping(处理器映射):负责处理web请求和具体的Controller之间的映射关系匹配。...
2018-12-31 12:19:07
448
原创 spring与hibernate整合之sessionfactory的三种方式
方式1:只加载SessionFactory <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="configLocation" value="classpath:hibernate.cfg.xml...
2018-12-18 22:57:50
576
原创 线程创建的四种方式
java中创建线程的四种方法以及区别 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例。Java可以用四种方式来创建线程,如下所示:继承Thread类创建线程 实现Runnable接口创建线程 使用Callable和Future创建线程 使用线程池例如用Executor框架下面让我们分别来看看这四种创建线程的方法。1.通过继承Thre...
2018-08-15 10:24:36
215
原创 JVM十三:volatile关键字
先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结...
2018-08-12 15:38:25
347
原创 JVM十二:重排序
数据依赖性含义 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分为下列3种类型,如表3-4所示。上面3种情况,只要重排序两个操作的执行顺序,程序的执行结果就会被改变。前面提到过,编译器和处理器可能会对操作做重排序。编译器和处理器在重排序时,会遵守数据依赖性,编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。...
2018-08-12 15:21:05
355
原创 JVM十一:虚拟机字节码执行引擎(2)
解析 继续前面关于方法调用的话题,所有方法调用中的目标方法在 Class 文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用,这种解析能成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。换句话说,调用目标在程序代码写好、编译器进行编译时就必须确定下来。这类方法的调用称为解析(Resolu...
2018-08-12 09:46:24
181
原创 JVM十一:虚拟机字节码执行引擎(1)
执行引擎是Java最核心的组成部分之一。虚拟机与物理机的区别:虚拟机是一个相对“物理机”的概念,这两种机器都有代码执行能力,其区别就是物理机的执行引擎是直接建立在处理器,硬件,指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行指定指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。运行时栈帧结构 栈帧是用于支持虚拟机进...
2018-08-12 09:23:46
136
原创 JVM十:虚拟机类加载机制(2)
1. 类加载器作用 类加载器虽然只用于实现类的加载动作,但它在Java程序起到的作用却远大于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。通俗而言:比较两个类是否“相等”,只有在这两个类时由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一...
2018-08-11 14:57:19
172
原创 JVM十:虚拟机类加载机制(1)
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言中,类型的加载,连接和初始化过程都市在程序运行期间完成,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个...
2018-08-10 14:15:45
142
原创 JVM九:class字节码指令集
一:字节码与数据类型 Java虚拟机的指令由一个字节长度,代表着某种特定操作含义的数字(称为操作码)以及跟其随后的零至多个代表此操作所需参数(称为操作数)而构成。Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数指令都不包含操作数。因为字节码指令只有一个字节,所以指令集的操作码总数不可能超过256条。 在Java虚拟机中,大多数的指令都包含了其对操作所对应的数据类型信息...
2018-08-09 14:12:29
996
原创 JVM八:class文件结构(2)
下面我们接着为访问标志,类索引,父类索引,接口索引集合,字段集合,方法表集合 访问标志:常量池结束后紧接着的两个字节代表访问标志,用来标识一些类或接口的访问信息,包括:这个Class是类还是接口;是否定义为public;是否定义为abstract;如果是类的话,是否被声明为final等。具体的标志位以及含义如下表: 标志名称 标志值 含...
2018-08-08 15:57:30
155
原创 JVM八:class类文件结构(1)
Java在诞生时就以一次编写,到处运行特点在各个平台都可以进行运行。其实就是通过不同的编译器(Javac编译器,jrubyc编译器,groovyc编译器等等)将代码编译成规范的class文件,虚拟机只要接收到claas文件而并不关心是class文件时哪一种编译器编译的,这样就到达了(write one,run anywhere)。所以要想更好的了解虚拟机,下面我们走进class文件中...
2018-08-08 15:19:57
1300
4
原创 JVM七:虚拟机性能监控与故障处理工具
第一部分:JDK的命令行工具需要特别说明的是,下面介绍的工具全部基于windows平台下的JDK 1.6 Update 21,如果JDK版本,操作系统不同,工具所支持的功能可能会有较大差别。大部分工具在JDK1.5就以经提供。如果读者是JDK1.5版本的,在程序启动时请添加参数 “-Dcom.sun.management.jmxremote”开启JMX管理功能,否则部分工具是基于JMX他们将无...
2018-08-06 10:26:20
692
原创 JVM六:内存分配与回收策略
对于对象的回收,前面以及讲过具体的回收机制,下面我们来看看对象的分配策略!①对象优先在Eden区域分配大多数情况下,对象在新生代Eden区分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。虚拟机提供了-XX:PrintGCDetails这个收集日志参数,告诉虚拟机发生垃圾回收行为,并且在进程退出的时候适当输出当前内存各区域分配情况。下面看下面的代码其中在运...
2018-08-05 20:52:14
240
原创 JVM五:垃圾收集器(7种)
这里讨论的收集器基于JDK1.7Update 14之后的HotSpot虚拟机,这个虚拟机包含的所有收集器如下图所示上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。一:Serial(串行GC)收集器 Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,它只会使用一个CPU或者一条收集线程去完成垃圾收集作,...
2018-08-05 12:37:00
268
原创 JVM四:垃圾收集算法+HotSPot的算法实现
垃圾收集算法分为标记清除,复制算法,标记整理,下面我们来看看这三种基础的收集算法。标记-清除算法:分为两个阶段,标记和清除阶段。 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。标记过程与上一章的过程一样。这种标记算法的由两个不足;一是效率问题,标记和清除两个阶段的效率都不高;二是会产生空间碎片,空间碎片太多可能会导致以后在程序运行时无法分配较大的对象。导致再一次触...
2018-08-05 10:32:01
203
原创 JVM三:对象的内存布局与对象的访问定位
对象的内存布局下面重点介绍一下MarkWord(32Bit/64Bit中个为字段的含义)各字段的意义会随对象的锁状态而发生变化对象的访问定位分为两种方式;直接指针访问,句柄访问句柄访问:Java堆中会划分出一块内存作为句柄池,reference中存储的是对象的句柄,如图所示直接指针访问:reference指向的就是对象的地址,效率块,但是对象移动就更改的多...
2018-08-04 12:52:12
222
原创 JVM二:对象的创建(详解new后发生的故事)
在Java中我们创建对象都会用new进行创建,下面我来接收一下new之后对象创建及内存分配的具体的过程一:虚拟机遇到一条new指令后,先去检查这条指令参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载、解析和初始化过,如果没有,那必须先执行相应的类加载过程。二:类加载检查通过后,接下来虚拟机为新生对象分配内存,因为对象所需内存的大小在类加载后是完全确定的(用...
2018-08-04 11:18:04
439
原创 JVM一:Java内存区域分类(详解作用)=运行时数据区
首先内存区域分为线程共享区和线程独占区,具体情况如下图补充:直接内存并不是JVM线程区域的一步返,直接内存的大小不会收到Java堆的限制,决定于本机的RAM以及SWAP区的大小,该内存相对堆内存申请较耗时,但是取查询方便效率较高。...
2018-08-04 10:25:13
161
原创 Struts2的启动流程(结合struts2的源码详解)
一:项目启动后解析web.xml文件,会解析到配置的StrutsPrepareAndExecuteFilter的过滤器。二:项目启动时解析完web.xml文件后,就创建过滤器并执行struts2过滤器的init()方法,dispathch的init中初始化的内容是默认配置文件(default.xml,struts.xml,以及一些参数的解析)三:服务器启动后,当有后缀名为s...
2018-08-02 16:10:54
2076
原创 为什么JDK代理需要用接口取接收(详解JDK代理底层机制)
首先写一个解答的JDK代理例子目标对象及接口代理工厂实现测试类(注意只能用接口接收)这是为什么要用接口接收呢?下面我们取进入代理工厂的Proxy.newProxyInstance(?,?,?)方法可以通过下面的源码清楚的看到public static Class<?> getProxyClass(ClassLoader loader, ...
2018-07-30 16:34:12
618
原创 SSH配置步骤(详细教程)
第一步:导入相应的jar包struts2的9个jar包hibernatejar包(有C3P0的相应jar包)spring的核心jar包 切面AOP相关jar包 与struts整合的webJar包 与hibernate整合的ormjar包第二步:配置web.xml文件注意配置struts的过滤器 和spring的加载文件路径和监听器第三步 配置各个框架的相...
2018-07-29 16:29:58
35976
7
原创 SpringAop编程中切入点表达式为接口类
代理模式分为三种代理一:静态代理:静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类.二;JDK代理:目标对象必须有接口(通过实现接口类进行代理)1.代理对象,不需要实现接口2.代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口的类型)3.动态代理也叫做:JDK代理,接口代理...
2018-07-29 15:54:23
3118
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人