runjvm 最近的时间轴更新
runjvm

runjvm

V2EX 第 210845 号会员,加入于 2017-01-14 23:14:12 +08:00
runjvm 最近回复了
2017-09-23 04:17:38 +08:00
回复了 linuxchild 创建的主题 Python 使用 Python 处理大文件有什么推荐的方式么?
之前的办法大概需要多久…
2017-04-27 00:02:32 +08:00
回复了 peneazy 创建的主题 程序员 关于 js 与 Java 堆栈内存的一些疑惑
前面很多同学说的都不太准确。
以 HotSpot 8 为例,静态变量并不存放在方法区或者 PermGen 或者 MetaSpace ,每一个类被解析后都有一个对应的 mirror 对象,这个对象是 java.lang.Class 类型,“方法区”存的只是元数据,譬如描述类的结构、各字段分别什么类型之类的,每一个类的元数据有个指针指向这个对应的 mirror 对象,静态变量是这个 mirror 对象的一个字段, mirror 对象不是只有那些静态变量对应的字段,它还有许多其他的字段用于 reflection 。而 mirror 对象其实都在堆上,于是静态变量作为其一个字段也在堆上。一个 Java 程序一旦运行其实最开始被分配的那些对象就是 primitive 类型对应的 mirror 对象。

所以短答案是,静态变量的元数据在方法区,但是静态本身在堆上。

至于前面同学说的逃逸分析,逃逸分析只在编译优化时发生,在解释器里 new 出来的实例对象总是在堆里。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1069 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 10ms · UTC 21:38 · PVG 05:38 · LAX 13:38 · JFK 16:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.