相关疑难解决方法(0)

java内存池是如何划分的?

我目前正在使用jconsole监视Java应用程序.内存选项卡允许您选择:

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”
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别?

java memory pool

216
推荐指数
4
解决办法
17万
查看次数

了解JVM内存分配和Java内存不足:堆空间

我正在研究真正了解内存分配在JVM中的工作原理.我正在编写一个应用程序,其中我将失去内存:堆空间异常.

我知道我可以将诸如Xms和Xmx之类的VM参数传递给JVM为正在运行的进程分配的堆空间.这是问题的一种可能的解决方案,或者我可以检查我的代码是否存在内存泄漏并解决问题.

我的问题是:

1)JVM如何为自己实际分配内存?这与操作系统如何将可用内存传递给JVM有何关系?或者更一般地说,任何进程的内存分配实际上如何工作?

2)虚拟内存如何发挥作用?假设您有一个具有32GB物理内存的系统,并且您将所有32GB分配给您的Java进程.假设您的进程实际上消耗了所有32GB的内存,我们如何强制使用虚拟内存而不是运行到OOM异常?

谢谢.

java memory jvm memory-management out-of-memory

24
推荐指数
2
解决办法
4万
查看次数

JVM内存段分配

好吧我有一个关于JVM的内存段的问题,我知道每个JVM都会选择实现这个有点不同但它是一个整体概念,应该在所有JVM中保持相同

在运行时期间不使用虚拟机执行的标准C/C++程序在运行时期间有四个内存段,代码/堆栈/堆/数据所有这些内存段在运行时由操作系统自动分配.

但是,当JVM执行Java编译的程序时,在运行时它有5个内存段

方法区/堆/ Java堆栈/ PC寄存器/本机堆栈

我的问题是,谁分配和管理那些内存段?操作系统不知道正在运行的java程序,并认为它是作为计算机上的常规程序运行的JVM的一部分,JIT编译,Java堆栈使用,这些操作需要运行时内存分配,以及我是什么无法理解JVM是如何将内存划分为这些内存段的.它绝对不是由操作系统完成的,那些内存段(例如java堆栈)必须是连续的才能工作,所以如果JVM程序只是使用诸如malloc之类的命令来获得最大的大小堆内存并将内存分成几段,我们没有连续记忆的承诺,如果有人可以帮我把这个直接记在脑子里,我会很喜欢它,这一切都混淆了......

memory garbage-collection jvm

5
推荐指数
1
解决办法
666
查看次数