随笔分类 -  JVM与Java内存模型

Java类加载器的工作原理
摘要:Java类加载器的作用就是在运行时加载类。Java类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它。可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类。单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类。正确理解类加载器能够帮你解决NoClassDefFoundError和java.lang.ClassNotFoundException,因为它们和类的加载相关。类加载器通常也是比较高级的Java面试中的重要考题 阅读全文

posted @ 2013-11-18 10:40 heartstage 阅读(409) 评论(0) 推荐(0)

Java内存模型与多线程
摘要:http://www.infoq.com/cn/articles/java-memory-model-7 阅读全文

posted @ 2013-11-12 22:40 heartstage 阅读(152) 评论(0) 推荐(0)

JVM内存模型和性能优化
摘要:JVM内存模型优点内置基于内存的并发模型: 多线程机制同步锁Synchronization大量线程安全型库包支持基于内存的并发机制,粒度灵活控制,灵活度高于数据库锁。多核并行计算模型基于线程的异步模型。JVM性能的人为问题关键原因是:没有正确处理好对象的生命周期。需要从需求中找出存在自然边界的业务对象,将其对应落实到内存中,成为内存模型In-memory Domain Model。有大小边界限制的内存是缓存,没有永远使用不完的内存,缓存=“有边界的”内存。缓存是Domain Model对象缓存,不同于传统意义上数据库缓存的定义。分布式缓存可以提高巨量数据处理计算能力。Java内存种类Stac. 阅读全文

posted @ 2013-11-11 23:39 heartstage 阅读(505) 评论(0) 推荐(0)

java中类的加载,及执行顺序
摘要:http://hi.baidu.com/linyongboole/item/74c32815dbe5c10fd1d66d04 阅读全文

posted @ 2013-11-10 13:27 heartstage 阅读(159) 评论(0) 推荐(0)

JVM内存管理------GC简介
摘要:为何要了解GC策略与原理? 原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题。如果对GC策略与原理不了解的情况下碰到了前面所说的问题,很多时候会让人不知所措。 当我们了解了相关知识以后,虽然有时候依然不能很快的解决问题,但可以肯定的是,至少不会出现无计可施的情况。GC策略解决了哪些问题? 既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪些问题呢,粗略的来说,主要有以下几点。 1、哪些对象可以被回收。 2、何时回收这些对象。 3、采用什么样的方式回收。 GC策略采用的何种算法 ... 阅读全文

posted @ 2013-10-26 16:52 heartstage 阅读(179) 评论(0) 推荐(0)

JVM内存管理------JAVA语言的内存管理概述
摘要:引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题。 可怕的事情还不只如此,有些使用其它语言开发的程序员,给JAVA程序员扣上了一个“不懂内存”的帽子,这着实有点让人难以接受。毕竟JAVA当中没有malloc和delete、没有析构函数、没有指针,刚开始接触JAVA的程序员们又怎么可能接触内存这一部分呢,更何况有不少JAVA程序员还是跳了专业半路出家的朋友。 不过事实尽管难以接受,但也确实有不少JAVA程序员对内... 阅读全文

posted @ 2013-10-26 16:51 heartstage 阅读(243) 评论(0) 推荐(0)

JVM调优总结
摘要:JVM调优总结最近总结的一些东西,基本上是网上一些资料的汇总。一、相关概念基本回收算法1.引用计数(ReferenceCounting)比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。2.标记-清除(Mark-Sweep)此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。3.复制(Copying)此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用 阅读全文

posted @ 2013-10-23 18:19 heartstage 阅读(769) 评论(0) 推荐(0)

GC日志
摘要:jvm 的GC日志初体验 关于GC的一些参数 -verbose.gc开关可显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。打开-xx:+ printgcdetails开关,可以详细了解GC中的变化。打开-XX: + PrintGCTimeStamps开关,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。最后,通过-xx: + PrintHeapAtGC开关了解堆的更详细的信息。为了了解新域的情况,可以通过-XX:=PrintTenuringDistribution开关了解获得使用期的对象权。启动weblogic服务器之后,初始 阅读全文

posted @ 2013-10-23 18:16 heartstage 阅读(638) 评论(0) 推荐(0)

GC例子
摘要:http://www.iteye.com/topic/262541 阅读全文

posted @ 2013-10-23 18:13 heartstage 阅读(113) 评论(0) 推荐(0)

JVM工作原理和特点
摘要:作为一种阅读的方式了解下jvm的工作原理JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.1.创建JVM装载环境和配置2.装载JVM.dll3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例4.调用JNIEnv实例装载并处理class类。在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间.首先来说一下JVM工作原理中的jdk这个东西,不管你是初学者还是高手,是j2ee 阅读全文

posted @ 2013-10-11 18:09 heartstage 阅读(293) 评论(0) 推荐(0)

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

posted @ 2013-10-11 18:07 heartstage 阅读(180) 评论(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 阅读(176) 评论(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 阅读(263) 评论(0) 推荐(0)

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

posted @ 2013-10-11 18:04 heartstage 阅读(467) 评论(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 阅读(645) 评论(0) 推荐(0)

Java的ClassLoader机制
摘要:http://blog.chenlb.com/2009/06/java-classloader-architecture.htmlhttp://blog.csdn.net/lovingprince/article/details/4238695http://www.cnblogs.com/ericchen/archive/2011/01/15/1936130.html 阅读全文

posted @ 2013-10-11 17:09 heartstage 阅读(164) 评论(0) 推荐(0)

导航