![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
气自华
寂寥无踪,纵然寂静,依然欢喜。
展开
-
Java内存模型
JAVA内存模型: 不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的。JVM定义了自己的内存模型,屏蔽了底层平台内存管转载 2016-09-22 17:44:20 · 179 阅读 · 0 评论 -
JVM深入理解
JVM是JAVA虚拟机(JAVA Virtual Machine)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JAVA虚拟机有自己完善的虚拟硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得JAVA程序只需生成在JAVA虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。转载 2016-09-22 17:50:26 · 425 阅读 · 0 评论 -
Java并发
硬件的效率和一致性: 由于计算机的运算速度和它的存储和通讯子系统的速度差距巨大,大部分时间都花在IO,网络和数据库上。为了压榨CPU的运算能力,需要并发。 由于运算速度的差距,CPU和存储设备间加入多层的cache。同时也引入了缓存一致性的问题。解决缓存一致性有多种读写协议,(MSI,MESI,MOSI,Synapse,Firefly和Dragon Protocol等。转载 2016-09-22 18:09:16 · 210 阅读 · 0 评论 -
浅析Mina
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的TCP/UDP 应用程序开发、串口通讯程序。 MINA 的内部流程:(1) IoS转载 2016-09-22 17:03:00 · 358 阅读 · 0 评论 -
浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别和联系。1.何谓对象? 在Java中有一句比较流行的话,叫做“万物皆对象”,这是Java语言设计之初的理念之一。要理解什么是对象,需要跟类一转载 2016-10-10 22:48:42 · 184 阅读 · 0 评论 -
4种Java引用浅解
最近研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档、代码以及几篇文章。做个小结,如有错误,欢迎指正。之所以想学习一下Java的几种引用类型,原因有两个:理解Java Cache实现、学习Java引用与Java垃圾回收机制的关系内存资源是有限的,需要合理的利用。Cache不是仅仅HashMap那么简单,Java引用与Ja转载 2016-10-10 22:51:23 · 242 阅读 · 0 评论 -
Java 并发编程_Volatile
共享变量:在多个线程之间能够被共享的变量被称为共享变量。共享变量包括所有的实例变量,静态变量和数组元素。他们都被存放在堆内存中,Volatile只作用于共享变量。 内存屏障(Memory Barriers):是一组处理器指令,用于实现对内存操作的顺序限制。 缓冲行(Cache line):缓存中可以分配的最小存储单位。处理器填写缓存线时会加载整个缓存线,需要使用多个主内存读周期。转载 2016-09-25 17:34:47 · 511 阅读 · 0 评论 -
Java NIO(二)
在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。本文为NIO使用及原理分析的第二篇,将会分析NIO中的Buffer对象。在缓冲区中,最转载 2016-09-25 19:26:13 · 179 阅读 · 0 评论 -
java NIO(一)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念。在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,转载 2016-09-25 17:36:29 · 226 阅读 · 0 评论 -
Java NIO(三)
在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()相当于创建了一个指定大小的数组,并把它包转载 2016-09-25 20:50:28 · 430 阅读 · 0 评论 -
Java NIO四()
在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就转载 2016-09-25 22:10:02 · 180 阅读 · 0 评论 -
Java synchronized 理解
搞清楚 synchronized 锁定的是哪个对象,就能帮助我们设计更安全的多线程程序●首先是synchronized关键字的作用域可以有两种:・某个对象实例内synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有多个synchronized方法,只要一个线 程访问了其中的一个synchronized方转载 2016-09-25 22:18:15 · 169 阅读 · 0 评论 -
Java中的i=i++
Java的JVM剖析:在jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。 语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值);语句iload_1是将变量区中的值暂存如堆栈中。 因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的istore_1又将堆栈的值(0)弹出赋给变量区的i,所以转载 2016-09-25 22:36:09 · 331 阅读 · 0 评论 -
Java String对象问题
最近在论坛上看到关于String s = new String("XYZ") + new String("XYZ");到底创建几个对象的讨论,觉得比较有意思,在此总结一下。 在JAVA中除了8种基本类型之外,其他的都是类对象及其引用。所以 "XYZ"在JAVA中是一个String对象,对于String类对象来说它的对象值是不能修改的,也就是具有不变性。 但是在下面一转载 2016-09-25 22:44:54 · 162 阅读 · 0 评论 -
Java io nio
Java IO在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构。一种简单而又直接的解决方案是“one-thread-per-connection”。这是一种基于阻塞式I/O的多线程模型。在该模型中,Server为每个Client连接创建一个处理线程,每个处理线程阻塞式等待可能达到的数据,一旦数据到达转载 2016-09-25 23:00:36 · 235 阅读 · 0 评论 -
Java NIO原理图文分析及代码实现
Java NIO原理图文分析及代码实现 前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:转载 2016-09-25 23:13:56 · 168 阅读 · 0 评论 -
java nio
Java NIO与IO的区别和比较导读J2SE1.4以上版本中发布了全新的I/O类库。本文将通过一些实例来简单介绍NIO库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道。一. 介绍NIONIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O类中的一些问题。1. Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊转载 2016-09-26 20:20:33 · 167 阅读 · 0 评论 -
java nio与IO区别
传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力。转载 2016-09-26 20:41:24 · 168 阅读 · 0 评论 -
全面学习java nio
本文简介: JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 I/O 是如何工作的。您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。◆ 输入/输出:概念性描述转载 2016-09-27 13:14:19 · 280 阅读 · 0 评论 -
java nio原理和通信模型
Java NIO是在jdk1.4开始使用的,它既可以说成“新IO”,也可以说成非阻塞式I/O。下面是java NIO的工作原理:由一个专门的线程来处理所有的IO事件,并负责分发。事件驱动机制:事件到的时候触发,而不是同步的去监视事件。线程通讯:线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。阅读过一些资料之后,下转载 2016-09-27 16:56:31 · 370 阅读 · 0 评论 -
structs2+spring+mybatis 配置log4j
(1)将javax.servlet_1.0.0.0_2-5.jar拷贝到web-inf/lib下。(2)在web-inf根目录下新建文件log4j.properties,配置日志输出级别、日志路径等信息。log4j.properties代码:[plain] view plain copy # debuglog4j.rootLogg转载 2016-09-29 16:33:39 · 618 阅读 · 0 评论 -
配置 mybatis的 log4j.properties
log4j.rootLogger=debug,stdout,logfile05 06 07### 把日志信息输出到控制台 ###08log4j.appender.stdout=org.apache.log转载 2016-09-29 16:30:15 · 4726 阅读 · 0 评论 -
Java CopyOnWriteArrayList详解
CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。 这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更有效。在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时,它也很有用。“快照”风格的迭代器方法在创建迭代器时使用了对数转载 2016-09-29 18:32:58 · 260 阅读 · 0 评论 -
深入分析Java ClassLoader原理
http://blog.csdn.net/xyang81/article/details/7292380一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的转载 2016-11-06 21:45:07 · 215 阅读 · 0 评论 -
java native
泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方法:1public native int hashCode(); 为什么有个navicat呢?这是我所要学习的地方。所以今天泥瓦匠想要总结下navicat。一、认识 native 即 JNI,转载 2016-10-01 11:12:41 · 240 阅读 · 0 评论 -
NIO BIO APR介绍
tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。 1)bio 默认的模式,性能非常低下,没有经过任何优化处理和支持. 2)nio 利用java的异步io护理技术,no blocking IO技术. 想运行在该模式下,直接修改ser转载 2016-10-02 11:18:40 · 273 阅读 · 0 评论 -
Java nio bio aio
同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API)。阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回)。非阻塞转载 2016-10-02 11:51:30 · 254 阅读 · 0 评论 -
Java8中接口中可添加的default修饰方法体
我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码。接口中定义的方法必须在接口的非抽象子类中实现。下面就是关于接口的一个例子:123456789101112131415publicinterface转载 2016-10-17 14:28:52 · 6901 阅读 · 0 评论 -
Java泛型
一. 泛型概念的提出(为什么需要泛型)?首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi")转载 2016-10-18 10:14:41 · 180 阅读 · 0 评论 -
java assert 断言
一、assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新。 从理论上来说,通过 assertion方式可以证明程序的正确性,但是这是一项相当复杂的工作,目前还没有太多的实践意义。 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boo转载 2016-10-04 10:55:05 · 3131 阅读 · 0 评论 -
Java nio selector
Selector:java nio无阻塞io实现的关键。阻塞io和无阻塞io:阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。当并发量大,而后端服务或客户端处理数据慢时就会产生产生大量线程处于等待中,即上转载 2016-10-04 11:03:57 · 257 阅读 · 0 评论 -
java 发送短信
今天闲来无事,在微博上看到一个关于用Java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵(转载 2016-10-04 19:38:51 · 260 阅读 · 0 评论 -
JavaMail入门:创建纯文本、HTML格式的邮件
在 http://java.sun.com/products/javamail/ 下载了 JavaMail 1.4.3 版本,如果所用 JDK 是 6.0 则不用再下载 activation 。下载得到的是 javamail-1.4.3.zip 的压缩包,解压得到 mail.jar 包,配置环境变量之后就可以使用了。从解压后的文件夹中有 JavaMail-1.4.pdf 这个 JavaMail转载 2016-10-05 17:08:54 · 1628 阅读 · 0 评论 -
Java发送邮件javax.mail
在下载使用javax.mail的jar包时候,注意:有的jar没有包含sun的实现,只包含了api,这类jar名称通常为javax.mail-api-x.x.x.jar,在使用smtp协议发邮件过程中会报错:[java] view plain copy java.lang.ClassNotFoundException: com.sun转载 2016-10-05 18:50:39 · 626 阅读 · 0 评论 -
java网站架构设计
闲来无事,梳理了一下自己的技术,简单聊聊一些大型网站的技术架构设计,算是个抛砖引玉吧,欢迎大家拍砖。涉及到的技术及工具:Java,springmvc,ibatis,freemarker,MySQL,mongdb,memcached,ehcache,maven。一个网站不可能说一开始就是要设计一个能够考虑所有情况的完美架构,一个成熟的架构都是随着需求的变化,流转载 2016-10-07 21:46:35 · 915 阅读 · 0 评论 -
java程序性能优化
一、避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 例子: [java] view plain copyimport java.util.vector; class cel { void method (ve转载 2016-10-07 22:08:08 · 271 阅读 · 0 评论 -
深入分析 Java I/O 的工作机制(网络 I/O 优化)
网络 I/O 优化 网络 I/O 优化通常有一些基本处理原则: 1、一个是减少网络交互的次数:要减少网络交互的次数通常我们在需要网络交互的两端会设置缓存,比如Oracle 的 JDBC 驱动程序,就提供了对查询的 SQL 结果的缓存,在客户端和数据库端 都有,可以有效的减少对数据库的访问。关于 Oracle JDBC 的内存管理可以参考《 Oracle JDBC 内存管转载 2016-10-07 22:12:21 · 309 阅读 · 0 评论 -
BigPipe:高性能的“流水线技术”网页
原文地址:http://www.facebook.com/note.php?note_id=389414033919 译文地址:http://www.misuisui.com/weblog/?p=2297 作者:蒋长浩Facebook的网站速度做为最关键的公司任务之一。在2009年,我们成功地实现了Facebook网站速度提升两倍 。而正是我们的工程师团队的几个关键的创新使它成为可转载 2016-10-07 22:14:58 · 374 阅读 · 0 评论 -
网站前端架构的优化总结
1 前端优化必要性随着互联网的发展,前端优化越来越被人们重视,在一个大型的大型电子商务网站技术架构中,前端架构一定是一项必不可少的工作,国内几个大型的互联网公司也有非常强大的前端技术人员。在业界享有名气淘宝 UED 团队就有好几十人。在浏览器访问一个网站时,有 10%-20% 的时间是花在下载 HTML 上面,有 80%-90% 时间是花在下载页面中所有组件上面。如果我们可以把后端时间缩短一转载 2016-10-07 22:34:19 · 619 阅读 · 0 评论 -
jquery ajax跨域 jsonp
jQuery的$.getJson 方法是支持跨域的页面请求:[html] view plain copy$.getJSON(url+'?callback=?',{operate:'add'}, function (res){ } }); 其转载 2016-10-07 22:40:39 · 586 阅读 · 0 评论