《深入理解java虚拟机》-目录结构

第一部分 走进Java

第1章 走进Java

第二部分 自动内存管理机制

第2章 Java内存区域与内存溢出异常

2.1 概述

2.2 运行时数据区域

2.2.1 程序计数器

2.2.2 java虚拟机栈

2.2.3 本地方法栈

2.2.4 Java堆

2.2.5 方法区

2.2.6 运行时常量池

2.2.7 直接内存

2.3 HotSpot虚拟机对象探秘

2.3.1 对象的创建

2.3.2 对象的内存布局

2.3.3 对象的访问定位

2.4 实战:OutOfMemoryError异常

2.4.1 Java堆溢出

2.4.2 虚拟机栈和本地方法栈溢出

2.4.3 方法区和运行时常量池溢出

2.4.4 本机直接内存溢出

2.5 本章小结

第3章 垃圾收集器与内存分配策略

第4章 虚拟机性能监控与故障处理工具

第5章 调优案例分析与实战

第三部分 虚拟机执行子系统

第6章 类文件结构

第7章 虚拟机类加载机制

第8章 虚拟机字节码执行引擎

第9章 类加载及执行子系统的案例与实战

第四部分 程序编译与代码优化

第10章 早起(编译期)优化

第11章 晚期(运行期)优化

第五部分 高效并发

第12章 Java内存模型与线程

第13章 线程安全与锁优化

我们可以吧Java程序设计语言、Java虚拟机、Java API类库这三个部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发最小环境。另外,可以把Java API类库中的JavaSE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行标准环境

类的方法存在哪里?

类加载时,方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。
如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java 是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在传递给对象参数的时候,Java 编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java 编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。


你可能感兴趣的:(JVM)