关闭

Java虚拟机解析篇之---垃圾回收器

上一篇说了虚拟机的内存模型,在说到堆内存的时候我们提到了,堆内存是Java内存中区域最大的一部分,而且垃圾回收器主要就是回收这部分的内容。那么这篇就来介绍一下垃圾回收器的原理以及回收的算法。 Java中的垃圾回收器(GC)是Java中比较有特色的一点,不需要我们手动的去管理一个对象,不想C++中的构造函数和析构函数一样,需要程序猿自己去手动的管理,很容易造成内存泄露的问题。当然如果学过OC语...
阅读(171) 评论(0)

[置顶] Java虚拟机解析篇之---内存模型

今天闲来无事来,看一下Java中的内存模型和垃圾回收机制的原理,关于这个方面的知识,网上已经有很多现成的资料可以供我们参考,但是知识还是比较杂的,在这部分知识点中有一本书不得不推荐:《深入理解Java虚拟机》,现在已经是第二版了。这本书就从头开始详细介绍了Java整个虚拟机的模型以及Java的类文件结构,加载机制等。这里大部分的知识点都是可以在这本书中找到的,当然我是主要还是借鉴这本书中的很多内容...
阅读(272) 评论(0)

Java 的方法签名与字段类型表示-[Ljava.lang.String;

我们什么时候会接触到 Java 的方法签名呢?在进行 JNI 调用时,还有在看方法重载时。重载的方法是有不同的方法签名的,而是不区分返回值,而实际方法签名还揉入了返回值类型的,还有就是 javap -s 查看方法签名时,如 javap -s java.util.Date。 看来方法签名与我们实际工作的关系还真的不大。倒是有次遇着了,事出于 Struts2 应用中提交表单时报出了下面的错误: ...
阅读(618) 评论(0)

Tomcat 启动命令行参数

CATALINA_OPTS="$CATALINA_OPTS -server -Djava.awt.headless=true -Xms2560m -Xmx2560m -Xss512k -XX:PermSize=128m -XX:MaxPermSize=384m  -XX:NewSize=1024m -XX:MaxNewSize=1024m -XX:SurvivorRatio=22 -XX:+Us...
阅读(549) 评论(0)

JVM参数:MaxTenuringThreshold和TargetSurvivorRatio说明

-XX:MaxTenuringThreshold 在新生代中对象存活次数(经过Minor GC的次数)后仍然存活,就会晋升到旧生代。 -XX:TargetSurvivorRatio 一个计算期望存活大小Desired survivor size的参数. 计算公式: (survivor_capacity * TargetSurvivorRatio) / 100 * sizeof(a ...
阅读(285) 评论(0)

聊聊JVM的年轻代

1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会...
阅读(484) 评论(0)

JVM 触发Full gc条件

本文参考:http://blog.csdn.net/chenleixing/article/details/46706039  给出各个场景下可能触发full gc的实例代码. 1.调用System.gc import java.util.ArrayList; import java.util.List; /** * * created by: gaoxingliang@outl...
阅读(646) 评论(0)

JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解

jps 查看所有的jvm进程,包括进程ID,进程启动的路径等等。 我自己也用PS,即:ps -ef | grep java jstack 观察jvm中当前所有线程的运行情况和线程当前状态。 系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java...
阅读(249) 评论(0)

类加载器和双亲委派模型

类加载器按照层次,从顶层到底层,分为以下三种:  (1)启动类加载器(Bootstrap ClassLoader)   这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用。  (2)扩展类加载器(Extension ClassLoader)   这...
阅读(399) 评论(0)

使用Eclipse Memory Analyzer进行内存泄漏分析三部曲

一、准备工作  分析较大的dump文件(根据我自己的经验2G以上的dump文件就需要使用以下介绍的方法,不然mat会出现oom)需要调整虚拟机参数  找个64位的系统在MemoryAnalyzer.ini设置-Xmx2g  如果是32位的xp可以使用下面的方法进行尝试: 安装jrockit 6.0的JDK mat使用jrockit的jdk来启动 Java代码   ...
阅读(913) 评论(0)

利用MemoryAnalyzer进行OutOfMemoryError的诊断分析

这篇帖子只介绍利用MemoryAnalyzer进行简单的JVM的堆的分析,至于JVM的内部结构是怎么样的,这里不进行分析。好吧,废话不多说;首先如果我们要分析JVM某个时刻的Heap的对象分配情况,我们就必须要dump这个时刻的JVM的heap(堆);有以下几个办法进行dump某个时刻JVM的heap内容:          1、 使用$JAVA_HOME/bin/jmap -dump来触发...
阅读(799) 评论(0)

MAT(Memory Analyzer Tool)工具入门介绍

1、MAT是什么?     MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。      ...
阅读(272) 评论(0)

JAVA和JVM运行原理揭秘

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。 AD:   这里和大家简单分享一下JAVA和JVM运行的原理,Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在O...
阅读(838) 评论(0)

JVM性能调优

最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录。 一、JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代)Tenured(年老代)永久代(Perm)   其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过...
阅读(458) 评论(0)

eclipse的优化 gc.log

原帖:http://www.javaeye.com/topic/756538 性能优化从身边做起。    首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse。优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡,也就是没有full GC。   开始:   eclipse.ini里加...
阅读(2806) 评论(0)
18条 共2页1 2 下一页 尾页
    个人资料
    • 访问:7063502次
    • 积分:61846
    • 等级:
    • 排名:第34名
    • 原创:250篇
    • 转载:2619篇
    • 译文:3篇
    • 评论:666条
    文章分类
    最新评论