2013年10月11日

JVM的内存模型

摘要: Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域mainmemory,而每个线程又单独的有自己的工作内存,当线程与内存区域进行交互时,数据从主存拷贝到工作内存,进而交由线程处理(操作码+操作数)。................. 阅读全文

posted @ 2013-10-11 18:07 heartstage 阅读(164) 评论(0) 推荐(0) 编辑

JVM的参数配置

摘要: JVM管理的内存叫堆。在32Bit操作系统上有1.5G-2G的限制,而64Bit的就没有。JVM初始分配的内存由-Xms指定,默认是物理内存的1/64但小于1G。JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4但小于1G。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,可以由-XX:MinHeapFreeRatio=指定。默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制,可以由-XX:MaxHeapFreeRatio=指定。 阅读全文

posted @ 2013-10-11 18:06 heartstage 阅读(163) 评论(0) 推荐(0) 编辑

JVM加载Class文件的机制

摘要: 1.Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的, 类装载器所做的工作实质是把类文件从硬盘读取到内存中2.java中的类大致分为三种: 1.系统类 2.扩展类 3.由程序员自定义的类3.类装载方式,有两种 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中, 2.显式装载, 通过class.forname()等方法,显式加载需要的类 隐式加载与显式加载的区别: 两者本质是一样?, ?4.类加载的动态性体现 一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的... 阅读全文

posted @ 2013-10-11 18:05 heartstage 阅读(255) 评论(0) 推荐(0) 编辑

JVM的内存布局

摘要: JVM的内存布局包括,其中:Java虚拟机在执行Java程序的过程中会把它所管理的内存(线程相关?)划分为若干个不同的数据区域。有些区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据规范,Java虚拟机所管理的内存包括以下运行时数据区域:方法区MethodArea堆Heap虚拟机栈VMStack本地方法栈NatvieMethodStack程序计数器ProgramCouterRegistern程序计数器程序计数器是当前线程所执行的字节码的行号指示器。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器 阅读全文

posted @ 2013-10-11 18:04 heartstage 阅读(450) 评论(0) 推荐(0) 编辑

内存泄露和内存溢出的区别和处理方式

摘要: 内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件设计缺陷引起的。1)java.lang.OutOfMemoryError:PermGenspacePermGenspace的全称是PermanentGenerationspace,是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC不会在主程序运行期对PermGen 阅读全文

posted @ 2013-10-11 18:03 heartstage 阅读(613) 评论(0) 推荐(0) 编辑

Java集合类

摘要: HashMap和HashTable的区别Ø最明显的区别在于Hashtable是同步的(每个方法都是synchronized),而HashMap则不是.ØHashMap继承至AbstractMap,Hashtable继承至Dictionary,前者为Map的骨干,其内部已经实现了Map所需要做的大部分工作,它的子类只需要实现它的少量方法即可具有Map的多项特性。而后者内部都为抽象方法,需要它的实现类一一作自己的实现,且该类已过时Ø两者检测是否含有key时,hash算法不一致,HashMap内部需要将key的hash码重新计算一边再检测,而Hashtable则直接利用 阅读全文

posted @ 2013-10-11 18:02 heartstage 阅读(190) 评论(0) 推荐(0) 编辑

HashCode()的作用

摘要: 在实现Hash算法的集合里面,例如HashSet,该集合不能存放相同的数据,HashSet会根据对象的equals()和hashCode()方法来判断要存放的数据是否已经存在。Hash算法把HashSet划分成多个区域,每个区域就是以哈希码来作为该区域的唯一编码,而hashCode()的作用就是为某对象生成一个哈希码。Hash算法会认为如果两个对象的equals()比较后相等,那么它所对应的hashCode也应该相等,那么HashSet会从该哈希码所对应的那个区域来查找是否已经存在该对象数据,不存在则放进去。而如果只提供equals方法,不提供hashCode()方法,就算判断出两个对象引用相 阅读全文

posted @ 2013-10-11 18:00 heartstage 阅读(250) 评论(0) 推荐(0) 编辑

利用Java的反射与代理机制实现AOP

摘要: 在上一篇文章中,我们讲述了利用Java的反射机制中实现Spring中的IOC,在本文中,我们将更进一步,讲述用Java的反射和动态代理机制来实现Spring的AOP。一.AOP概述 AOP(AspectOrientedPrograming),即面向切面编程,它主要用于日志记录、性能统计、安全控制、事务处理、异常处理等方面。它的主要意图就要将日志记录,性能统计,安全控制、事务处理、异常处理等等代码从业务逻辑代码中清楚地划分出来。通过对这些行为的分离,我们希望可以将它们独立地配置到业务逻辑方法中,而要改变这些行为的时候也不需要影响到业务逻辑方法代码。 下面让我们来看一个利用AOP来实现日志记录的例 阅读全文

posted @ 2013-10-11 17:56 heartstage 阅读(726) 评论(0) 推荐(0) 编辑

String、StringBuffer与StringBuilder之间区别

摘要: 最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下 1.三者在执行速度方面的比较:StringBuilder> StringBuffer > String 2.String 1Strings="abcd"; 2s=s+1; 3System.out.print(s);//result:abcd1 我们明明就是改变了String型的变量s的,为什么说 阅读全文

posted @ 2013-10-11 17:53 heartstage 阅读(145) 评论(0) 推荐(0) 编辑

Java的反射机制

摘要: 一、什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。反射本身并不是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述 阅读全文

posted @ 2013-10-11 17:53 heartstage 阅读(277) 评论(0) 推荐(0) 编辑

导航