我目前正在用jconsole监控一个Java应用程序."内存"选项卡允许您在以下选项中进行 Select :

Heap Memory Usage
Non-Heap Memory Usage
Memory Pool “Eden Space”
Memory Pool “Survivor Space”
Memory Pool “Tenured Gen”
Memory Pool “Code Cache”
Memory Pool “Perm Gen”

它们之间有什么区别?

推荐答案

堆内存

堆内存是Java VM为所有类实例和数组分配内存的运行时数据区域.堆的大小可以是固定的,也可以是可变的.垃圾收集器是一个自动内存管理系统,用于回收对象的堆内存.

  • Eden Space:最初为大多数对象分配内存的池.

  • Survivor Space:包含在伊甸园空间的垃圾收集中幸存下来的对象的池.

  • Tenured GenerationOld Gen:包含幸存者空间中已经存在一段时间的对象的池.

非堆内存

非堆内存包括所有线程共享的方法区域,以及Java VM内部处理或优化所需的内存.它存储每个类的 struct ,例如运行时常量池、字段和方法数据,以及方法和构造函数的代码.方法区域在逻辑上是堆的一部分,但根据实现的不同,Java VM可能不会对其进行垃圾收集或压缩.与堆内存一样,方法区域的大小可以是固定的,也可以是可变的.方法区域的内存不需要是连续的.

  • Permanent Generation:包含虚拟机本身的所有反射数据的池,例如类和方法对象.对于使用类数据共享的Java虚拟机,这一代被分为只读区和读写区.

  • Code Cache:HotSpot Java VM还包括一个代码缓存,其中包含用于编译和存储本机代码的内存.

Here's some documentation on how to use Jconsole

Java相关问答推荐

在Java 8之后,HashMap的最坏情况下时间复杂度仍然是O(n)而不是O(log n)?

Java取消任务运行Oracle查询通过JDBC—连接中断,因为SQLSTATE(08006),错误代码(17002)IO错误:套接字读取中断

Java Stream,需要更新列表对象列表

嵌入式ActiveMQ Artemis Web控制台加载错误

连接Quarkus中的两个异步操作

如何才能使我的程序不会要求两次输入?

如何获得执行人?

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

Javadoc在方法摘要中省略方法

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

Java Telnet客户端重复的IAC符号

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

记录是类的语法糖吗?

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

未调用OnBackPressedCallback-Activitiy立即终止

Java CDI:@Singleton@Startup@Inject无法实现接口

始终使用Spring Boot连接mongodb上的测试数据库

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值

双对象供应商

在JPanel上使用GridBagLayout并将JButton放在里面时出现问题