晚上翻 林昊 写的 <<分布式java应用>>,感觉很精辟。 还没系统看,刚刚看了下java内存模型这一块,做点笔记:)
首先为了跨系统的特性,java中是没有寄存器的。
然后分析一下jvm是怎么瓜分内存的~
线程栈(书中的jvm内存栈):线程私有的运行时的方法栈
jvm 堆: java用来存放对象的地方。根据对象的生命周期长短以及为了根据不同垃圾回收算法的特性取得更大性能,
划分为: Eden,S0,S1,Old
java永久内存区:存放加载的类的信息(名称,修饰符,field信息,method信息),类中的静态常量, 类中
final类型的常量(注意:是常量。如果是一个Reference,哪怕是Integer的Reference也不包括在内。)
这根final的定义有关系:
禁止再次赋值。
也就是说,如果是一个Reference,那么即使指向的对象里面的内容变了,只要不指向另一个对象,
就不违背fina的语义。而常量就不一样了:final之后就再也不能变化了。所以final 常量可以放在永久区
而final reference不可以。
另外:java中的字符串常量池也放在这里面。