jvm

  • JVM常用分析工具JPS/JINFO/JSTACK/JSTAT/JMAP详解

    最近一直在上项目,导致博主天天加班幸福感爆棚,有木有. 平时一直没有关注过JVM,最近上了一个新的项目,它对内存的需求量比较大,导致目前项目在用的JVM参数不能满足他的需求.起初还没发现是这方面问题,后来在启动的时候报错了,一报错不要紧,要紧就要紧在博主我要调整JVM的参数了.调整参数也不要紧,更要紧的是调不对很让我着急. 因此,我就百谷了下,对JVM的相关内容突击了一下,受益匪浅啊. 废话不扯了,下面就是我的学习笔记啦.本篇博文就和大家分享下平时去分析JVM以及排故障时需要用到的几款工具. 目

    jvm, jps, jinfo, Java, jstackMay 9

  • Tomcat的JVM经常挂掉,根据hs_err_pid23224.log这种日志文件,也没能发现具体是什么原因导致的

    # # A fatal error has been detected by the Java Runtime Environment: # # SIGBUS (0x7) at pc=0x00007f1ae404fd50, pid=23224, tid=139753370498816 # # JRE version: 7.0_17-b02 # Java VM: Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode linux-amd64 c

    tomcat, jvmMay 3

  • 利用JMX监控Tomcat集群

    JMX是Sun在Java5中提出的一种用于监控JVM运行状态的框架和规范,通过JMX可以很方便的检测Tomcat集群各个节点的运行状况.了解JMX可以看这篇文章http://www.ibm.com/developerworks/cn/java/j-lo-jse63/. 具体操作步骤非常简单,首先用文本编辑器打开一个Tomcat节点的Catalina.bat,找到set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.jul

    apache, tomcat, jvm, sun, JavaApril 28

  • JVM垃圾回收器工作原理及使用实例介绍

    垃圾收集基础 Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况.自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担. 拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别.在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间.当内存释放不够完全时,即存在分配但永不释放的内存块,就会引起内存泄漏,严重时甚至导致程序瘫痪. 以下列举了垃圾回收器常用的算法及实

    jvm, 垃圾回收器, java垃圾回收, JVM工作原理April 22

  • private static final long serialVersionUID在实现序列化的类中出现的意义

    转载:http://blog.csdn.net/arthurzil/archive/2009/11/21/4845736.aspx 实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性.如果你修改了此类, 要修改此值.否则以前用老版本的类序列化的类恢复时会出错. 实现后如果你用的是工具的话会出来警告,他会提示你,可以自动生成private static final long serialVersionUID =

    eclipse, jdk, jvm, 编译器, class, compilerApril 20

  • Java的5种键盘输入方式

    package com.test.Log4j; import java.io.BufferedReader; import java.io.Console; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; import javax.swing.JOptionPane; import junit.framework.TestCase; public class Input

    eclipse, byte, jvm, Java, String, exceptionApril 20

  • JAVA程序性能优化

    一.性能调优概述 性能调优概述本章主要是一些理论性的知识.但是同样非常重要,如果要全面地了解一项技术,全面的理论基础可以让对技术了解更加透彻.主要是了解一些关键词和专业术语. 1.1程序性能的体现 执行速度,处理请求和响应的速度 资源使用,合理的内存使用.合理的CPU占用 启动时间,从运行到可以正常处理业务所需的时间 负载承受能力,系统压力上升时,系统的执行速度.响应时间的上升曲线是否平缓 1.2性能的参考指标 执行时间 CPU时间 内存分配 磁盘吞吐量(I/O) 网络吞吐量 响应时间 1.3可

    jvm, 性能优化, 系统设计April 11

  • 一个Java对象到底有多大

    经常遇到一个问题,需要在内存里缓存一批数据来提高效率(避免每次都读取DB).那问题来了,这些对象到底会占用多大内存呢,这直接决定了可以缓存多少条记录,以及上线之后是否会内存不够等问题. 来看几种解决方法. 测试 实践是检验真理的唯一标准!比如你要想cache10w条记录,那你就把10w条记录加载到内存,然后看看到底用了多少内存.至于怎么看内存花了多少,你可以 任务管理器 top Java Runtime类 blabla.... 我们来看看直接从Java程序里能获取到的Runtime. impor

    memory, jvm, Java, ObjectMarch 28

  • Java多线程:线程状态
    Java多线程:线程状态

    一. 线程状态类型 1. 新建状态(New):新创建了一个线程对象. 2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权. 3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码. 4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行.直到线程进入就绪状态,才有机会转到运行状态.阻塞的情况分三种: (一).等待阻塞:运行的线程执行

    jvm, Java, JOIN, 多线程March 26

  • xms/xmx/xss在kette中的调优设置

    kettle是使用java开发的,主要运行在jvm上,这样它的执行效率就和jvm的调优有关了,我在平时的使用中,主要是用kitchen.sh(其实其它的*.sh也是一样的),在默认的情况下内存的使用配置是这样的 # ****************************************************************** # ** Set java runtime options ** # ** Change 512m to higher values in case

    jvm, xss, xmx, xms, kettleMarch 26

  • [010][JVM--类加载器]
    [010][JVM--类加载器]

    JVM--类加载器 类与类加载器 对于任意一个类,都需要由加载它的类加载器和这个类本身一向确立其在Java 虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间.比较两个类是否"相等",只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等.这里所指的"相等",包括代表类的Class 对象的equals() 方法.isAssignableFr

    jvm, 虚拟机, 类加载March 25

  • [009][JVM--类加载机制]
    [009][JVM--类加载机制]

    JVM--类加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载 7 个阶段.其中验证.准备.解析3个部分统称为连接. 加载.验证.准备.初始化和卸载这个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定: 它在某些情况下可以在初始化阶段之后再开始. 一.类初始化的触发 对于初始化阶段,虚拟机规范严格规定了有且只有5 种情况必须立即对类进行"初始化",加载.验证.准备在初始化之前已经进

    jvm, 虚拟机, 类加载March 23

  • [008][JVM--性能监控与故障处理工具]

    JVM--性能监控与故障处理工具 HotSpot虚拟机提供了许多虚拟机运行时调试工具,方便开发人员在应用运行时对虚拟机和应用性能进行监控和优化 jps:JVM Process Status Tool 显示指定系统内所有的HotSpot 虚拟机进程.并显示虚拟机执行主类(Main Class, main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID ( LVMID, Local Virtual Machine Identifier) . jps 命令格式:jps [ options

    jvm, jstat, jps, jmap, jhatMarch 21

  • [007][JVM--内存分配与收回策略]

    内存分配与收回策略 JVM的自动内存管理要自动化地解决两个问题:对象分配内存以及回收分配给对象的内存.回收内存前几篇已经讲了,现在说内存分配.对象的内存分配一般分配在堆内存中,也可能经过JIT 编译后被拆散为标量类型间接地在栈上分配.对象主要分配在新生代的Eden 区上,如果启动了本地线程分配缓存,将按线程优先在TLAB (本地线程分配缓存)上分配.少数情况下也可能会直接分配在老年代中,分配的规则不是固定的,与使用哪一种垃圾收集器组合,还与虚拟机中内存相关参数设置有关. 对象优先在Eden 区分

    jvm, 内存分配, 内存回收March 20

  • [006][JVM--垃圾收集器总结]
    [006][JVM--垃圾收集器总结]

    JVM--垃圾收集器总结 垃圾收集器概览 收集算法是内存回收的方法论,垃圾收集据是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现没有规定,不同的厂商.不同版本的虚拟机所提供的垃圾收集器可能会有很大差别,一般都会提供参数供用户根据自己的所用特点和要求组合出各个年代所使用的收集器.下面是基于JDK 1.7 Update 14 之后的HotSpot 虚拟机垃圾收集器.如果两个收集器之间有连线就说明它们可以搭配使用.直到现在还没有最好的收集器,更加设有万能的收集器,只是对具体应用选择最

    jvm, cms, 算法, 垃圾收集器March 19

  • [005][JVM--Hotspot算法实现存活对象判定和垃圾收集]

    Hotspot算法实现存活对象判断和垃圾收集 枚举根节点 作为GC Roots 的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,它们的数量庞大,逐个检查里面的引用,会消耗很多时间.其次,准确的可达性分析需要暂停用线程的执行. 目前的主流Java 虚拟机使用的都是准确式GC (准确式内存管理Exact Memory Management:虚拟机知道内存中某个位置的数据类型具体是什么),所以当执行系统停顿下米后, 并不需要一个不漏地检验所有执行上下文和全局的

    jvm, hotspot, 虚拟机March 18

  • [004][JVM--垃圾收集算法]
    [004][JVM--垃圾收集算法]

    垃圾收集算法 垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,介绍几种垃圾收集算法的思想及其发展过程. 标记-清除算法 垃圾收集分为"标记" 和"清除"两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象.说它是最基础的收集算法,其他收集算法都是基于这种思路并对其不足进行改进而得到的. 它的主要不足有两个: 效率问题,标记和消除两个过程的效率都不高: 空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片

    jvm, 标记清除, 复制算法, 标记整理, 分代收集March 18

  • [003][JVM--对象已死判定]
    [003][JVM--对象已死判定]

    对象已死! 垃圾收集器在对堆进行回收前,首先要做的事情就是要确定这些对象之中哪些还"存活"着, 哪些已经"死去" (即不可能再被任何途径使用的对象). 1) 引用计数算法 给每个对象中添加一个引用计数器,每当有一个地方引用它时, 计数器值就加l : 当引用失效时,计数器值就减l :任何时刻计数器为0 的对象就是不可能再被使用的.引用计数算法( Reference Counting )的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法.Java 虚拟机里面没有选用引

    jvm, Java, 虚拟机, 对象March 18

  • [002][JVM--HotSpot虚拟机对象探秘]
    [002][JVM--HotSpot虚拟机对象探秘]

    HotSpot虚拟机对象探秘 对象创建 Java 是一门面向对象的编程语言,在Java 程序运行过程中无时无刻都有对象被创建出来.在语言层面上,创建对象(例如克隆.反序列化)通常仅仅是一个new 关键字而己,而在虚拟机中,对象(指普通Java 对象,非数组和Class 对象等) 的创建是一个非常复杂的过程. 虚拟机遇到一条new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过.如果没有,那必须先执行相应的类加载过

    jvm, Java, 对象, 引用, 内存March 17

  • [001][JVM--运行时内存结构]
    [001][JVM--运行时内存结构]

    运行时数据区 Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区,这些区域都有自己各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进行的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁. JVM运行时数据区如下图所示 程序计数器 程序计数器是一块较小的内丰空间.它可以看作是当前线程所执行的字节码行号指示器.在虚拟机概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条要执行的字节指令.分支,循环,跳转,异常处理,线程恢复等基础功能都需

    jvm, Java, 虚拟机, 内存模型March 16

  • [01][JVM内存区域模型]
    [01][JVM内存区域模型]

    Java技术体系模块图 JVM内存区域模型 方法区 也称"永久代" ."非堆", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内存区域.默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小. 运行时常量池:是方法区的一部分,Class文件中除了有类的版本.字段.方法.接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区

    jvm, Java, 内存模型March 14

  • 远程调试Tomcat,本质上就是远程调试JVM
    远程调试Tomcat,本质上就是远程调试JVM

    Eclipse如何远程调试JVM? 如何远程调试JVM? 远程调试Tomcat,本质上就是远程调试JVM.倒不是需要了解JVM自身的运行细节,而是要了解JVM上应用程序的运行细节. 无论如何,我们都要获取JVM运行时的内部信息(比如查看调试信息),并对JVM的运行流程进行控制(比如单步执行),才能达到调试的目的. 这个事情光靠调试器本身,肯定是做不到的.不然,JVM的安全性就大打折扣了.除非JVM提供某种"后门",供调试器查询一些运行时信息,并允许调试器发送一些控制命令. 不得不感慨,

    tomcat, jvmMarch 11

  • Why does Scala not provide any static modifier?

    Scala doesn't provide any static modifier, and that has to do with the design goal of building a pure object-oriented language where every value is an object, every operation is a method call, and every variable is a member of some object. Having sta

    jvm, scalaFebruary 23

  • 一个优秀的Java程序员必须了解的GC机制

    一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能.本文将从GC的工作原理.GC的几个关键问题进行探讨,最后提出一些Java程序设计建议,如何从GC角度提高Java程序的性能. GC的基本原理 GC是什么? 为什么要有GC呢? GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内

    jvm, Java, 算法, 嵌入式, 网络应用January 27

  • [Java系统监控与优化系统系列]--1.3.3.1 运行时数据区
    [Java系统监控与优化系统系列]--1.3.3.1 运行时数据区

    (1)概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁 (2)运行时数据区包含的内容 程序计数器 概述 当前线程所执行字节码的行号指示器 执行Java方法时表示字节码指令的地址 执行Native方法时,值为空 规定的异常 Java虚拟机中唯一没有规定OutOfMemoryError情况的区域 是否线程私有 线程私有 方法区

    jvm, 运行时数据区, 方法区, 虚拟机栈January 19

  • [Java系统监控与优化系统系列]--1.3 代码执行

    1.3.1 解释执行 (1)概述 解释执行就是将字节码在位于内存上的"基于栈的指令集执行引擎"中直接执行 (2)指令集比较 a.基于栈的指令集(字节码) 优点 可移植性 寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束. 使用栈架构的指令集,用户程序不会直接用到这些寄存器,那就可以由虚拟机实现来自行决定把一些访问最频繁的数据(程序计数器.栈顶缓存等)放到寄存器中以获取尽量好的性能,这样实现起来也更加简单 代码相对更加紧凑 字节码中每个字节就对应一条指令,而多

    jvm, 解释执行, 编译执行, 及内存的管理January 19

  • JDK,JRE,JVM区别与联系
    JDK,JRE,JVM区别与联系

    很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. 1.JDK JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar). 最主流的JDK是Sun公司发布的

    jdk, jvm, jre, JavaJanuary 19

  • JVM 内存预警排查
    JVM 内存预警排查

    问题:JVM 内存频繁预警,内存规律性波动. 一. 查看JVM 的GC Collector:Young GC:PS Scavenge | Full GC:PS MarkSweep PS Scavenge 新生代的收集器,也叫 Parallel Scavenge. PS MarkSweep 老生代的收集器,也叫 Serial Old. 二. 内存曲线分析 1. 频繁 Young GC,产生大量碎片 2. 大对象直接进入老生代 三. 尝试优化 1. 调整内存 调大 JVM 之后(1G > 4G),曲

    jvmJanuary 16

  • JVM 之 类的加载与初始化

    JVM中的类或接口的加载,连接,初始化动作都是动态的.加载主要是根据指定的名称找到并读取类或接口的二进制表示形式,然后创建类和接口.连接则是通过验证,准备,解析等动作将相关联的类或接口合并为运行时形态以便可以被JVM执行.初始化的过程主要包括类或接口初始化方法<clinit>的执行. JVM在启动时,首先会加载和创建"启动类",该类由具体JVM实现而定,比如可以在命令行参数中指定.另外该类必须包含public static void main(String[] args)方

    jvm, 初始化January 12

  • (九)用JAVA编写MP3解码器--哈夫曼解码
    (九)用JAVA编写MP3解码器--哈夫曼解码

    解码一帧Layer3第3步:哈夫曼解码 -- huffmanDecoder方法 1.哈夫曼码表 共有33张码表,从ISO/IEC 11172-3复制一张码表出来,看看码表的庐山真面目,下面说到的哈夫曼树的构造及解码过程都以这一张表为例.码表如下所示: Huffman code table 6 x y hlen hcod No. 0 0 3 111 0 0 1 3 011 1 0 2 5 00101 2 0 3 7 0000001 3 1 0 3 110 4 1 1 2 10 5 1 2 4 00

    jvm, htc, Java, 算法, 数据结构January 4

  • Java Concurrency(一)
    Java Concurrency(一)

    现在在CPU上,摩尔定律已经失效,大家都不再追求高频率,而是越来越追求多核,阿姆达尔定律似乎更重要一些了. 并发有很多优点,包括充分利用CPU的多核提高性能,更简单的模型(跟异步的callback hell相比)以及响应更灵敏得GUI等. 但是并发也引出很多问题,最重要的是安全性,很多在单线程环境下理所当然正确的程序在并发下都变得不正确,为了写出并发安全的程序,需要付出更多的努力.本文主要介绍一下并发问题的根本原因,以及针对策略. 来看下面简单的代码,我们知道SimpleDateFormat比较

    concurrency, jvm, Java, 多线程, 并发December 19

  • JVM 之 运行时数据区(更新)
    JVM 之 运行时数据区(更新)

    第一篇 JVM 之 Class文件结构 JVM定义了一系列程序运行期间使用的运行时数据区(run-time data area).这些数据区域中的一些随着JVM的启动而创建直到JVM的停止而销毁,而另一些则随着某个线程的创建而创建,随着线程的销毁而销毁. 为了能更直观的了解JVM的运行时数据区,我们先上张图来瞅瞅整个JVM内存的逻辑布局: 以上仅是一个JVM运行时内存布局的概念模型,我们可以看出JVM主要定义5大类运行时数据区: 1)虚拟机栈,2)方法区,3)本地方法栈,4)堆,5)程序计数器.

    jvmDecember 19

  • Maven 配置参数

    MAVEN_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxNewSize=256m -XX:MaxPermSize=512m"

    jvm, mavenDecember 18

  • JVM 之 Class文件结构

    JVM 之 Class文件结构 本文写作目的: 1)为了加深自己学习的理解,2)帮助正在学习研究JVM的同仁,3)与任何热爱技术的达人交流经验,提升自己 以此为本,文章会尽量写的简洁,尽量保证理解的正确性,如有任何理解不到位或错误的地方,希望朋友们及时指出,严厉拍砖. 开始之前我们需要先了解一些基本的概念,这些概念是学习整个JVM原理的基础. 1)JVM虚拟机规范主要规范了Class文件结构,虚拟机内存结构,虚拟机加载,解析,执行Class文件的行为方式,以及一系列的字节码指令集. 2)Clas

    jvm, Java, class文件, java虚拟机December 16

  • java ClassLoader 基本原理
    java ClassLoader 基本原理

    Ⅰ.类加载器基本概念 顾名思义,类加载器(ClassLoader )用来加载 Java 类到 Java 虚拟机中. 一般来说,Java 虚拟机使用 Java 类的方式如下: Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件). 类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例.每个这样的实例用来表示一个 Java 类.通过此实例的 newInstance()方法就可以创建出该类的一个对

    classloader, jvm, Java, 类加载器, 线程上下文类加载器December 13

  • JVM工作原理和特点

    作为一种阅读的方式了解下jvm的工作原理 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. 在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命

    jvm, Java, 原理December 10

  • 成为Java GC专家(5)-Java性能调优原则
    成为Java GC专家(5)-Java性能调优原则

    这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程.GC的工作原理.新生代(Young Generation)和老年代(Old Generation)的概念.你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响. 在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效. 第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳

    jvmDecember 5

  • 成为Java GC专家(4)-Apache的MaxClients及其在Tomcat执行FullGC
    成为Java GC专家(4)-Apache的MaxClients及其在Tomcat执行FullGC

    这是"成为Java GC专家系列文章"的第四篇. 在第一篇文章 成为JavaGC专家Part I - 深入浅出Java垃圾回收机制 中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及他们的性能如何. 在第二篇文章 成为JavaGC专家Part II - 如何监控Java垃圾回收机制 中我们学到了JVM到底是如何执行垃圾回收,我们如何监控GC,以及那些工具可以使得监控过程更高效. 在第三篇文章 成为Java GC专家系列P

    jvmDecember 5

  • 成为Java GC专家(3)-如何优化Java垃圾回收机制
    成为Java GC专家(3)-如何优化Java垃圾回收机制

    本文是成为Java GC专家系列文章的第三篇.在第一篇<成为JavaGC专家Part I - 深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响. 在第二篇<成为JavaGC专家Part II - 如何监控Java垃圾回收机制>, 我解释了JVM实际上是如何执行垃圾回收的,我们如何监控GC,以及那哪些具可以让我们的工作更快,更高效.在第三篇文章中,我们会基于

    jvm, 垃圾回收December 5

  • 成为JavaGC专家(2)-如何监控Java垃圾回收机制
    成为JavaGC专家(2)-如何监控Java垃圾回收机制

    本文是成为Java GC专家系列文章的第二篇.在第一篇<深入浅出Java垃圾回收机制>中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响. 在本文中,我将解释JVM到底是如何执行垃圾回收处理的. 什么是GC监控? 垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明: 1. 何时一个新生代中的对象被移动到老年代时,所花费的时间. 2. Stop-the-world 何时发生的,持

    jvm, 垃圾回收December 5

  • jvm调优经验分享

    当Java程序申请内存,超出VM可分配内纯的时候,VM首先可能会GC,如果GC完还是不够,或者申请的直接超够VM可能有的,就会抛出内 存溢出异常.从VM规范中我们可以得到,一下几种异常. java.lang.StackOverflowError:(很少) java.lang.OutOfMemoryError:heap space(比较常见) java.lang.OutOfMemoryError: PermGen space (经常出现) java.lang.OutOfMemoryError: G

    jvm, 内存溢出December 3

  • JVM 内存模型
    JVM 内存模型

    Young and Old Generation Xms = JVM初始分配的内存, def: 1/64 (SurviorRation> 0.7) Xmx = JVM最大分配的内存, def: 1/64 (SurviorRation<0.4) Diff between from section and to section Java GC: why two survivor regions? 这是为了解决碎片化问题,如果只有一个存活区,每次从eden区过来的东西就要填进去survivor区的洞

    jvmNovember 28

  • Scala开发环境配置
    Scala开发环境配置

    Scala语言的潜力不亚于groovy,其语法可以说比python还要新,以至于有些人因此难以接受该语法.Scala是一门函数式.命令式的面向对象的基于JVM的编程语言,可以在控制台或者终端直接执行,语法相当简练.屈指.Scala语言目前在国内不是很流行,但好比如国外Google一些老大,像Android系统等,已经使用Scala一段时间了.下面分三步来说明Scala的开发环境的搭配. 配置系统环境变量 在Windows平台下,直接在官网下载msi安装文件即可,安装前提是系统中已经安装了JDK,

    jvm, scalaNovember 1

  • Java虚拟机的JVM垃圾回收机制
    Java虚拟机的JVM垃圾回收机制

    1.JVM内存空间 JVM堆(Heap)= 新生代(Young) + 旧生代(Tenured)  分区作用: 新创建的对象通常先将其分配在新生代中,在新生代中经过若干次GC之后仍未释放的对象,再将它移动到旧生代.为了让内存回收更高效(GC会暂停JVM中的应用),Sun JDK在1.2开始对堆采用了分代管理的方式.在分配对象遇到内存不足时,先对新生代进行GC(Young GC):当新生代GC之后仍无法满足内存空间分配需求时, 才会对整个堆空间以及方法区进行GC (Full GC)  相关参数:

    jvm, 虚拟机, 算法, 内存, 垃圾回收September 25

  • JVM的监控与优化
    JVM的监控与优化

    本文围绕JVM阐述两个方面的内容:监控和优化.监控过程是优化的前提,优化是监控之后采取的措施.JVM的监控主要介绍相关监控工具.定义监控内容:JVM的优化主要包括内存分配和垃圾回收机制设置. 一.JVM的监控 1.JVM监控工具 俗话说,"工欲善其事必先利其器".要对JVM进行监控,首先要选择一款得心应手的监控工具.下面分别介绍JDK自带的监控工具.系统监控工具和商业化的监控工具,相信总有一款是你喜欢的! (1)JDK自带工具:jinfo.jmap.jstack.jstat.JCons

    jvm, 监控, 优化, 内存, dstatSeptember 24

  • jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space

    使用myeclipse启动两个SSH2的部署在tomcat6下的项目 报出java.lang.OutOfMemoryError: PermGen space 解决办法: 在myeclipse中加大jvm内存方法: Window->Preferences->Myeclipse->Services->Tomcat->Tomcat 6.x->JDK,在Optional Java VM arguments:下边的输入框里输入: -Xms128m -Xmx512m -XX:Per

    tomcat, jvm, outofmemoryerror, space, PermGenSeptember 23

  • JVM系列-虚拟机性能监控与故障处理工具(三)

    SUN JDK监控和故障处理工具 1,jps:JVM Process Status Tool ,显示指定系统内所有的HotSpot虚拟机进程 2,jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 3,jinfo:Configuration Info For Java,显示虚拟机配置信息 4,jmap:Memory Map for Java,生成虚拟机的内存转储快照 5,jhat:JVM Heap Dump Browser,用于

    jvm, Java, 垃圾回收, 虚拟机性能监控August 29

  • JVM系列-垃圾收集器与内存分配策略(二)

    1,判断对象是否存活 a,引用计数算法 :给对象添加一个引用计数器,每当有个地方引用他时,计数器+1,失效时-1,为0的对象就是不可能再被使用的.java没有选用引用计数算法来管理内存,其中主要原因是很难解决对象之间的互相循环引用的问题. b,根搜索算法:通过一系列的名为"GC ROOTS"的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为应用链,当一个对象到GC ROOTS没有任何引用链相连时,则证明此对象是不可用的.java使用此算法. c,引用 轻引用:Object o

    jvm, Java, jvm内存区域, java垃圾回收August 29