在c类语言上申请一个内存来存放data,jvm会不会在这个内存不释放的情况下改变这个data的位置?
时间: 2023-02-12 21:36:19 浏览: 51
在 C 语言中申请内存来存放数据时,如果使用了 malloc 或 calloc 函数进行内存分配,则在不释放内存的情况下 JVM 不会改变这个数据的位置。但是如果使用了垃圾回收机制, JVM 就会移动这些数据。
相关问题
javajvm内存模型图
JVM(Java Virtual Machine)内存模型图如下:
```
+------------------------------------------------+
| JVM Memory |
+------------------------------------------------+
| |
| +--------------------------------+ |
| | Method | |
| +--------------------------------+ |
| | Heap (Object Data) | |
| +--------------------------------+ |
| | Java Stack | |
| +--------------------------------+ |
| | Native Method | |
| | Stack (C/C++) | |
| +--------------------------------+ |
| |
+------------------------------------------------+
```
上述图中的各个部分解释如下:
1. Method Area:存放类的元数据信息、静态变量、常量池等。
2. Heap:存放对象实例及数组数据。
3. Java Stack:存放方法的局部变量、方法参数、操作数栈等。
4. Native Method Stack:存放使用其他语言编写的方法的数据。
5. Program Counter Register:记录当前线程执行的字节码指令位置。
需要注意的是,这只是一个简化的内存模型图,实际情况可能还会有一些其他细节和区域。此外,不同的JVM实现可能会有一些差异。
ThreadLocal在JVM哪个区
ThreadLocal对象在JVM中存放在堆(heap)区。 虽然ThreadLocal对象也是对象,但JVM通过一些技巧将其可见性变为线程可见,而不是放在栈上。 ThreadLocal的内部实现是使用ThreadLocalMap来维护各个线程的变量副本,而ThreadLocalMap又是存放在线程的Thread对象中的,即存放在堆中。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [ThreadLocal类](https://blog.csdn.net/qq_40124555/article/details/122097297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [ThreadLocal的复习](https://blog.csdn.net/yundanfengqingfeng/article/details/108177980)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]