堆内存和一些检测工具

这篇具有很好参考价值的文章主要介绍了堆内存和一些检测工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

17 堆定义

通过new关键字创建,创建对象都会使用堆内存。
是线程共享的,需要考虑线程安全问题。
有垃圾回收机制。

18 堆-内存溢出

当默认情况下,发现执行到26,出现内存溢出。
当我们将堆内存调为8m,继续执行,如图2.发现支循环了17次。
	-Xmx=8m;

下面的demo展示一下为何内存溢出;
因为list的生命周期是在try块里,每次新建对象,而且不被回收。
代码如下。
public class Demo1_5 {

    public static void main(String[] args) {
        int i=0;
        try{
            List<String> list=new ArrayList<>();
            String a="hello";
            while (true){
                list.add(a);
                a=a+a;
                i++;
            }
        }catch (Throwable e){
            e.printStackTrace();
            System.out.println(i);
        }
    }
}

堆内存和一些检测工具,jvm

19 堆-内存诊断jmap

jps 查看有哪些java进程
jmap 查看堆内存占用情况

jmap -heap 进程id  查看堆内存占用情况。
也可以发现,新创建的对象会放在eden区。
Heap Usage

测试代码

public class Demo1_4 {

    public static void main(String[] args) throws Exception{
        System.out.println("1.....");
        Thread.sleep(30000);

        byte[] array=new byte[1024*10*1024];
        System.out.println("2....");
        Thread.sleep(20000);
        array=null;
        System.gc();
        System.out.println("3....");
        Thread.sleep(100000L);
    }
}

创建数组对象前(hh,我手速太慢了)。。。

堆内存和一些检测工具,jvm

20 jconsole

堆内存和一些检测工具,jvm文章来源地址https://www.toymoban.com/news/detail-626410.html

到了这里,关于堆内存和一些检测工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++内存泄漏检测工具

    在程序中增加相应的内存检测工具  #define CRTDBG MAP ALLOC #include stdlib.h #include crtdbg.h #ifdef DEBUG #ifndef DBGNEW #define DBG_NEW new (_NORMAL_BLOCK,_FILE_LINE_) #define new DBG NEW #endif #endif _CrtDumpMemoryLeaks(); 当没有释放内存时候: 增加了delete时候:  

    2024年01月25日
    浏览(85)
  • 内存检测工具——ASan(AddressSanitizer)的介绍和使用

    ASan全称AddressSanitizer,是一种内存错误检测工具,目的是帮助开发者检测和调试内存相关的问题,如使用未分配的内存、使用已释放的内存、堆内存溢出等。ASan是由Google开发的,广泛用于C、C++等语言的代码中。 ASan的工作原理是在编译时将额外的代码插入到目标程序中,对内

    2024年03月20日
    浏览(40)
  • Linux下内存检测利器Valgrind之Memcheck工具详解

    目录 1、Valgrind简介 1.1、Memcheck工具 1.2、Callgrind工具 1.3、Cachegrind工具 1.4、Helgrind工具

    2024年02月08日
    浏览(60)
  • Android内存泄漏分析及检测工具LeakCanary简介,Android进阶

    @Synchronized override fun expectWeaklyReachable( watchedObject: Any, description: String ) { if (!isEnabled()) { return } removeWeaklyReachableObjects() val key = UUID.randomUUID() .toString() val watchUptimeMillis = clock.uptimeMillis() val reference = KeyedWeakReference(watchedObject, key, description, watchUptimeMillis, queue) SharkLog.d { \\\"Watching \\\" +

    2024年04月25日
    浏览(39)
  • 为什么选择C/C++内存检测工具AddressSanitizer?如何使用AddressSanitizer?

    目录 1、C++程序中的内存问题 2、AddressSanitizer是什么? 3、AddressSanitizer内存检测原理简述

    2024年02月09日
    浏览(43)
  • 4个python内存性能检测工具:memory_profiler、timeit、line_profiler、heartrate的使用案例

    这里总结了4个比较好的python性能检测工具,包括内存使用、运行时间、执行次数等方面。 1、memory_profiler查看内存的使用情况 memory_profiler可以用来测量python进程的内存使用情况。可以按行查看内存的使用情况。 memory_profiler 是一个监控进程内存消耗的模块,可以逐行分析 Py

    2024年02月01日
    浏览(41)
  • java-JVM内存区域&JVM运行时内存

    JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。 线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束 而 创建/销毁(在 HotspotVM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部

    2024年02月12日
    浏览(47)
  • Java虚拟机快速入门 | JVM引言、JVM内存结构、直接内存

    目录 一:JVM引言 1. 什么是 JVM ? 2. 常见的 JVM 3. 学习路线 二:JVM内存结构 1. 程 序 计 数 器(PC Register) 2. 虚 拟 机 栈(JVM Stacks) 3. 本 地 方 法 栈(Native Method Stacks) 4. 堆(Heap) 5. 方 法 区(Method Area) 三:直接内存 tips: 首先给大家推荐两款好用的免费软件:动图抓取软

    2024年02月05日
    浏览(64)
  • 【JVM】JVM内存模型详解

    一、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包