
JVM
文章平均质量分 78
码老师
学习使我兴奋,妈妈不要拦我
展开
-
JVM调优总结(三)-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep): 此算法执行分两阶段。第一阶段从引用根节点开始标记所有转载 2013-07-15 11:32:00 · 618 阅读 · 0 评论 -
JVM--VisualVM 无法检测到本地java应用程序
症状:安装了JDK 6,设置了JAVA_HOME变量,运行某个Java程序(比如Tomcat或JDK自带的java2Demo.jar)后,运行jds后不显示运行Java程序相关的信息原因:1. Java程序缺少读写Windows的临时目录的权限2. Windows的临时目录是放在非NTFS分区(确切地说,是不支持ACL的分区)解决办法:1. 重新授权转载 2013-07-16 11:21:28 · 7065 阅读 · 1 评论 -
JVM调优的标准参数的各种陷阱
所谓“标准参数”是件很微妙的事情。确实有许多前辈经过多年开发积累下了许多有用的调优经验,但向他们问“标准参数”并照单全收是件危险的事情。 前辈们提供的“标准参数”或许适用于他们的应用场景,他们或许也知道这些参数里隐含的陷阱;但听众却不一定知道各种参数背后的缘由。 原则上说,在生产环境使用非标准参数(这里指的是在各JDK/JRE实现特有的、相互之间不通用的参数)应该尽量避免。这些参数转载 2013-07-15 15:05:52 · 1352 阅读 · 0 评论 -
Java内存泄露的理解与解决
Java内存管理机制在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期。从申请分配、到使用、再到最后的释放。这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记释放内存,从而导致内存的泄露。Java语言对内存管理做了自己的优化,这就是垃圾回收机制。Java的几乎所有内存对象都是在堆内存上分配(基本数据类型除外),然后由GC(garbage coll转载 2013-07-15 14:11:19 · 524 阅读 · 0 评论 -
JVM调优总结(十)-调优方法
JVM调优工具Jconsole,jProfile,VisualVMJconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。 如何调优观察内存释转载 2013-07-15 14:07:20 · 663 阅读 · 0 评论 -
JVM内存限制问题解决方案
这里向大家描述一下JVM内存限制的解决方法,众所周知,JVM内存是受限的,一为机器的体系架构,二为操作系统本身,当然各操作系统的内存管理机制也有区别。你对解决JVM内存限制有什么好的方法吗,这里向大家简单介绍一下,希望对你的学习有所帮助,毕竟各操作系统的内存管理机制也有区别的。JVM内存限制解决方案众所周知,JVM内存是受限的,一为机器的体系架构,二为操作系统本身。x86,x8转载 2013-07-15 14:39:51 · 874 阅读 · 0 评论 -
JVM调优总结(九)-新一代的垃圾回收算法
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对转载 2013-07-15 11:58:10 · 556 阅读 · 0 评论 -
JVM调优总结(八)-典型配置举例2
常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个转载 2013-07-15 11:56:22 · 514 阅读 · 0 评论 -
JVM调优总结(七)-典型配置举例1
以下配置主要针对分代垃圾回收算法而言。 堆大小设置年轻代的设置很关键JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478转载 2013-07-15 11:54:13 · 650 阅读 · 0 评论 -
JVM调优总结(六)-分代垃圾回收详述2
分代垃圾回收流程示意 选择合适的垃圾收集算法串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。可以使用-XX:+UseSerialGC打开。 并行收集器转载 2013-07-15 11:51:33 · 545 阅读 · 0 评论 -
JVM调优总结(五)-分代垃圾回收详述1
为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程转载 2013-07-15 11:43:09 · 602 阅读 · 0 评论 -
JVM调优总结(四)-垃圾回收面临的问题
如何区分垃圾 上面说到的“引用计数”法,通过统计控制生成对象和删除对象时的引用数来判断。垃圾回收程序收集计数为0的对象即可。但是这种方法无法解决循环引用。所以,后来实现的垃圾判断算法中,都是从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进转载 2013-07-15 11:35:26 · 484 阅读 · 0 评论 -
java_lang_OutOfMemoryError_unable_to_create_new_native_thread内存泄漏分析
【问题现象】:自动化用例跑了约三个多小时后,界面响应时间长,界面出现500错误。之后再点击时,页面重定向至首页。查看jboss下的server.log文件发现内存溢出的OutOfMemory异常。【出现的问题日志】:java.lang.OutOfMemoryErrorat java.util.zip.ZipFile.open(Native Method)at java.util转载 2013-07-15 11:00:21 · 1525 阅读 · 0 评论 -
JVM调优总结(二)-一些概念
Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8by转载 2013-07-15 11:14:08 · 569 阅读 · 0 评论 -
JVM调优总结(一)-- 一些概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类转载 2013-07-15 11:06:15 · 527 阅读 · 0 评论 -
Java的堆与非堆内存
堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给 自己转载 2014-03-21 11:36:57 · 800 阅读 · 0 评论