最近在看java bytecode, 也趴了许多文, 但是简单好看的文章好少,
国外文章都英文, 硬看下去感觉不懂的地方还是很多.
有几个问题想知道大家的看法或可以给我一点方向.
1. 猛虎出闸中说明了存储器会被分成 Global, Stack, Heap
但是在bytecode中好像只用到了Stack, Heap, 是不是Global也是Heap之一呢?!
会这么认为是因为在使用static 的变量的时候, 他的宣告也会在heap中的constant pool中出现.
2. 由上推论 constant pool 储存的值, 既是Heap+Global的值, 外加所用到类别型态的宣告(如java/lang/String), 外国网站看到(numeric literals, string literals, class references, field references, method references), 其中numeric literals真的有点不懂, 至于其他的大智在执行后略知一二. 这样对于constant pool内储存的东西是否已完整. <- 不知可否先忽略identify 跟 tag
3. 在constant pool 被 bytecode 参考之外, 由其中的参考方向有的仍未被参考到, 那是被谁用去了 ?
4. 对classfile可以由反编译看到原本类似的source code, 说类似是因为我自己实作后变量名称既不会保留也不会在 constantpool 中看到, 那就表示只要拿到 class file就一定可以经由反编译得到除了变量名称不一样的原始档了吗? 有没有什么情况是不可能或是不能的 (先不考虑做其他处理)
谢谢