2024-05-14 22:03:22 发布
网友
我正在阅读关于python内存分配的文章,想知道java和python是否安装在同一个计算机系统中,那么java和python是使用相同的堆栈和堆,还是在RAM中为它们分配了不同的堆栈和堆
谁能帮我澄清我的疑问
提前谢谢
即使是实现细节,系统上的每个线程都有自己的堆栈。堆是70年代分段模型的一个映像,除了现代操作系统上的Java进程外,它对任何进程都没有意义:当进程需要更多内存时,它只向内核请求内存,没有预分配的堆。从某种意义上说,系统中的所有进程(Java进程除外)共享相同的可用内存池,但它不是所谓的堆
Java是不同的,因为Java程序在JVM中执行,JVM有其分配的内存,并且进程不需要系统内存。因此,在JVM中,整个进程都有一个堆,每个线程都有一个堆栈。如果您启动2个独立的Java程序,您将拥有2个独立的JVM,每个JVM都有自己的堆
两个不同的程序从不使用同一堆。它们各自获得一部分虚拟地址空间,这些地址空间在数字上可能以某种方式重叠,但它们是独立的。当一个程序实际上需要将页面放在RAM中时,它会以一种惰性的方式分配它们,通常分配4KB(可能更大)。这是通过Page Table实现的,它能够将虚拟地址空间映射到Physycal一(也可能是交换)
Page Table
你可能需要明白,你并不需要所有的东西,所有的时间都在RAM中。您的代码可以完成一小部分,然后将RAM中的空间提供给其他人,甚至可以进行交换
即使是实现细节,系统上的每个线程都有自己的堆栈。堆是70年代分段模型的一个映像,除了现代操作系统上的Java进程外,它对任何进程都没有意义:当进程需要更多内存时,它只向内核请求内存,没有预分配的堆。从某种意义上说,系统中的所有进程(Java进程除外)共享相同的可用内存池,但它不是所谓的堆
Java是不同的,因为Java程序在JVM中执行,JVM有其分配的内存,并且进程不需要系统内存。因此,在JVM中,整个进程都有一个堆,每个线程都有一个堆栈。如果您启动2个独立的Java程序,您将拥有2个独立的JVM,每个JVM都有自己的堆
两个不同的程序从不使用同一堆。它们各自获得一部分虚拟地址空间,这些地址空间在数字上可能以某种方式重叠,但它们是独立的。当一个程序实际上需要将页面放在RAM中时,它会以一种惰性的方式分配它们,通常分配4KB(可能更大)。这是通过
Page Table
实现的,它能够将虚拟地址空间映射到Physycal一(也可能是交换)你可能需要明白,你并不需要所有的东西,所有的时间都在RAM中。您的代码可以完成一小部分,然后将RAM中的空间提供给其他人,甚至可以进行交换
相关问题 更多 >
编程相关推荐