新建一个JAVA线程,占用的是JAVA堆内存还是 *** 作系统的内存?

新建一个JAVA线程,占用的是JAVA堆内存还是 *** 作系统的内存?,第1张

Thread对象本身是在堆内存创建的,调用start()后开辟的线程空间是属于内存的。内存管理在Java语言中是JVM自动 *** 作的,当JVM发现某些对象不再需要的时候,就会对该对象占用的内存进行重分配(释放) *** 作,而且使得分配出来的内存能够提供给所需要的对象。

在一些编程语言里面,内存管理是一个程序的职责,但是书写过C++的程序员很清楚,如果该程序需要自己来书写很有可能引起很严重的错误或者说不可预料的程序行为,最终大部分开发时间都花在了调试这种程序以及修复相关错误上。

相关信息

在以前的编程过程中,手动内存管理带了计算机程序不可避免的错误,而且这种错误对计算机程序是毁灭性的,所以内存管理就成为了一个很重要的话题,但是针对大多数纯面向对象语言而言,比如Java,提供了语言本身具有的内存特性。

自动化内存管理,这种语言提供了一个程序垃圾回收器(Garbage Collector[GC]),自动内存管理提供了一个抽象的接口以及更加可靠的代码使得内存能够在程序里面进行合理的分配。最常见的情况就是垃圾回收器避免了悬挂引用的问题。

因为一旦这些对象没有被任何引用“可达”的时候,也就是这些对象在JVM的内存池里面成为了不可引用对象,该垃圾回收器会直接回收掉这些对象占用的内存,当然这些对象必须满足垃圾回收器回收的某些对象规则,而垃圾回收器在回收的时候会自动释放掉这些内存。

可以用 system(命令) 调用 DOS/Windows 命令 获取 正在使用多少 内存 (memory).

命令例子:

wmic process where name="cmd.exe" get WorkingSetSize

这里 "cmd.exe" 你可替换成 你的程序 名字。

你也可以用你的程序 进程 PID 号数 调用, 命令是:

wmic process where processid=6884 get WorkingSetSize

这里6884你可替换成 你的程序 进程 PID。

输出有2行,第二行是占用内存字节数:

WorkingSetSize

4616192

c/c++ 语言 :

system("wmic process where processid=6884 get WorkingSetSize")

system("wmic process where name=\"cmd.exe\" get WorkingSetSize")

用程序名调用时,若有多个同名程序在运行,输出的 内存数 将分行输出出来。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11125563.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存