b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

基于JavaVisualVM报告检测此类泄漏的方法,你可以了解

电脑杂谈  发布时间:2021-02-22 10:03:10  来源:网络整理

没有经验的程序员经常认为Java的自动垃圾收集功能使他们完全不必担心内存管理。这是一个普遍的误解:尽管垃圾收集器做得很好,但即使是最好的程序员也可能成为严重内存泄漏的受害者。让我解释一下。

当不必要的对象引用被不必要地维护时,就会发生内存泄漏。这些泄漏是不好的。首先,随着程序消耗越来越多的资源,它们给计算机带来了不必要的压力。更糟糕的是,检测这些泄漏可能很困难:静态分析通常很难准确地识别出这些冗余引用,并且现有的泄漏检测工具会跟踪并报告有关单个对象的细粒度信息,从而导致无法解释和不准确的信息。结果。

换句话说,泄漏要么很难识别,要么太具体而无法用术语识别。

实际上有四种类型的内存问题具有相似和重叠的特征,但是原因和解决方案不同:

在此内存管理教程中,我将重点介绍Java堆漏洞,并概述基于Java VisualVM报告的检测此类泄漏的方法,并使用可视界面在运行时分析基于Java技术的应用程序。

但是在防止和发现内存泄漏之前,您应该了解它们的发生方式和原因。 (注意:如果您可以很好地处理复杂的内存泄漏,则可以跳过。)

1.内存泄漏:基础

对于初学者,将内存泄漏视为一种疾病,并将Java的OutOfMemoryError(OOM)视为一种症状。但是,像任何疾病一样,并非所有OOM都意味着内存泄漏:OOM可能由于大量局部变量或其他此类事件的产生而发生。另一方面,并​​不是所有的内存泄漏都必然显示为OOM,尤其是在桌面应用程序或客户端应用程序(长时间运行而无需重新启动)的情况下。

处理内存泄漏为疾病,而OutOfMemoryError为症状。但是,并非所有OutOfMemoryErrors都意味着内存泄漏,并且并非所有内存泄漏都表现为OutOfMemoryErrors。

为什么这些泄漏是如此严重?另的环境,标记所有根对象(运行线程直接引用的对象)并遵循它们的引用并标记其沿途看到的每个对象来进行操作的。

Java是基于世代假设的,它实现了一种称为世代垃圾收集器的功能,它指出,大多数创建的对象会被快速丢弃,而未被迅速收集的对象可能会存在一段时间。

基于此假设,[Java将对象分为多代](….Generations | outline)。这是一个直观的解释:

“ alt =”图像“ data-src =”“ data-width =” 1280“ data-height =” 517“>

有生命的世代-也称为旧世代(图2中的旧空间),该空间可容纳寿命更长的物体,并具有更长的寿命(如果寿命足够长,则将从“幸存者”空间中移出)。当填充此空间时,GC将执行完整的GC,这将降低性能方面的成本。如果此空间无限增长,则JVM将抛出OutOfMemoryError-Java堆空间。永久世代-作为与生命周期世代密切相关的第三代,永久世代是特殊的,因为它可以保存虚拟机描述在Java语言级别上不等效的对象所需的数据。例如,描述类和方法的对象存储在永久代中。

Java足够聪明,可以为每一代应用不同的垃圾收集方法。使用称为Parallel New Collector的跟踪副本收集器来处理年轻一代。这个收集者封锁了整个世界,但是由于年轻一代通常很小,因此停顿很短。

有关JVM代及其工作方式的更多信息,请参阅Java HotSpot™虚拟机中的内存管理。

5检测内存泄漏

要查找并消除内存泄漏,您需要一个合适的内存泄漏工具。现在该使用Java VisualVM来检测并消除此类泄漏了。

5. 1使用Java VisualVM远程分析堆

VisualVM是提供可视界面的工具,用于查看有关基于Java技术的应用程序运行时的详细信息。

使用VisualVM,您可以查看与本地应用程序和远程主机上运行的应用程序有关的数据。您还可以捕获有关JVM软件实例的数据,并将数据保存到本地系统。

为了从Java VisualVM的所有功能中受益,您应该运行Java Platform Standard Edition(Java SE)版本6或更高版本。

相关:为什么需要升级到Java 8

5. 2.启用JVM的远程连接

在生产环境中,通常很难访问运行代码的实际机器。幸运的是,我们可以远程分析Java应用程序。

首先,我们需要向自己授予目标计算机上的JVM访问权限。为此,请创建一个名为jstatd.all.policy的文件,其内容如下:

grant codebase "file:${java.home}/../lib/tools.jar" {
   permission java.security.AllPermission;
};

创建文件后,我们需要使用jstatd-Virtual Machine jstat守护程序工具启用到目标VM的远程连接,如下所示:

jstatd -p  -J-Djava.security.policy=


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-359705-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...