01 2014 档案

摘要:C/C++等纯编译语言从源码到最终执行一般要经历:编译、连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对中Class类文件的加载、连接都在运行时执行,虽然类加载和连接会占用程序的执行时间增加性能开销,但是却可以为java语言带来高度灵活性和扩展性,java的针对接口编程和类加载器机制实现的OSGi以及热部署等就是利用了运行时类加载和连接的特性,java的Class类在虚拟机中的生命周期如下:上图中加载、验证、准备、初始化和卸载这个五个阶段的顺序是确定的,而解析阶段则不一定,在某些情况下为了支持jav 阅读全文
posted @ 2014-01-25 14:07 elysee 阅读(1640) 评论(1) 推荐(1) 编辑
摘要:Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在java堆中生成一个代表该类的java.lang.Class对象,作为方法区数据的访问入口。Java虚拟机的类加载是通过类加载器实现的, Java中的类加载器体系结构如下:(1).BootStrap ClassLoader:启动类加载器,负责加载存放在%JA 阅读全文
posted @ 2014-01-19 12:48 elysee 阅读(952) 评论(0) 推荐(0) 编辑
摘要:Java语言从诞生之时就宣称一次编写,到处运行的跨平台特性,其实现原理是源码文件并没有直接编译成机器指令,而是编译成Java虚拟机可以识别和运行的字节码文件(Class类文件,*.class),字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。如今的java虚拟机已经称为一种通用平台,不但能够运行java语言,Groovy,JRuby,Jython等一大批动态语言也可以直接在Java虚拟机上运行,其原理也是这些动态语言的编译器将源码文件编译为和Java相同的字节码文件,这样Java虚拟机就可以像执行java语 阅读全文
posted @ 2014-01-17 14:20 elysee 阅读(1051) 评论(0) 推荐(0) 编辑
摘要:Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Serial是最基本、历史最悠久的垃圾收集器,使用复制算法,曾经是JDK1.3.1之前新生代唯一的垃圾收集器。Serial是一个单线程的收集器,它不仅仅只会使用一个CPU或一条线程去完成垃圾收集工作,并且在进行垃圾收集的同时,必须暂停其他所有的 阅读全文
posted @ 2014-01-17 12:58 elysee 阅读(659) 评论(0) 推荐(2) 编辑
摘要:Java虚拟机的内存区域中,程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭;栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性。垃圾回收重点关注的是堆和方法区部分的内存。常用的垃圾回收算法有:(1).引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存。引用计数算法实现简单,效率很高,微软的COM技术、ActionScript 阅读全文
posted @ 2014-01-16 08:37 elysee 阅读(768) 评论(0) 推荐(2) 编辑
摘要:通过简单的小例子程序,演示java虚拟机各部分内存溢出情况:(1).java堆溢出:Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。想要方便快速地产生堆溢出,要使用如下java虚拟机参数:-Xms10m(最小堆内存为10MB),-Xmx10m(最大堆内存为10MB,最小堆内存和最大堆内存相同是为了避免堆动态扩展),-XX:+HeapDumpOnOutOfMemoryError可以让java虚拟机在出现内存溢出时产生当前堆内存快照以便进行异常分析。例子 阅读全文
posted @ 2014-01-15 09:16 elysee 阅读(984) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:其中方法区和堆是由所有线程共享的数据区。Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。(1).程序计数器:是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程序的分支、循环、跳转、异常处理以及线程恢复等基础功能都是依赖程序计数器来完成。Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间片来实现,在任何一个时刻,一个处理器只会执行一条线程指令,因此,为了确保线程切换之后能恢复到正确的执行 阅读全文
posted @ 2014-01-14 16:36 elysee 阅读(1046) 评论(0) 推荐(0) 编辑
摘要:我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:classClxBase{public:ClxBase(){};virtual~ClxBase(){};virtualvoidDoSomething(){coutDoSomething();deletepTest; 的输出结果是:Do something in class ClxDerived!Output from the destructor of class ClxDerived!这个很简单,非常好理解。 但是,如果把类ClxBase析构函数前的virt 阅读全文
posted @ 2014-01-14 14:47 elysee 阅读(277) 评论(0) 推荐(0) 编辑
摘要:Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用。其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力。学习开源代码是掌握技术的一个最佳方式,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的接口使用 阅读全文
posted @ 2014-01-09 09:17 elysee 阅读(1687) 评论(5) 推荐(9) 编辑
摘要:主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织。Follow大神,深挖大神的项目和following,你会发现很多。一、个人JakeWharton 就职于SquareGithub地址:https://github.com/JakeWharton代表作:ActionBarSherlock,Android-ViewPagerIndicator,Nine Old Androids,SwipeToDismissNOA,hugo,butterknife,Android-DirectionalViewPager, scalpelpidcat另外对square及其他开源项目有很多贡献博客:htt 阅读全文
posted @ 2014-01-09 09:05 elysee 阅读(984) 评论(0) 推荐(0) 编辑
摘要:主要介绍和Android开发工具和测试工具相关的开源项目。Buckfacebook开源的Android编译工具,效率是ant的两倍。主要优点在于:(1) 加快编译速度,通过并行利用多核cpu和跟踪不变资源减少增量编译时间实现(2) 可以在编译系统中生成编译规则而无须另外的系统生成编译规则文件(3) 编译同时可生成单元测试结果(4) 既可用于IDE编译也可用于持续集成编译(5) facebook持续优化中项目地址:https://github.com/facebook/buckAndroid Maven PluginAndroid Maven插件,可用于对android三方依赖进行管理。在J2E 阅读全文
posted @ 2014-01-09 09:04 elysee 阅读(858) 评论(0) 推荐(0) 编辑
摘要:主要介绍那些Android还不错的完整项目,目前包含的项目主要依据是项目有意思或项目分层规范比较好。Linux项目地址:https://github.com/torvalds/linuxAndroid项目地址:https://android.googlesource.com/或https://github.com/android以上两个项目,不解释(1) ZXing 二维码扫描工具项目地址:https://github.com/zxing/zxing或https://code.google.com/p/zxing/APK地址:https://play.google.com/store/apps 阅读全文
posted @ 2014-01-09 09:02 elysee 阅读(774) 评论(0) 推荐(0) 编辑
摘要:主要包括那些不错的开发库,包括依赖注入框架、图片缓存、网络相关、数据库ORM建模、Android公共库、Android 高版本向低版本兼容、多媒体相关及其他 阅读全文
posted @ 2014-01-09 09:01 elysee 阅读(1178) 评论(2) 推荐(0) 编辑
摘要:主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar及其他如Dialog、Toast、EditText、TableView、Activity Animation等等 阅读全文
posted @ 2014-01-09 08:51 elysee 阅读(1767) 评论(1) 推荐(1) 编辑
摘要:JAVA的动态代理代理模式代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理的创建时期,代理类可以分为两种。静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理:在程序运行时,运用反射机制动态创建而成。 首先看一下静态代理:1、Count.javaJa 阅读全文
posted @ 2014-01-08 16:44 elysee 阅读(252) 评论(0) 推荐(0) 编辑
摘要:紧张而忙碌的一年又即将过去,一向不爱写年终总结的我,突然有了写总结的想法,借此来发表一下自己这些年对工作的看法和对未来的规划。对我来说园子里应该有不少的陌生面孔,先做个自我介绍:80后,快奔3了,性别男,爱好IT(挨踢,IT男称宅男,屌丝男),普通二本毕业,混IT 5年有余,公司支付产品客户端架构,android和windowphone项目负责人,梦想创业、做自己产品。我也是最近才开始逐渐的把注意力转到博客园,感觉以往总总有那些我关注不完的东西,或许是自己的兴趣爱好太广吧,当然都是关注一些自己行业的东西,如新技术、云计算、IT创业资讯方面的东西,发现自己下班或者有空闲时间,都把时间和精力花.. 阅读全文
posted @ 2014-01-07 10:08 elysee 阅读(2953) 评论(9) 推荐(2) 编辑
摘要:如今移动互联网正处于飞速发展的时期,正式看中这个行业的发展势头,本人在2011年从.NET转行做了移动应用开发这块,接触了android和ios开发,到今已快3个年头,先前忙于学习各种基础知识和语法方面的东西,没有闲暇时间写博客。现在终于能空闲一下时间下来写写博客了。以后主要针对android界面开发和通用框架写一系列的文章。 界面开发(即UI)对于一个移动APP来说是至关重要的,UI客户端不比服务端,服务端只要处理业务逻辑,UI客户端既要处理逻辑又要处理界面交互,并且UI端也是经常变动的,UI设计主要是指软件人机交互、操作逻辑、界面美观,同时还要体现舒适、简单、自由,充分体现定位于特点。.. 阅读全文
posted @ 2014-01-06 21:31 elysee 阅读(1424) 评论(4) 推荐(0) 编辑
摘要:数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控制,数据库是数据管理的高级阶段,是在文件系统上发展起来的。 基本结构: 数据库分三个层次:分别为物理数据层、概念数据层、逻辑数据层。 物理数据层:它是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令操作处理的位串、字符和字组成。 概念数据层:它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的... 阅读全文
posted @ 2014-01-06 14:21 elysee 阅读(2660) 评论(3) 推荐(4) 编辑
摘要:优化技巧主要是面向DBA的,但我认为即使是开发人员也应该掌握这些技巧,因为不是每个开发团队都配有专门的DBA的。 第九步:合理组织数据库文件组和文件 创建SQL Server数据库时,数据库服务器会自动在文件系统上创建一系列的文件,之后创建的每一个数据库对象实际上都是存储在这些文件中的。SQL Server有下面三种文件: 1).mdf文件 这是最主要的数据文件,每个数据库只能有一个主数据文件,所有系统对象都存储在主数据文件中,如果不创建次要数据文件,所有用户对象(用户创建的数据库对象)也都存储在主数据文件中。 2).ndf文件 这些都是次要数据文件,它们是可选的,它们存储的都是用... 阅读全文
posted @ 2014-01-06 08:21 elysee 阅读(1934) 评论(3) 推荐(3) 编辑
摘要:关联性能计数器日志和SQL事件探查器跟踪信息进行深入的分析 通过SQL事件探查器可以找出哪些SQL执行时间过长,但它却不能给出导致执行时间过长的上下文信息,但性能监视工具可以提供独立组件的性能统计数据(即上下文信息),它们正好互补。 如果相同的查询在生产库和测试库上的执行时间差别过大,那说明测试服务器的负载,环境和查询执行上下文都和生产服务器不一样,因此需要一种方法来模拟生产服务器上的查询执行上下文,这时就需要结合SQL事件探查器的跟踪信息和性能监视工具的性能计数器日志。 将二者结合起来分析可以更容易找出性能问题的根本原因,例如,你可能发现在生产服务器上每次查询都需要10秒,CPU利用率... 阅读全文
posted @ 2014-01-05 20:28 elysee 阅读(436) 评论(0) 推荐(1) 编辑
摘要:诊断数据库性能问题就象医生诊断病人病情一样,既要结合自己积累的经验,又要依靠科学的诊断报告,才能准确地判断问题的根源在哪里。前面三篇文章我们介绍了许多优化数据库性能的方法,固然掌握优化技巧很重要,但诊断数据库性能问题是优化的前提,本文就介绍一下如何诊断数据库性能问题。 阅读全文
posted @ 2014-01-05 19:29 elysee 阅读(1936) 评论(2) 推荐(6) 编辑
摘要:数据模型描述系统持久性数据库层的逻辑内容与结构,数据模型用UML的类图描述。首先简要介绍数据模型的设计方法及关系数据库的几个术语,然后依次介绍如何将类映射到表、将关联映射到关系数据库及将泛化映射到数据库。 阅读全文
posted @ 2014-01-04 23:03 elysee 阅读(2594) 评论(0) 推荐(0) 编辑
摘要:本章介绍动态模型的设计过程,系统实例的动态模型用序列图来描述,首先介绍选择序列图的理由,最后分别设计各个用例主路径的序列图。本设计结果将充实和完善系统结构的表示服务层、商业上下文服务层、商业规则服务层、数据转化服务层和数据访问服务层的内容。 1、选择序列图 UML以图的形式提供了4种动态模型:序列图、协作图、状态图和活动图,序列图和协作图都是交互图。序列图是描述对象如何交互的,其中最重要的是时间,由于序列图于用例路径有关,所以在大多数动态建模中都要用到它。协作图也是描述对象交付的,但侧重于对象空间的协作,协作图是序列图的“孪生兄弟”,在序列图和协作图中可以任选一个,状态图只有在一个类具... 阅读全文
posted @ 2014-01-04 08:44 elysee 阅读(2985) 评论(0) 推荐(1) 编辑
摘要:经过索引优化,重构TSQL后你的数据库还存在性能问题吗?完全有可能,这时必须得找另外的方法才行。SQL Server在索引方面还提供了某些高级特性,可能你还从未使用过,利用高级索引会显著地改善系统性能,本文将从高级索引技术谈起,另外还将介绍反范式化技术。 阅读全文
posted @ 2014-01-02 09:23 elysee 阅读(1510) 评论(3) 推荐(3) 编辑
摘要:在前面我们介绍了如何正确使用索引,调整索引是见效最快的性能调优方法,但一般而言,调整索引只会提高查询性能。除此之外,我们还可以调整数据访问代码和TSQL,本文就介绍如何以最优的方法重构数据访问代码和TSQL。 阅读全文
posted @ 2014-01-01 09:03 elysee 阅读(1586) 评论(2) 推荐(0) 编辑

点击右上角即可分享
微信分享提示