- 浏览: 1011406 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
先说tuning,gc有两个指标,一个是frequentcy(以下称F),一个是duration
(以下称D)
。
前者和程序产生garbage的速率和java heap大小有关,后者和java heap大小及gc
thread数有关。依据应用程序的差异,F可能为30秒/次或者数小时/次不等,都是可接受的,而D则越短越好,因为它jvm让人感到pause的时
刻。在应用程序和gc thread数给定的条件下,F和D是矛盾的,一个的减小意味着另一个的增大,因为F低了,说明heap
size很大,而大的heap意味着gc要花费较多的时间,即D要增加,反之亦然。下面是几条准则:
以上是一般过程,当然,你还应该参考所使用的jvm的document,
注意其特征
。
续trouble shooting
内
存方面的trouble
shooting主要就是解决OutOfMemory(以下简称OOM),导致OOM的原因总的来说有2种:第一是内存泄露,随着运行时间增加,内存逐渐
吃紧,终于不治;第二是实际需要大于最大heap size,也就是说-Xmx太小了,需要调高(如果你上面的tuning做好了,就不会这样了
)。
直接原因就五花八门了,比如有的jvm,当在80%的cpu时间内,不能gc出2%的heap时,也发生OOM,还有一种可能是,你的heap实际使用并
不大,free空间总数是充足的,但不巧的是free空间都是碎片而heap又不能compact,那么内存分配请求失败,发生OOM。
一般发生OOM时,jvm会导出heapdump,即使你对系统一无所知,只拥有一个heapdump就足以了。IBM alphaWorks上有一个HeapRoots
工具可以用来分析heapdump(最好使用ibm的jre运行该工具,对于有些phd格式的堆,还用当使用svcdump.jar
)。
假如你没有heapdump可用,那么需要检查系统是否禁止了heapdump,甚至有时需要手工使jvm产生heapdump(unix环境下,kill -3 pid,win32下,ctrl+break)。
一切就绪后,使用命令行
>
java -Xbootclasspath/p:svcdump.jar -Xmx768M
-jar HR207.jar -i heapdump.xxxx.phd
注意:如果heapdump文件本身很大,
-Xmx768M需要增大;分析时尽量使用高配置的计算机,否则太慢,你会比较郁闷。
启动heaproots作分析,load完毕后:
注:一般发生OOM时,有的jvm在heapdump之前,会作一次gc,以利对堆的分析。
再注:以上的手段在实际中多次应用,有效率达99.9999%以上!
发表评论
-
A Collection of JVM Options
2011-06-24 12:59 1158A Collection of JVM Options ... -
java中堆(heap)和堆栈(stack)有什么区别
2011-05-10 14:29 894stack 和 heep 都是内存的一部分 stack 空间 ... -
JVM & Memory (4) gc
2011-05-10 14:22 911不同的JVM实现对堆结构的设计有所不同,这里先说说共性的,然后 ... -
JVM & Memory (3) thread
2011-05-10 14:21 907以下继续探讨,说说jvm ... -
JVM & Memory (2) java.exe
2011-05-10 14:20 945上篇说到了关于java heap ... -
JVM & Memory (1) paging
2011-05-10 14:19 960近期看了一些有关JVM和内存的资料,为了避免遗忘,特在这里作一 ... -
JDK TOOLS
2011-05-10 14:15 814以下这几种工具(存在于 ... -
jvm日志分析工具应用
2011-05-10 14:14 2817涛涛学习笔记之gc日志分析工具 测试环境:xp+weblog ... -
JVM优化配置
2011-05-10 13:56 935OOM 这个缩写就是Java程 ... -
高手详细介绍JVM是什么?
2011-05-10 13:52 875首先这里澄清两个概念:JVM实例和JVM执行引擎实例,JVM实 ... -
JVM监控工具介绍
2011-03-22 14:25 891... -
正确认识java JVM与c/c++的执行效率
2011-03-22 10:43 1412认为Java 不能写JVM是完全错误的。JNode是一个用 ... -
Java虚拟机(JVM)参数配置说明
2011-03-22 10:26 986Java虚拟机(JVM)参数配置说明 ... -
解析 Java 类和对象的初始化过程
2011-03-21 23:40 910解析 Java 类和对象的初始化过程 由一个单态模式引出的问 ... -
JDK的概念、组成及JDK常用包
2011-03-18 22:09 1140JDK概述 JDK (Java Development ... -
安装JDK后JRE与JVM联系浅谈
2011-03-18 22:08 917安装JDK后JRE、JVM之间的 ... -
详细介绍什么是Java虚拟机
2011-03-18 22:07 842本文由浅入深,先从什么是Java虚拟机、Java虚拟机 ... -
认识Java虚拟机及其性能
2011-03-18 22:04 727Java虚拟机(Java virtual ... -
JVM GC调整优化过程全揭秘
2011-03-18 22:03 840JVM GC调整优化是以个极为复杂的过程,由于各个程序具备 ... -
Java虚拟机的研究与实现(图文)
2011-03-18 21:59 1033引言 Java 虚拟机本质是就是一个程序,当它在命令行 ...
相关推荐
5. **内存模型(Java Memory Model, JMM)** JMM规定了线程如何访问和修改共享变量,确保并发程序的正确性。它定义了 volatile、synchronized 和 final 关键字的行为,并规定了 Happens-Before 关系。 了解JVM的...
5. **JVM参数调整**:通过设置-Xms、-Xmx控制堆内存大小,-XX:NewRatio调整新生代和老年代比例,-XX:SurvivorRatio设定新生代中Eden和Survivor的比例,-XX:MaxHeapFreeRatio、-XX:MinHeapFreeRatio控制堆空闲空间,...
包括文本字符串、基本类型、final常量、类信息等。符号引用在运行时被解析为直接引用,实现动态链接。 3. **虚拟机栈(JVM Stack)** - **栈帧(Stack Frame)**:每个线程有自己的虚拟机栈,每个方法调用对应一个...
5. JConsole:图形界面的JVM监控工具。 总结,了解JVM对于Java开发者至关重要,它涉及类加载、内存管理、垃圾收集、性能优化等多个方面。深入研究JVM源码,结合使用各种JVM工具,可以提升我们的编程能力和问题解决...
5. **程序计数器(Program Counter Register)** 这是最小的一块内存区域,用于记录当前线程正在执行的字节码指令的地址。如果线程正在执行的是一个Java方法,计数器记录的是虚拟机字节码指令的地址;如果是native...
5. **内存模型(Java Memory Model, JMM)**:定义了线程之间的共享变量如何交互和可见性。 volatile关键字、synchronized和final关键字都在此模型中扮演重要角色。 6. **类加载与双亲委派模型**:为了保证类加载的...
Java Memory Model (JMM) 是Java虚拟机(JVM)的一个核心概念,它定义了程序中的各种变量(线程共享变量)的访问规则以及这些变量在各个线程之间的可见性问题。JMM的核心目标是解决由线程交替执行和现代计算机内存系统...
5. **JVM性能调优** 通过设置JVM参数,可以优化内存分配、垃圾收集策略、线程管理等。例如,`-Xms` 和 `-Xmx` 分别设置堆内存的初始大小和最大大小,`-XX:+UseG1GC` 开启G1垃圾收集器。 6. **JVM内存模型** Java...
Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)规范的一部分,它定义了共享变量的访问规则和内存操作的细节。Java内存模型在并发编程中非常重要,因为它规定了线程如何和何时可以看到由其他线程修改的...
5. **Foreign function & memory API(外部函数和内存API)**:提供了一种安全的方式,让Java代码能够直接调用本地(非Java)代码和管理非Java内存,提高了性能。 安装JDK 18.0.2.1_windows-x64_bin.exe后,开发者...
除了上述内存区域外,Java还支持直接内存(Direct Memory),这部分内存并不由JVM直接管理,而是通过NIO(New Input/Output)类调用本地方法直接分配在Java堆外的内存,这些内存可以用来建立大型缓存等,从而提高IO...
5. **垃圾收集**:JVM有自动的内存管理系统,负责回收不再使用的对象,以避免内存泄露。不同的垃圾收集算法,如标记-清除、复制、标记-整理和分代收集,各有优缺点,选择合适的策略能提高性能。 6. **内存模型...
Java内存模型(JVM Memory Model,简称JMM)是Java平台中的核心概念,它定义了程序中各个线程如何共享和访问数据,以及在多线程环境下如何保证数据的一致性。深入理解JMM对于编写高效、可靠的并发程序至关重要。 1....
1. 方法区(Method Area):存储类信息、静态变量、构造函数、final常量、类字段和方法等。在Hotspot虚拟机中,这部分对应持久代(Permanent Generation),当方法区超出其限制时,会抛出`OutOfMemory: PermGen ...
Java内存模型(JVM Memory Model,简称JMM)是Java平台中的一个重要概念,它定义了在多线程环境下,如何在共享内存中读写数据,以及如何保证数据的一致性和可见性。本教程《深入理解JAVA内存模型》将带你深入探讨这...
JVM在编译时或运行时会插入适当的内存屏障来保证JMM的正确性。 4. **happens-before原则**: - 这是JMM中的一个重要概念,它定义了两个操作的相对顺序。如果操作A happens-before 操作B,那么在所有线程中,A的...
5. **栈内存(Stack Memory)**:每个线程都有自己的程序计数器、虚拟机栈和本地方法栈。局部变量、方法参数和方法执行过程中的临时数据都在栈中存储,当方法执行完毕,栈帧会被弹出,其占用的内存也随之释放。 6. ...
- 掌握常用的关键字如`final`、`static`、`abstract`等的意义和用法。 **1.2.5 使用集合框架** - 理解`List`、`Map`、`Set`等接口及其具体实现类的区别和适用场景。 - 学会如何遍历这些集合,并针对不同的需求选择...
- Java中有许多关键字,如`public`、`private`、`static`、`final`等,理解它们的作用域和使用场景对于编写高质量的代码至关重要。 **1.2.5 使用集合框架** - 掌握`List`、`Set`、`Map`等接口及其典型实现类(如`...
Java内存模型(JVM Memory Model,简称JMM)是Java平台中的一个重要概念,它定义了程序中各个变量的访问规则,以及在多线程环境下的内存一致性效果。JMM主要解决的是并发环境下不同线程之间如何共享数据以及如何保证...