JVM内存结构
堆:所有对象实例或数组都在Java堆上分配内存,堆大小由-Xmx和-Xms调节;
方法区:存放虚拟机加载类的相关信息,如类静态变量和常量;(堆中的一部分,堆中的永久区)
栈:存放线程调用方法时,存储局部变量表、操作、方法出口等与方法执行相关的信息。
在Java虚拟机规范中将Java运行时数据划分为6中,分别为:
pc寄存器数据:保存当前正在执行程序的内存地址;
Java栈:Java栈总是和线程关联在一起,每当创建一个线程是,JVM就会为这个线程创建一个对应的Java栈,Java栈又含有多个栈帧,这些栈帧与每个方法关联起来,每运行一个方法就创建一个栈帧,每个栈帧会含有一些内部变量(在方法内定义的变量),操作栈和方法返回值等信息。Java栈与Java线程对应起来的,数据不是线程共享的,所以不用关心数据一致性问题;
堆:堆是存储Java对象的地方。每一个存储在堆中的Java对象都是这个对象的类的一个副本,它会复制包括继承自它弗雷的所有非静态属性。堆是线程共享的,应注意同步问题。
方法区:用于存储类结构信息的地方;
运行时常量池:是方法区的一部分。代表运行时每个class文件中的常量表;
本地方法栈:为JVM运行Native方法准备的空间。
JVM内存分配策略
堆主要用来存放对象,栈主要用来执行程序。
垃圾回收(GC)
JVM在做垃圾回收是会检查堆中的所有对象是否都会被这些根对象(方法中局部变量区中对象的引用、Java操作栈中对象引用、常量池中对象引用、本地方法中持有的对象引用、类的Class对象)直接或者间接引用,能够被引用的对象就是活动对象,否则就可以被垃圾收集器回收。
第9章 servlet工作原理解析
第13章 Spring框架的设计理念与设计模式分析
- Bean:(Bean包装的是Object)实体对象类,可以将对数据库的操作抽象成对类的操作;
- context:发现、建立、维护Bean之间的关系,context是bean关系的集合,这个关系集合又叫IOC容器;(context组件实际上给Spring提供一个运行时的环境,用以保存各个对象的状态)
- IOC容器:被Bean包裹的对象;
- Core组件:发现、建立、维护每个Bean之间关系所需要的一系列工具(Core组件又叫Util);
- ApplicationContext.xml:Ioc容器的默认配置文件;
第15章 深入分析Ibatis框架之系统架构与映射原理
Ibatis功能:
- 根据JDBC规范建立与数据库的连接;
- 通过反射打通Java对象与数据库参数交互之间相互转化的关系。