热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TL03JVM内存区域详解02

需要仔细听的地方:01:49:31这块写的是很好的---------------------------------------------------------

需要仔细听的地方:01:49:31这块写的是很好的

----------------------------------------------------------------------------------------------------------------------

执行到这个方法B是不会被加载的,必须满足条件才可以被加载的,必须是被使用了才会被加载的。

跨代引用也是gc root,跨代引用:https://www.jianshu.com/p/671495682e46

符号引用包括方法名什么的都是符号引用。

常量和字面量:https://www.jianshu.com/p/0f2816805da6

---


堆:对象,成员变量的引用


虚拟机栈:基本类型的局部变量 局部变量的引用


方法区堆外内存(元空间属于直接内存):常量 静态变量  即时编译后的代码


运行时常量池(堆逻辑上属于方法区):字面量 类的符号引用 直接引用

---

字面量:https://www.jianshu.com/p/465073cc94d8

常量:https://www.bbsmax.com/A/kPzO7q0ezx/

参考:https://m.imooc.com/wenda/detail/496796

栈:给执行的方法单独分配的内存区域是栈帧。栈先进后出。一个线程是一个栈,一个栈有很多的方法。

---

.class文件加载到方法区,在内存中生成一个class对象指向这个区域。

---


栈:

一旦开启线程会单独的开辟一块栈的区域的。

---

栈帧:线程里面每一个方法会单独的分配一个栈帧。

main方法运行马上分配一个栈帧,接着调用math方法,再次压栈,执行完毕就出栈了。

栈的结构:

这个语句生成可读性的字节码文件。可以在手册查。

操作数栈:

就是a=1的1,这个1分配到操作数栈里面去,

然后出栈给a赋值。同理c=(a+b)*10,先把a和b的值放在操作数栈。弹出栈做计算,算出值为3结果再押入到操作数栈,以此类推,再押入操作数栈10,弹出10和3计算为30,再押入操作数栈,最后出栈赋值给c。

图解:

流程:

出栈给a赋予=值。

这个就是把c=30发到操作数栈里面去

局部变量表:就是局部变量。

程序计数器:就是这个行号。

方法的出口:方法出口存放的值就是应该返回外层的方法的行号。

动态链接:以后说

---

栈的参数:

我们执行一个方法,测试栈的溢出的:

参数的设置:

如何修改栈的参数?

当前一个线程的分配的栈的大小的。

如何设置:

----------

下半节课

----------

class会加载到方法区。

方法区:

类元信息是类的组成部分就是之前加载验证解析初始化什么的之后的。

1.栈指针指向堆。


2.new对象,对象头里面有一个指针,指向方法区就是指向类元信息。

3.方法区静态变量也有指针指向堆。

---


对象头指针找方法区的类元信息,再找类的方法。

动态链接:

首先静态的符号我们放在常量池里面。

我们去常量池去找类的符号引用:

执行这个方法是如何找到这个符号的?

new这个类就是math的时候,在对象头里面就有了指针了,指向方法区的指令码。找到compute。然后把地址映射到动态链接里面,动态链接就是真正的运行到这一行的。

符号引用:就是单纯的compute方法。


直接引用:替换为指针,就是方法区的地址。

静态链接:类加载过程中在解析阶段静态方法,方法区指令码的入口地址指定好关系了。

动态链接:在运行的时候。

---

本地方法栈:native,jave和c做接口的交互的。

---

元空间就是物理内存直接内存。


堆重点:

先是minor gc,老年代放满了就是full gc。年轻代和老年代满了才gc的,不是定时的。

子节码引擎调用垃圾回收。

---

minor gc和full gc都会停止我们的工作。

什么时候触发full gc:https://baijiahao.baidu.com/s?id=1632743030610982339&wfr=spider&for=pc

minor gc触发条件:https://blog.csdn.net/shi2huang/article/details/80067608 

---

gc流程:

15次放在老年代。元空间没有变化,放的是类的信息。

full gc有引用的是回收不了的。

---

双核4G的内存的分配是什么技术呢?

tomcat的话放在cataline.out。

调优就是尽可能减少full gc。

 --- 

估算订单内字段的大小。

每秒1M放在eden,1秒下单完毕变为垃圾对象,等待回收。很快的。

暴增,每秒20M,很快就会垃圾回收,但是可能订单时间太长了因为会有阻塞的,经历好几个minor gc也回收不掉,而且回收还很频繁的。就进入老年代了。

三台服务器四小时百万订单

1秒1000 1分钟60000一小时360000四小时1440000 三个服务器一秒300个。 

如何估算对象的大小,主要去估算字段的大小。

---

百万订单思路:

4G->1G多点。

---

JVM为什么设置STW?

有时候非垃圾变为垃圾了,太复杂了,我找对象干脆停了。


推荐阅读
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • Spring Boot 和 Spring Cloud 是 Spring 生态系统中的重要组成部分,各自具有独特的特性和应用场景。Spring Boot 通过简化配置和自动配置机制,显著提高了开发和部署效率,减少了传统 Spring 应用中繁琐的 XML 配置文件需求。而 Spring Cloud 则在此基础上进一步提供了分布式系统的解决方案,包括服务发现、配置管理、断路器等高级功能,适用于微服务架构的构建和管理。本文将深入探讨两者的核心差异,并分析其各自的最佳应用场景。 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
    如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
author-avatar
mobiledu2502875063
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有