自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 乐观锁与悲观锁

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,...

2018-11-16 20:39:43 113

原创 基于栈的指令集与基于寄存器的指令集

java编译器输出的指令流,基本上是一种基于栈的指令集架构(Instruction Set Architecture, ISA),指令流中的指令大部分都是零地址指令,它们依赖操作数栈进行工作。与之相对的另外一套常用的指令集架构是基于寄存器的指令集,最典型的就是x86的二地址指令集,说的通俗些,就是现在我们主流PC机中直接支持的指令集架构,这些指令依赖寄存器进行工作。那么,基于栈的指令集与基于寄存器...

2018-11-03 21:26:52 669

原创 对常量池的认识

常量池可以理解为Class文件之中的资源仓库,它是Class文件结构中与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时他还是在Class文件中第一个出现的表类型数据项目。由于常量池中常量的数量是不固定的,所以在常量池的入口需要放置一项u2类型的数据,代表常量池容量计数值(constant_pool_count)。与java中语言习惯不一样的是,这个容器计数是从1而...

2018-11-03 19:59:22 231

原创 集群间同步导致的内存溢出

有一个基于B/S的MIS系统,硬件为两台2个CPU,8GB内存的HP小型机,服务器是WebLogic9.2,每台机器启动了3个WebLogic实例,构成一个6个节点的亲合力式集群。由于是亲合式集群,节点之间没有进行Session同步,但是有一些需求要实现部分数据在各个节点间共享。开始这些数据存放在数据库中,但由于读写频繁竞争很激烈,性能影响较大,后面使用JBossCache构建了一个全局缓存。全局...

2018-10-31 21:02:46 498

原创 Java缓存概述

应用程序为了提高性能,可以通过使用缓存来达到目的,缓存的存储介质可以内存或者硬盘,通常将数据存储在内存里,确切的说是jvm的内存中,缓存是基于Map这种思想构建的,以键值对的方式进行存取,之所以还可以将缓存的数据存储在硬盘中,是因为内存资源相当有限和宝贵,所以当内存资源不足的时候,就可以将其存储到硬盘中,虽然硬盘的存取速度比内存要慢,但是因为减少了网络通信量,所以还是提高程序的性能。缓存...

2018-10-28 23:53:14 115

原创 Mybatis解决jdbc编程的问题

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。3、 向sql语句传参数麻...

2018-10-28 23:49:30 722

原创 线程监控

如果“内存”页签相当于可视化的jstat命令的话,“线程”页签的功能相当于可视化的jstack命令,遇到线程停顿时可以使用这个页签进行监控分析。线程长时间停顿的主要原因主要有:等待外部资源(数据库连接,网络资源,设备资源等),死循环,锁等待(活锁和死锁)。通过代码清单分别演示一下这几种情况 程序运行后,首先“线程”页签选择main线程,如图4-7所示。堆栈追踪显示BufferedRcade...

2018-10-27 17:49:49 198

原创 深入理解多线程

涉及到:1.synchronized对象监视器为Object时的使用2.synchronized对象监视器为Class时的使用3.非线程安全是如何出现的.4.关键字volatile的主要作用5.关键字volatile与synchronized的区别与使用情况一:同步方法:(1).非线程安全与线程安全非线程安全是指多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是"读...

2018-10-23 23:24:00 82

原创 Java内存泄露监控工具:JVM监控工具介绍

1.jps:虚拟机进程状况工具可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class, main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID。jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。默认端口为1099。(前提是远程服务器提供jstatd服务)jps命令格式:jps [-q] [-mlvV...

2018-10-23 23:18:10 157

原创 Redis内存管理

Redis内存管理相关文件为zmalloc.c/zmalloc.h,其只是对C中内存管理函数做了简单的封装,屏蔽了底层平台的差异,并增加了内存使用情况统计的功能。void *zmalloc(size_t size) {// 多申请的一部分内存用于存储当前分配了多少自己的内存void *ptr = malloc(size+PREFIX_SIZE);if (!ptr) zmalloc_oom_...

2018-10-23 21:01:12 81

原创 深入理解Java反射

要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。1、Class对象理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息。Class对象就是用...

2018-10-23 20:54:51 106

原创 Spring中的循环依赖

循环依赖在使用Spring时,如果主要采用基于构造器的依赖注入方式,则可能会遇到循环依赖的情况,简而言之就是Bean A的构造器依赖于Bean B,Bean B的构造器又依赖于Bean A。在这种情况下Spring会在编译时抛出BeanCurrentlyInCreationException。Class A@Componentpublic class ClassA {private Cl...

2018-10-23 20:50:56 115

原创 Hibernate持久化对象的状态及状态之间的转换

Hibernate持久化对象有如下三种状态:1 . 瞬态:对象由new操作符创建出来之后,还未与Hibernate Session相关联,对应的数据表中没有该对象对应的数据。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了对瞬态对象的引用,则该对象会被垃圾回收器处理掉。使用Hibernate Session可以将其持久化2 .持久化:持久化对象在数据表中有对应的记录,...

2018-10-20 18:22:49 444

原创 什么是 Reflection 反射

什么是 Reflection 反射,为什么要用它Java 强类型语言,但是我们在运行时有了解、修改信息的需求,包括类信息、成员信息以及数组信息。Java 中 Reflection 和 Introspection 区别?说起反射,还有一个相似的概念 ‘Introspection’,字面意思是“自省、内省”,它们之间的区别如下:内省 在运行时检查一个对象的类型或者属性 最常见的...

2018-10-14 19:43:41 327

原创 深入理解Java内存模型(JMM)及volatile关键字

Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。方法区(Method Area):方法区属于线程共享的内存区域,又称Non-Heap(非堆),主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,根据Java 虚拟机规范的...

2018-10-14 19:38:04 179

原创 微信小程序加密数据解密算法

使用方法go get github.com/xlstudio/wxbizdatacrypt引入方法import (“github.com/xlstudio/wxbizdatacrypt”)使用示例package mainimport (“fmt”“github.com/xlstudio/wxbizdatacrypt”)func main() {appID := “wx4f...

2018-10-12 09:13:55 4766

原创 线程池的使用与执行流程

合理使用线程池能够带来3个好处:1)降低资源消耗;2)提高响应速度;3)提高线程的可管理性;4)提高应该程序的高可用性。那么线程池是如何工作的呢,借用并发编程艺术一书中的话来描述当一个任务提交给线程池之后,线程池会怎么做?首先,线程池会判断核心线程池里的线程(线程总数是30,则coreSize有可能是10)是否都在执行任务。如果没有比方说当前只有9个线程在工作,则从核心线程池中创建一个新的...

2018-10-12 09:06:07 248

原创 onready和onload的区别

1.onready比onload先执行执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。2.onload只执行最后一个而onready可以执行多个。编写个数不同 window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个。 $(...

2018-10-12 08:58:00 2211

原创 高并发处理

1,更多的静态资源:将代码中的大量枚举(容器加载时写入map,放入本地缓存),数据库中的定义表(定时任务放入缓存),固定配置,HTML文件等静态化处理,缓存起来!2,图片服务器:一般来说,图片在一个页面上属于数据量比较大的东西,尽量避免动态数据和图片的顺序渲染,使用图片服务器分离数据和图片!3,优化代码:尽量避免多层循环,避免多次访问数据库,使用多线程提高cpu使用率和执行速度,使用java8...

2018-10-07 20:20:33 98

原创 Hash算法原理

哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。使用哈希查找有两个步骤:使用哈希函数将被查找的键转换为数组的...

2018-10-07 19:27:20 206

原创 多线程同步

同步多线程(SMT)是一种在一个CPU 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多CPU)转化为指令级并行处理(同一CPU)的方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(CPI)计数较高的工作负载创造性能优势。 处理器采用超标量结构,最适于以并行方式读取及运行指令。同步...

2018-09-25 08:47:04 90

原创 省市区三级联动

public class ProvinceServlet extends HttpServlet {private static final long serialVersionUID = 1L;private ProviceServiceI proviceService = new ProviceServiceImpl();/** * @see HttpServlet#doGet(Htt...

2018-09-20 13:14:50 80

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除