首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    arthas命令jvm,sysprop,sysenv,vmoption视频演示

    本期分享阿尔萨斯的四个命令:JVM,sysprop,sysenv,option。因为这四个命令都是比较简单,是一些基础啊,配置啊,环境变量啊,还有一些参数的查询,很少涉及到修改。所以也没有什么可讲的,就索性把这四个命令做成一个视频了。其中JVM这个命令,是查看Java虚拟机当前信息的。但是这个信息跟JVM自带的命令差别还是挺大的。主要体现在信息的准确性和丰富程度上。如果是对JVM的信息有严格的要求的话,我个人建议还是用JVM自带的命令。剩下两个命令system property和system environment都是属于查看命令(其中system property能改的地方非常少,修改的意义对于测试来说也不是很大。)。最后一个vmoption命令能查看一些JVM启动参数,但是,参数信息有限,比如对内存的设置和内存的分配配置都是看不到的。其中。比较有用的信息就是设置OOM的参数,还有Java gc的参数。这个动态修改还是非常有用的。因为虽然说项目需要一个严格的规范,一般都会将这些参数呃进行一个比较合理的配置。但是总有例外情况,很多时候我们去检查这些配置的时候就会发现,事实跟我们规范并不一样。这个时候。命令的作用就体现了我们可以随时的动态修改这些配置。

    01

    全网最硬核 JVM 内存解析 - 3.大页分配 UseLargePages

    前面提到了虚拟内存需要映射物理内存才能使用,这个映射关系被保存在内存中的页表(Page Table)。现代 CPU 架构中一般有 TLB (Translation Lookaside Buffer,翻译后备缓冲,也称为页表寄存器缓冲)存在,在里面保存了经常使用的页表映射项。TLB 的大小有限,一般 TLB 如果只能容纳小于 100 个页表映射项。 我们能让程序的虚拟内存对应的页表映射项都处于 TLB 中,那么能大大提升程序性能,这就要尽量减少页表映射项的个数:页表项个数 = 程序所需内存大小 / 页大小。我们要么缩小程序所需内存,要么增大页大小。我们一般会考虑增加页大小,这就大页分配的由来,JVM 对于堆内存分配也支持大页分配,用于优化大堆内存的分配。那么 Linux 环境中有哪些大页分配的方式呢?

    01

    全网最硬核 JVM 内存解析 - 11.元空间分配与回收流程举例

    前文我们没有提到,如何限制元空间的大小,其实就是限制 commit 的内存大小。元空间的限制不只是受限于我们的参数配置,并且前面我们提到了,元空间的内存回收也比较特殊,元空间的内存基本都是每个类加载器的 ClassLoaderData 申请并管理的,在类加载器被 GC 回收后,ClassLoaderData 管理的这些元空间也会被回收掉。所以,GC 是可能触发一部分元空间被回收了。所以元空间在设计的时候,还有一个动态限制 _capacity_until_GC,即触发 GC 的元空间占用大小。当要分配的空间导致元空间整体占用超过这个限制的时候,尝试触发 GC。这个动态限制也会在每次 GC 的时候动态扩大或者缩小。动态扩大以及缩小

    01

    全网最硬核 JVM 内存解析 - 7.元空间存储的元数据

    JVM 在执行 Java 应用程序时,将加载的 Java 类的许多细节记录在内存中,这些信息称为类元数据(Class MetaData)。这些元数据对于 Java 的很多灵活的语言以及虚拟机特性都是很重要的,比如动态类加载、JIT 实时编译、反射以及动态代理等等。不同的 JVM 加载类保存的内存信息是不一样的,它们通常在更低的内存占用与更快的执行速度之间进行权衡(类似于空间还是时间的权衡)。对于 OpenJDK Hotspot 使用的则是相对丰富的元数据模型来获得尽可能快的性能(时间优先,不影响速度的情况下尽量优化空间占用)。相比于 C,C++,Go 这些离线编译为可执行二进制文件的程序相比,像 JVM 这样的托管运行时动态解释执行或者编译执行的,则需要保留更多关于正在执行的代码的运行时信息。原因如下:

    04
    领券