热门标签 | 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?

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


推荐阅读
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在本地环境中调试远程服务器上的网站代码执行问题,可以通过以下步骤实现:首先,在本地安装 Visual Studio 并配置远程调试工具。接着,确保服务器和本地机器之间的网络连接畅通,并正确设置防火墙规则以允许调试流量。最后,使用 Visual Studio 的远程调试功能连接到服务器,进行代码调试。这种方法不仅提高了开发效率,还减少了在服务器上直接操作的风险。 ... [详细]
  • Maven Web项目创建时JSP文件常见错误及解决方案
    Maven Web项目创建时JSP文件常见错误及解决方案 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
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社区 版权所有