JVM作为实现层,它里面的很多数据结构都有“两面性”

引自第3篇文章的一段:

java 虚拟机的实现,本身就是其他语言的一种实现,可以是C/C++ ,也可以是java ,也可以是javascript;

是其他语言实现的一种应用程序。

从Java 语言实现的角度上看,分配在stack中的数据,

而在虚拟机实现的角度上看,则可以分配在heap中



题主所说的来自JVM规范描述JVM Stacks的一段:

Because the Java Virtual Machine stack is never manipulated directly except to push and pop frames,
frames may be heap allocated.
The memory for a Java Virtual Machine stack does not need to be contiguous.

规范规定得很松,留给实现非常大的选择空间。
要留意的重点就是,JVM作为实现层,它里面的很多数据结构都有“两面性”

[ 被实现的语言的语义层面 | 实现语言层面 ]


用HotSpot VM举个简单的例子:

      language semantics      |  implementation-level detail
                              |
java.lang.String (Java) <- [ ... ] -> instanceOopDesc (C++)
                              |
                              |

同一块内存区域,

对java 语言层面来说,它是一个String 类,有方法,有参数,可以用java 字节码对其进行操作;

对Hotspot VM 内部层面来说,这块内存是一个 C++ 的instanceOopDesc 对象,有指针,可以通过内存偏移量来操作其状态。


我们平台在对接设备的一些Java sdk时,Java sdk基本都是封装的对C/C++ 的操作,一方面,我们可以通过java 语言的语法,对一个java 对象进行操作;另一方面,可以通过指针,修改偏移量来操作这块内存的值和属性。

 

参考:

Java 释放Memory 对象分配的内存

native memory和 native heap 及 GC heap有什么关系?

stack、heap 和 jvm stack、jvm heap区别?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值