- 浏览: 881959 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- android (55)
- CSS (23)
- eclipse (25)
- Data Structes and Algorithms (53)
- J2SE (87)
- Java_面试学习_j2se (26)
- java_面试学习_非技术 (13)
- java_gui (2)
- java_设计模式 (27)
- JDBC (10)
- java_web (15)
- hibernate (5)
- Oracle (37)
- Struts2 (7)
- Word-----dos (24)
- Jbpm (3)
- java小技巧 (8)
- math (1)
- flex (12)
- WebService (4)
- 生活 (9)
- 小框架或小语言 (27)
- spring (1)
- 面试~~~软实力 (7)
- jstat的用法 (1)
- jmap (1)
- 数据链路层和传输层的流量控制区别 (1)
- shell (0)
- 财商 (1)
- javascript (0)
- js研究 (1)
- 代码收集 (0)
最新评论
-
海尔群:
http://jingyan.baidu.com/articl ...
android加密 -
完美天龙:
------------------------- ...
asm----字节码操纵 -
houniao1990:
大神,请问 string 类型 定义为 oracle的 cha ...
hibernate注解 -
JamesQian:
Line:103
f.doFilter(msg);
是否需 ...
责任链模式_过滤器模式 -
sacoole:
好评
interview--- 如何从N个数中选出最大(小)的n个数?
垃圾收集的实现: 1。引用计数:一个A对象,如果有程序使用了这个引用对象,那么引用计数加1, 当一个对象使用完毕之后引用计数减1,那么引用计数为0的时候,则可以回收 他不能识别循环引用 2。跟踪收集 如果A对象引用了B对象,那么虚拟机会记住这个引用路径,同时B对象引用了C对象,那么也会记录这个路径 如果一个对象没有在路径图中,那么可以收集 缺点:需要维护一张引用的全景图,增加了内存开销,和图的遍历开销 3.基于对象跟踪的分代增量收集 基于对象跟踪---说明是由跟踪收集发展而来的,分代是指对堆进行了合理的划分 增量收集:不是每一次全部收集,而是累积的增量收集 Sun的JVM将整个堆分为三代:YoungGen,OldGen和PermGen(持久区),对YoungGen GC 是相对高效和快速的,YoungGen中,经历了若干次的 GC依然存活的对象(说明这些对象使用频率高, 不应该马上回收,所以让他们养老而不是直接干掉),"晋升"到OldGen.内存占用较大的对象, 则直接分配到OldGen(因为这种中型对象肯定不会被马上回收,会占用一定得生存时间,比如一 个数据库连接,我们需要对他进行缓存,需要反复利用,不会马上回收,所以重型对象放到老年 区可以使得他回收更慢),而PermGen 中用于存放长时间存活的对象,如 Class对象基础数据信息, 以及全局应用配置信息 Eden survivor spaces virtual -------------Young----------------- 最开始一个对象会放到Young中的Eden,经过一定的时间会被复制到survivor spaces ,有些可能被复制到 年老区,被赋值剩余后的对象会被回收。 细致分析: 年轻区被进一步分为一个Eden区和两个Survior Space,而两个Suriveor Space 在同一时刻,总有一个是空的,这个空的Survivor Space被称为To Space,另外一个则被称为 From Space,在年轻区进行GC时,Eden中存活的对象会被copy到To Space中(大对象直接被拷贝到OldGen), From Space 中尚不够Old资格的对象也被copy到To Space中,而剩余的则"晋升"到OldGen中。当To Space不足时, 那么本该被拷贝到To Space中的对象则被Tenured(拷贝到了年老对象当中)。。。。这里会带来性能问题哈--因为年老对象 会被认为是不应该轻易回收的,所以考量他回收的条件相对复杂得多,所以对年老对象的回收比对年轻对象的回收耗资源得多, 他甚至会挂起你的应用来收集资源,超卡。。。。。SUN JVM提供了调节Surivor Space大小的参数,当GCLog中出现Tenured字 样时,就可能是Surivor Space不够大造成的。 当年老区没有足够的空间,无法接纳由年轻晋升来的对象,那么YoungGen Collection Algorithm(年轻区算法)将会停止, 整个GC将会进行年老区域算法(因为JVM会认为,年轻区中这时也存在年老对象,当然需要使用年老算法啦)--术语:叫做 "全收集",对于OldGen不能只看其人有空闲就认为其大小已经足够,因为很可能一次年轻区的拷贝就可能触发全收集 小收集:当分配器不能满足分配请求时,先触发一个小收集,他只收集年轻区,因为年轻区的许多对象已经死亡,复制收集器 完全不用分析死亡原因,所以小收集快,高效 下面是阿里的邮件: Dear all: 最近在测试环境经常出现应用的jboss进程在运行了一段时间后crash的情况,在应用的jboss日志中出现以下出错信息: # JRE version: 6.0_18-b07 # Java VM: Java HotSpot(TM) 64-Bit Server VM (16.0-b13 mixed mode linux-amd64 ) # Problematic frame: # V [libjvm.so+0x6227df] # # An error report file with more information is saved as: # /home/6080/work/intl-myaliexpress/deploy/hs_err_pid29858.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp 到底是什么原因导致以上情况的发生呢?那我们就需要查看具体的hs_err_pid29858.log日志文件来找答案了。 在该文件的第17行有以下信息: Current thread (0x00000000542e5800): GCTaskThread [stack: 0x00000000415a1000,0x00000000416a2000] [id=29861] 说明jvm在crash时,执行的是线程是GCTaskThread。 我们再来看具体出了什么问题,在文件的第251——261行有以下内容: =>0x00000000542e5800 (exited) GCTaskThread [stack: 0x00000000415a1000,0x00000000416a2000] [id=29861] VM state:at safepoint (normal execution) VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) [0x00000000542cddf0] Threads_lock - owner thread: 0x0000000054334800 [0x00000000542ce2f0] Heap_lock - owner thread: 0x00002aab00003000 Heap PSYoungGen total 349120K, used 348912K [0x00002aaae46d0000, 0x00002aaaf9c20000, 0x00002aaaf9c20000) eden space 348672K, 100% used [0x00002aaae46d0000,0x00002aaaf9b50000,0x00002aaaf9b50000) 从上面的日志可以肯定是Young GC的时候发生了异常,导致JVM crash。 在询问了老董和伯虎后,发现这个是JDK1.6.0_18的已知bug,bug report地址:http://bugs.sun.com/view_bug.do?bug_id=6896647 其主要原因是card-marking performance optimization算法在实现的时候有瑕疵,在某些情况下会引起heap corruption。这个情况主要发生在新创建的大对象 和Eden space大小差不多,然后jvm做young GC的时候。 解决方案:在启动参数中增加-XX:-ReduceInitialCardMarks将性能优化策略关闭。
发表评论
-
jdbc--批处理
2012-06-08 18:15 1128http://jdgnewtouch.iteye.com/bl ... -
jdbc
2012-06-07 20:51 913http://www.iteye.com/topic/6466 ... -
j2se----jdk6---httpServer
2012-06-05 20:42 1411package com.tdt.server.httpse ... -
j2se基础---ThreadLocal
2012-06-02 20:47 1093package cn.itcast.heima2; ... -
获取运行时的堆栈信息
2011-12-11 11:00 2164public class Hi { public st ... -
简说XML的解析方式(DOM,SAX,StAX)
2011-09-30 08:44 932一般来说,解析XML文件存在着两种方式,一种是event-ba ... -
j2se----Java异步socket
2011-07-11 17:10 1439用异步输入输出流编写Socket进程通信程序 在Merlin ... -
j2se----socket的缓冲区讨论
2011-07-08 19:52 1769关于socket的发送缓冲区 ... -
Tomcat的Socket实现:org.apache.tomcat.util.net(一)
2011-07-08 19:12 1920org.apache.tomcat.util.net包的内容都 ... -
翻转句子中单词的顺序
2011-07-07 22:42 1752题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺 ... -
j2se---同步的Map
2011-07-07 20:50 1002顾名思义LinkedHashMap是比HashMap多了一个链 ... -
j2se---同步的Map
2011-07-07 20:48 10Map<String String> map = ... -
asm----字节码操纵
2011-06-30 09:14 3935想通过asm的代码生成来写.class文件至少得了解下面的 ... -
j2se----java中,如何获得用户当前的工作目录
2011-05-11 09:44 1872获得当前路径, get java current dire ... -
j2se-----zip
2011-05-10 09:05 1053private InitData getInitFile( ... -
j2se-----可变参数列表
2011-04-01 10:53 882public static void main(Strin ... -
UML
2010-12-31 09:42 897组合: 一种强聚合 class Bird{ ... -
j2se-----metadata
2010-12-19 17:14 1013DatabaseMetaData的用法 ... -
python------一小时学会
2010-12-08 16:28 1924先上java与python的相互调用 如何在Java中调用Jy ... -
j2ee------download.jsp
2010-12-08 13:39 1119Logger logger = C ...
相关推荐
《Java深度历险》是一本全面探讨Java技术的书籍,主要关注Java虚拟机(JVM)的深入理解和相关概念。本书旨在帮助读者不仅掌握Java编程的基本语法,而且能够理解Java平台的工作原理,从而提升编程技能和解决问题的...
【JAVA内存结构】 Java内存结构主要分为五个主要区域:堆(JAVA HEAP)、虚拟机栈(JAVA VIRTUAL MACHINE STACKS)、本地方法栈(NATIVE METHOD STACK)、...理解这些内存结构和GC原理对于优化Java应用性能至关重要。
《Java深度历险》是一本面向已有基础的Java程序员的高级读物,旨在帮助读者深入理解Java语言的核心机制和高级特性。这本书涵盖了多个关键知识点,包括但不限于类加载机制、垃圾回收、多线程、并发编程、JVM优化、...
《Java深度历险》是一本旨在深入探索JDK和JVM内部运作的书籍,它将带你走过一场关于Java编程语言的精彩旅程。JDK(Java Development Kit)是开发和运行Java应用程序的基础,而JVM(Java Virtual Machine)则是Java...
GCviewer是一款强大的Java垃圾收集(Garbage Collection,简称GC)分析工具,版本1.35提供了对Java应用程序内存管理的深度洞察。它可以帮助开发者理解、优化和调试应用程序的内存行为,从而提升性能,避免内存泄漏等...
通过上述方法,我们可以对JVM的GC进行深度调优,以提高系统的整体性能和稳定性。这个"share-jvm-gc"项目很可能是为了提供一个实践和学习这些知识的平台,通过实践来加深理解和掌握JVM GC调优的技巧。
GC-PowerStation是一个专门针对Java垃圾收集进行深度分析和性能优化的工具或框架,通过这个名字我们可以推测,它可能提供了强大的功能来帮助开发者理解和优化Java应用的内存行为。 首先,让我们了解什么是Java垃圾...
《Java深度历险》这本书是为那些希望深入了解Java平台运行机制的初学者和有经验的开发者准备的。它深入探讨了Java技术的核心概念,揭示了Java如何在幕后工作,帮助读者提升对Java语言的理解和应用能力。 1. **Java...
《Java实战精华——第五版》是一部深度探讨Java编程语言的经典著作。这本书涵盖了Java语言的核心概念、语法、工具和最佳实践,旨在帮助读者快速掌握并深入理解Java编程。 1. **Java语言基础** - 类与对象:Java是...
《Java深度历险》与《深入Java虚拟机》是两本深受Java开发者喜爱的经典书籍,它们涵盖了Java编程语言和Java虚拟机(JVM)的高级主题,旨在帮助读者深入理解Java平台的工作原理。 《Java深度历险》这本书通常会涵盖...
JVMGC原理及调优的基本思路: 如何监控Tomcat的性能? Tomcat线程池和I/O的并发调优 Tomcat的内存溢出原因分析及调优 Tomcat拒绝连接原因分析及网络优化 Tomcat进程占用CPU过高怎么办 谈谈Jetty性能调优的思路 热点...
6. G1收集器:Java 9及以上版本推荐使用G1收集器,它能实现低延迟和高吞吐,可以通过-XX:+UseG1GC启用。 7. 对象晋升策略:通过-XX:PretenureSizeThreshold参数可以设置直接晋升到老年代的对象大小阈值。 8. 栈...
- 垃圾收集:不同GC算法(如Serial、Parallel、CMS、G1、ZGC),GC日志分析,调优策略。 - 内存调优:堆大小调整,新生代与老年代比例,方法区设置等。 8. **模块化与微服务**: - JAR、WAR打包方式,以及Spring...
《Java面试宝典》是为Java开发者准备的一份详尽的面试指南,旨在帮助...通过学习《Java面试宝典》,你将系统地掌握上述知识,从而在面试中自信应对,展示出你的专业技能和深度理解,为自己的职业生涯打开更广阔的道路。
《深入Java虚拟机》这本书是IT领域中关于Java虚拟机(JVM)的深度解析之作,主要聚焦于JVM的工作原理、内部结构以及优化技巧。Java虚拟机作为Java语言的核心组件,其性能直接影响到Java应用程序的运行效率。因此,对...
Java性能调优,特别是关于垃圾回收...总结来说,Java性能调优中的垃圾回收机制分析是一项深度工作,需要深入理解JVM的内存管理,识别并避免内存泄漏,以及合理调整垃圾收集策略,以实现更高效、更稳定的Java应用程序。
DTrace是Solaris操作系统的一个强大性能分析工具,该插件使得jVisualVM能够支持DTrace脚本,从而在Java应用中实现系统级别的深度性能分析。 7. **Glassfish插件(net-java-visualvm-modules-glassfish.nbm)** ...
Java JDK源码学习是深入理解Java编程语言的关键步骤,它能帮助开发者洞悉语言底层的工作原理,提升编程技能和优化代码的能力。...这是一场深度技术探索之旅,也是成为一名杰出Java开发者的必经之路。
《JAVA深度历险》这本书是Java开发者的一本深入学习指南,它旨在揭示Java语言的内在机制和高级特性,帮助读者从底层理解Java的工作原理。在Java编程的世界里,深度理解和熟练掌握这些知识点对于提升开发效率、优化...
《Java深度历险》这本书是Java开发者深入了解Java平台和其内在机制的重要参考资料。它涵盖了从JDK(Java Development Kit)的基础到Java底层运行原理的广泛主题。以下是一些关键的知识点,这些知识点可以帮助读者...