JVM基础篇-本地方法栈与堆

news2024/9/24 15:26:44

JVM基础篇-本地方法栈与堆

本地方法栈

在这里插入图片描述

  • 什么是本地方法?

本地方法即那些不是由java层面实现的方法,而是由c/c++实现交给java层面进行调用,这些方法在java中使用native关键字标识

public native int hashCode()
  • 本地方法栈的作用?

为本地方法提供内存空间

在这里插入图片描述

什么是堆?

  • Heap 堆,通过 new 关键字,创建对象都会使用堆内存

特点

  • 它是线程共享的,堆中对象都需要考虑线程安全的问题
  • 有垃圾回收机制

堆内存溢出

造成堆内存溢出的原因

  • 对象一直被引用无法被垃圾回收器回收,随着对象越来越多导致堆内存溢出

示例代码

package com.vmware.stack;

import java.util.ArrayList;
import java.util.List;

/**
 * @apiNote 演示堆内存溢出 java.lang.OutOfMemoryError
 * -Xmx8m 配置堆内存大小
 */
public class Demo5 {
    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);//18
        }
    }
}
java.lang.OutOfMemoryError: Java heap space
	at java.base/jdk.internal.misc.Unsafe.allocateUninitializedArray0(Unsafe.java:1382)
	at java.base/jdk.internal.misc.Unsafe.allocateUninitializedArray(Unsafe.java:1375)
	at java.base/java.lang.StringConcatHelper.newArray(StringConcatHelper.java:497)
	at java.base/java.lang.StringConcatHelper.simpleConcat(StringConcatHelper.java:421)
	at java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at java.base/java.lang.invoke.DelegatingMethodHandle$Holder.reinvoke_L(DelegatingMethodHandle$Holder)
	at java.base/java.lang.invoke.Invokers$Holder.linkToTargetMethod(Invokers$Holder)
	at com.vmware.stack.Demo5.main(Demo5.java:19)
设置堆内存大小
  • -Xmx
堆内存诊断
  • jps 工具:查看当前系统中有哪些 java 进程

  • jmap 工具:查看堆内存占用情况 jmap - heap 进程id

    package com.vmware.stack;
    
    public class Demo6 {
        public static void main(String[] args) throws InterruptedException {
            System.out.println("1...");
            Thread.sleep(30000);
            byte[] array = new byte[1024 * 1024 * 10];
            System.out.println("2...");
            Thread.sleep(30000);
            array = null;
            System.gc();
            System.out.println("3...");
            Thread.sleep(1000000L);
        }
    }
    
  • jconsole 工具:图形界面的,多功能的监测工具,可以连续监测
    在这里插入图片描述

案例

垃圾回收后,内存占用仍然很高

可以使用可视化工具jvisualvm进行堆dump,进行内存分析

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/817594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中默认插槽,具名插槽,作用域插槽区别详解

默认插槽&#xff1a; App.vue : 在app.vue中使用MyCategory&#xff0c;里面包裹的结构是不显示的&#xff0c;要想在页面中显示&#xff0c;就需要用到插槽。在子组件MyCategory中定义 <template><div class"container"><MyCategory title"美…

号称永不限速的它抛弃初心,网盘界从此再无净土

自从百度网盘一家独大&#xff0c;带来免费用户 KB/s 级下载体验后&#xff0c;小忆一直在期待一款免费不限速网盘。 直到阿里云盘的出现可算是满足了小忆对网盘的所有期许。 新用户初始免费容量尽管只有 100G&#xff0c;但当初通过几个简单小任务就能轻松提升至数 TB。 最重…

渗透测试:Linux提权精讲(二)之sudo方法第二期

目录 写在开头 sudo expect sudo fail2ban sudo find sudo flock sudo ftp sudo gcc sudo gdb sudo git sudo gzip/gunzip sudo iftop sudo hping3 sudo java 总结与思考 写在开头 本文在上一篇博客的基础上继续讲解渗透测试的sudo提权方法。相关内容的介绍与背…

RISC-V公测平台发布 · 如何在SG2042上玩转k3s

前言 Kubernetes是一个开源的容器管理平台&#xff0c;通过Kubernetes的跨集群管理功能&#xff0c;用户可以方便地进行应用程序的复制、迁移和跨云平台的部署。 而k3s作为Kubernetes的轻量级发行版&#xff0c;相比传统的Kubernetes具有更小的二进制文件大小和更低的资源消耗…

在简历上写了“精通”后,拥有工作经验的我被面试官问到窒息

前言 如果有真才实学&#xff0c;写个精通可以让面试官眼前一亮&#xff01; 如果是瞎写&#xff1f;基本就要被狠狠地虐一把里&#xff01; 最近在面试&#xff0c;我现在十分后悔在简历上写了“精通”二字… 先给大家看看我简历上的技能列表&#xff1a; 熟悉软件测试理论基…

数据存储需求骤变,联想凌拓多招齐发推动数以致用

有人说&#xff0c;数据存储决定着未来数字化转型的深度。深以为然。 今年以来&#xff0c;千行百业的用户们愈发意识到数据存储的重要性。无论是席卷全球的生成式AI浪潮&#xff0c;需要存储“投喂”各种非结构化数据&#xff1b;还是多云环境下&#xff0c;用户们对于数据自…

ODIN_1靶机详解

ODIN_1靶机复盘 下载地址&#xff1a;https: //download.vulnhub.com/odin/odin.ova 靶场很简单&#xff0c;一会儿就打完了。 靶场说明里提醒说加一个dns解析。 我们在/etc/hosts加一条解析 就能正常打开网站了&#xff0c;要么网站打开css是乱的。 这里看到结尾就猜测肯定…

全网最全讲的最详细的多线程原理

在我们开始讲多线程之前&#xff0c;我们先来了解一下什么是进程&#xff0c;什么是线程。进程和线程是操作系统中两个容易混淆的概念。 进程 在Windows操作系统中打开任务管理器&#xff0c;可以查看进程和线程的详细信息。也可以使用专业的进程查看小软件——Process Explo…

适合做笔记的软件有哪些?8款好用强大的笔记软件推荐!

除了Goodnotes和Notability&#xff0c;你还知道哪些值得推荐的免费笔记软件吗&#xff1f;本文结合自己的使用经验&#xff0c;推荐笔记软件的同时&#xff0c;亦推荐一些不错的绘图软件供大家选择使用。 1.OneNote 基本的笔记功能都有&#xff0c;加粗、倾斜、下划线、突…

【RL】我的强化学习代理

一、说明 强化学习代理是一个自主决策的人工智能智能系统&#xff0c;它通过与环境进行交互&#xff0c;通过试错学习&#xff0c;逐步优化其行为以实现其目标。这种代理能够学习如何在环境中进行行为&#xff0c;以实现预期的目标。代理可以通过尝试不同的行为来评估其对环境的…

1.2.2最长上升子序列模型(二)

1.拦截导弹 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c;雷达捕捉到敌国的导弹来袭。 由…

最全的3D动画软件介绍来了!良心总结9款3D动画制作必备软件

现在&#xff0c;市面上流行着的3D动画软件如此之多&#xff0c;以至于很难敲定到底哪一款更适合自己或自己的团队。本篇文章带来了一些热门的、被视为行业标准的3D动画软件的介绍&#xff0c;帮助您更好地做出选择。 不仅如此&#xff0c;您还能从文章中了解到在数字内容创建…

移动应用项目架构设计

一、项目整体架构设计 按照分层的架构思想&#xff0c;从下到上分为ShareLib(共享库)层、Core(核心功能)层、Business(业务逻辑)层、App(应用展示)层。 架构优势&#xff1a; 严格控制各层的职责范围&#xff0c;使得底层库实现工程间复用且无缝替换&#xff0c;上层业务无感知…

垃圾焚烧设备PLC数据采集远程监控系统解决方案

PLC可以应用于各种污染废物处理设备的自动化控制&#xff0c;如污水处理、垃圾焚烧、空气处理等。例如&#xff0c;通过对垃圾焚烧PLC设备的数据采集&#xff0c;可以实现对垃圾焚烧的温度、时间、氧气流量等数据的远程监控和实时预警&#xff0c;有效提高垃圾焚烧效率和环保效…

使用机器学习进行疾病预测 -- 机器学习项目基础篇(3)

本文旨在实现一个强大的机器学习模型&#xff0c;可以根据他/她所拥有的症状有效地预测人类的疾病。让我们看看如何解决这个机器学习问题&#xff1a; 方法&#xff1a; 收集数据&#xff1a;数据准备是任何机器学习问题的主要步骤。我们将使用来自Kaggle的数据集来解决这个问…

C语言——静态库和动态库的创建和使用

使用库函数是源码的一种保护 库函数其实不是新鲜的东西,我们一直都在用,比如C库。我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的…

【Unity学习笔记】生命周期

文章目录 脚本的生命周期初始化更新顺序动画更新循环各类事件结束阶段 阶段分析协程返回 总结 官方文档&#xff1a;事件函数的执行顺序 脚本的生命周期 如图&#xff1a; 脚本的生命周期主要经历以下几个阶段&#xff1a; 初始化 初始化阶段&#xff0c;&#xff08;包括初…

RISC-V 指令集介绍

1. 背景介绍 指令集从本质上可以分为复杂指令集&#xff08;Complex Instruction Set Computer&#xff0c;CISC&#xff09;和精简指令集&#xff08;Reduced Instruction Set Computer&#xff0c;RISC&#xff09;两种。复杂指令集的特点是能够在一条指令内完成很多事情。 指…

1400*A. Factory

Examples input 1 5 output No input 3 6 output Yes 题意&#xff1a; a 和 m&#xff0c;a 不断加 a%m &#xff0c;如果 a 有一次能够被 m 整除&#xff0c;则打印 Yes&#xff0c;如果一直循环永远不可能被 m 整除&#xff0c;则打印 No 解析&#xff1a; 可以观…

BUU CODE REVIEW 1

BUU CODE REVIEW 1 考点&#xff1a;PHP变量引用 源码直接给了 <?phphighlight_file(__FILE__);class BUU {public $correct "";public $input "";public function __destruct() {try {$this->correct base64_encode(uniqid());if($this->c…