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

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

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

本地方法栈

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

  • 什么是本地方法?

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

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

为本地方法提供内存空间

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

什么是堆?

  • 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 工具:图形界面的,多功能的监测工具,可以连续监测
    JVM基础篇-本地方法栈与堆,JVM,jvm

案例

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

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

JVM基础篇-本地方法栈与堆,JVM,jvm文章来源地址https://www.toymoban.com/news/detail-623792.html

到了这里,关于JVM基础篇-本地方法栈与堆的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JVM 虚拟机 ---> JVM 基础概念

    一、Java 跨平台 Java是一种 可跨平台 的编程语言,我们通常把 CPU 处理器与操作系统构成的计算机系统整体成为叫 平台 不同的 CPU ,差异主要在底层指令集不同,指令集分为精简指令集( RISC )和复杂指令集( CISC )。每个 CPU 都有自己的特定指令集 **指令集:**是CPU中用来计

    2024年02月09日
    浏览(31)
  • JVM基础(5)——JVM垃圾回收算法

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月02日
    浏览(34)
  • JVM基础(3)——JVM垃圾回收机制

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年01月25日
    浏览(34)
  • JVM基础(1)——JVM类加载机制

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月02日
    浏览(37)
  • JVM基础(4)——JVM存活判定算法

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年02月02日
    浏览(31)
  • JVM-JVM调优基础(理论)

    申明:文章内容是本人学习极客时间课程所写,作为笔记进行记录,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 JVM参数 标准参数 定义:稳定的参数不会随着Java版本的变化而变化。通常以 短横线开头

    2024年02月19日
    浏览(29)
  • 缓存的变更(JVM本地缓存->Redis分布式缓存)

    在一次需求修改中,下游的服务附加提出了,针对某个业务数据缓存的生效时间的要求 原JVM设计方案: 采用jvm本地缓存机制,定时任务30秒刷新一次 现在redis方案: 因为很多地方使用了这个业务数据缓存,使用方面不能改动过多 因为是分布式部署,如果只使用jvm缓存,无法

    2024年02月11日
    浏览(36)
  • 多级缓存(nginx本地缓存、JVM进程缓存、redis缓存)

    Caffeine示例 封装完函数之后,我们对nginx.conf进行修改(请求进来之后会去寻找item.lua) item.lua文件内容 上面的item.lua文件中需要进行拼接数据,我们需要JSON结果处理 在实际生产中tomcat是肯定以集群的方式存在 当我们修改nginx.conf发送请求为集群的时候,如下图 这个时候存在

    2024年01月17日
    浏览(40)
  • JVM基础(6)——JVM垃圾回收器简介

    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖,挖的越深,基础越扎实! 阶段1、深入多线程 阶段2、深入多线程设计模式 阶段3、深入juc源码解析

    2024年01月23日
    浏览(30)
  • JVM,关于JVM基础的知识,你确定不了解一下吗?

    目录 一.JVM的概念 什么是JVM? 二.JVM的运行流程 1.class文件如何被JVM加载并运行 2.JVM运行时数据包括哪些区域(M) 三.类加载的过程(M) 四.双亲委派模型 1.双亲委派模型分析 2.JAVA中有哪些类加载器(M) 五.垃圾回收机制 1.死亡对象的标识 ①引用计数算法 ②可达性分析算法

    2024年02月02日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包