`
Dustin
  • 浏览: 314710 次
  • 性别: Icon_minigender_1
  • 来自: 广州/成都
社区版块
存档分类
最新评论

Unintentional Object Retention,HPjtune&HPjmeter

阅读更多
这段时间在看《深入java虚拟机》,在讲GC的时候提到了无意识对象保持(unintentional object retention)。
    1、Java存在内存泄漏(memory leak)吗?是的,而且很隐蔽,不容易被发现。
    2、不是说java的GC会自动回收内存吗?是的,但是GC回收的只是垃圾内存,也就是没有被其它“存活引用”引用着的引用。应用程序通过某条路径可以到达的引用所指向的内存是不能也不应该被回收的。
    3、什么叫无意识对象保持?就是说你以为某个对象在使用过后其内存很快就会被GC回收,但是由于程序中某些数据结构持有该对象的引用,使GC无法及时回收该对象,直至上述数据结构被销毁。
    4、通常什么情况下容易出现无意识对象保持呢?当你需要自己维护内存的时候或者使用映射  数据结构的时候。前者的一个例子就是一个Stack的实现。如果Pop的时候没有将相应的引用置空,那么被弹出的引用指向的对象是不会被回收的,因为它仍然被栈的引用着。这种情况会一直持续到该单元被重新赋值。(详见 《Effecitve Java 》item 5)。后者的一个例子就是Hashmap了。Hashmap中,一个entry的生命周期应该跟Key是保持一致的,也就是说,当key为null时,Hashmap应该把对应的entry删除掉。但实际上Hashmap并不会这样做,因为当key在某个时刻变成null的时候,并没有通知Hashmap,因此Hashmap也就无从下手了。我们在使用Hashmap的时候,当key为null,但是我们没有显式调用remove方法删除对应的项,那么就会出现无意识对象保持了。
    5、出现无意识对象保持会导致什么后果呢?明显啦,内存泄漏嘛!堆的使用率不断增长,垃圾回收变得越来越频繁(要为新的对象争取空间啊),应用程序的性能也就随之下降了。搞不好,还会弄个OutOfMemeory异常出来,挂了!
    6、那怎么办啊?要解决这个问题肯定要先找出问题的源头在哪。究竟哪里导致了无意识对象保持呢?这个靠猜测是不行的了,使用工具吧。最原始的工具就是jvm了,在启动jvm的时候加上参数 -Xloggc:filename,就可以得到一个关于GC和堆使用情况的报告了。如果加上 -Xrunhprof<option> 的话,可以得到程序的运行情况的描述。当然,如果你是超人的话,用记事本打开上述两个文件,看看里面的内容可能也会瞅出个端倪出来。但是一般人是不可能的啦,用HPjmeter 和 HPjtune吧,HP公司免费提供的两个小巧玲珑但是功能强大的java监测工具。它们可以将上述的两个文件的内容图形化地表现出来,并作出了相关的统计。具体的介绍可以参看http://www.javaperformancetuning.com/tools/hpjmeter/index.shtml 和 http://www.javaperformancetuning.com/tools/hpjtune/index.shtml 。
    7、问题根源找到了,怎么解决它呢?在程序中显示将不再使用的引用显示置空是一个办法。这对于第一种情况是十分适用的。但这个方法并不是普遍适用的,Bloch说这样会把代码弄得很乱,而且会降低程序的性能(可能是导致出现NullPointerException吧,异常是挺耗资源的)。我们可以重用一个本来已经包含对象的的引用变量或者让这个变量结束其生命周期。对于第二种情况,java 1.2提出通过Reference对象进行解决,主要就是使用SoftReference 和 WeakReference对象。jvm会在抛出OutOfMemoryError之前清除SoftReference对象,以回收内存空间。对于WeakReference对象,jvm则会在监测到某个对象是WeakReference对象时马上进行清除。使用这两种对象,我们可以实现一个廉价的缓存和建立规范映射。WeakHashMap就是使用WeakReference实现的一个HashMap,以解决无意识对象保持的问题。
分享到:
评论

相关推荐

    无意识的CTO的自白:在开发和维护Web应用程序方面七年的残酷务实教训。Confessions of an Unintentional CTO: Seven Years of Brutally Pragmatic Lessons in Growing and Maintaining a Web App.

    一本与语言无关的通用建议书,与从事实时Web应用程序的黑客网络开发人员有关,这些应用程序具有真实的用户和所有过分真实的问题。

    Radar Signal Unintentional Modulation Feature and Clustering Sorting Methods

    ### 雷达信号非故意调制特征及聚类排序方法 #### 摘要与研究背景 本文探讨了雷达信号非故意调制特征及其聚类排序方法的研究意义和技术实现方式。随着雷达系统复杂性的增加,雷达信号的分类面临着越来越严峻的挑战...

    18 47 CFR Part 15 Radio frequency Devices. 2023 .pdf

    47 CFR Part 15是美国联邦通信委员会(FCC)关于无线电频率设备的规定,它详细阐述了在电信领域中,非有意辐射器(Unintentional Radiators)和有意辐射器(Intentional Radiators)的操作、测试、授权及合规性要求...

    PCB DESIGN FOR REAL-WORLD EMICONTROL

    -Controlling intentional and unintentional currents at their source; -Decoupling strategies explained and myths exposed; -Proper I/O filter design and connection strategy explained; -Not simply a ...

    FCC PART15-07标准

    FCC Part 15主要关注的是非有意辐射器(Unintentional Radiators),即那些并非设计用于发射无线电信号但仍然可能产生并辐射一定量电磁能量的设备。这些设备包括但不限于个人电脑、电源适配器、家用电器等。FCC Part...

    FCC part 15 standard

    这部分标准主要关注的是无意辐射器(Unintentional Radiators),即那些并非设计用于发射无线电波但实际操作过程中会产生辐射的电子设备。 #### 二、关键条款解释 **Section 15.1 - Scope of this Part** 本节概述...

    EMI测试标准是什么

     非故意辐射(UnintenTIonal):产品产生不想要的电磁波辐射,造成干扰;如:电脑,LCDMonitor,DVD,电视,投影机等;  故意辐射(intenTIonal):使用无线电波进行通信;  FCC 只测试EMI: ...

    MIPS寄存器文件 (练习)

    在行为VHDL中(使用3个并发进程)描述图1所示的MIPS寄存器文件,该文件通过以下接口支持3操作数... - Guard against unintentional writes to register zero ($0), i.e., $0 is read-only and has always the value 0.

    ciscotcl training

    - Any use of actual IP addresses or phone numbers in illustrative content is unintentional and coincidental. #### Trademarks - **Cisco Trademarks**: Cisco and the Cisco logo are trademarks of Cisco ...

    EMI测试及相关资料.pdf

    EMI测试分为两大类:非故意辐射(Unintentional Emission)和故意辐射(Intentional Emission)。非故意辐射通常是指电子设备在正常工作状态下产生的不期望的电磁波辐射,如电脑、显示器、DVD播放器等。而故意辐射则...

    雷达辐射源个体识别综述.docx

    脉内无意调制(Unintentional Modulation On Pulse, UMOP)被普遍认为是个体特征的产生机理,UMOP 属于雷达发射机的固有属性,是由发射管、功放等发射机关键器件产生的寄生调制,无法避免、消除和伪造。 基于手工...

    FCC Part 15

    - **Section 15.101** - Equipment authorization of unintentional radiators. 对无意辐射器设备的授权流程。 - **Section 15.102** - CPU boards and power supplies used in personal computers. 个人电脑中使用...

    2021年教师招聘考试题库《注意》考点带答案解析_1.docx

    1. 无意注意(Unintentional Attention):也称为不随意注意,是指在没有明确目的、无需意志努力的情况下,个体自然而然地对周围环境中的刺激进行反应。例如,突然的响声或者鲜明的颜色变化容易引起人的无意注意。 ...

    High detectivity photodetectors based on perovskite nanowires with suppressed surface defects

    Solution-processable, single-crystalline perovskite nanowires are ideal candidates for developing low-cost photodetectors, but their detectivities are limited due to a high level of unintentional ...

    网络安全社会工程.pdf

    社会工程攻击可以来自组织外部,也可以由组织内部的人员无意中实施,后者被称为无意的内部威胁(Unintentional Insider Threats,UIT)。 UIT通常由现任或前任员工、承包商或商业伙伴造成,他们因拥有或曾经拥有...

    FCC认证资料

    3. **SubpartB-Unintentional Radiators**:这部分特别关注无意辐射器的设备授权,包括个人计算机中使用的CPU板和电源供应器、豁免设备、向用户提供的信息、传导限值、辐射排放限值、接收器的天线功率传导限值、电力...

    47 CFR Part 15 Subpart B (up to date as of 3-07-2023)

    § 15.101Equipment authorization of unintentional radiators. 这条规则规定了无意辐射设备的设备认证要求。根据规定,无意辐射设备需要经过认证或SDoC,以确保设备符合相关的辐射标准。认证和SDoC都是由FCC指定...

    FCC Part 15.zip

    - **无意发射设备(Unintentional Radiators)**:如电脑、电视、显示器等,它们在正常工作时可能会产生射频辐射,但并非主要功能。 #### 2. 测试和认证 制造商必须确保其产品符合FCC Part 15的规定,这通常涉及到...

Global site tag (gtag.js) - Google Analytics