JVM的相关应用和原理解析

本文详细介绍了JVM的内存结构,包括方法区、虚拟机栈、本地方法栈、程序计数器和堆空间。讲解了各部分的作用、特点以及参数设置。此外,还探讨了垃圾回收的基本原理,如引用计数法和可达性分析算法,并介绍了不同的垃圾回收器及分代垃圾回收策略。最后,提到了如何通过JConsole工具监控Tomcat的垃圾回收情况。
摘要由CSDN通过智能技术生成
《JAVA中的基本数据类型和引用基本类型区别》涉及到的JVM
静态代码块的详细执行过程
详解JVM内存划分

Java自带的bin目录下的 jconsole.exe工具可以查看Tomcat的默认垃圾回收器

一、内存结构

1.1、Java内存分配图

在这里插入图片描述

1.2、方法区

方法区是一个规范,他的实现在JDK1.7之前是叫“永久代”,JDK1.8后叫“元空间”。

作用:用来存储类对象,类加载器,静态变量,StringTable,SymbolTable,即时编译器生成的代码等。

1.3、虚拟机栈(线程私有)

1.3.1、作用:

1.3.1.1、栈的大小 = 一个线程使用的内存大小
1.3.1.2、一个线程调用方法一次产生一个“栈帧”,一个“栈帧”包括方法的参数、局部变量等。多个“栈帧”成为“栈”。而正在执行的方法称为“活动栈帧”,一个线程内同一时刻只能有一个“活动栈帧”。

1.3.2、具体设置参数

-Xss
The default value depends on the platform:

  • Linux/x64 (64-bit): 1024 KB
  • macOS (64-bit): 1024 KB
  • Oracle Solaris/x64 (64-bit): 1024 KB
  • Windows: The default value depends on virtual memory

例如:-Xss2M
在这里插入图片描述

1.3.3、特点

1.3.3.1、方法执行完,“栈帧”就被立即释放。
1.3.3.2、因为线程私有,不存在共享,所以线程安全

1.3.4、什么情况下会使栈空间溢出?

1.3.4.1、方法的嵌套很深,一直到栈内存溢出(栈帧太多)
1.3.4.2、方法内局部变量太多(栈帧太大)

1.3.5、具体例子如下:

public class Demo1 {
   

    private static  int count = 0;

    public static void main(String[] args) {
   
        method1();
    }

    private 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值