GC垃圾回收器
数据域---------堆区--------栈区 栈运行时开始运行时结束
JVM内存模型 jvm栈-------jvm堆--------jvm方法区(常量池)
引用中比较相等用equals比较的是对象的值,==比较的是对象的地址。
常量池中地址只有一个,Inter用来返回常量池的地址
byte------>int------->float------->double
short,char---->int------>long------->double
int--------------------->double
final将变量转为常量,常量在编译期间运算,变量在运行时才运算
查看Integer装包还是拆包 :查看反汇编 Integer装包.拆包 是自动的
PC寄存器:CPU下一行要运行的知识的地址
OOM异常 :内存不足 java中只有PC不会出现OOM异常
函数调用在JVM(虚拟机栈上)
一个空类的大小是8个字节
查看一个堆的大小:先让程序停止(加断点调试状态)
jps
javaw pid
jmap -histo:live pid > d:sjnjn.txt
32位内存,8字节对齐,一个整型 4四个字节 对象头(8个)+length(4个)
?区别与联系:StringBuilder
StringBuffer 用于多线程中
Integer short long string ---》不可变类
StringBuilder 可变地参元素的值
new 对象1.给对象开辟内存,2.给对象初始化
当一个类没有任何构造函数时,JVM会给这个类自动产生一个默认构造函数,构造函数只有类名和参数列表,如果用户定义了构造函数,JVM不会给这个类提供默认的构造函数
普通变量在堆上,静态变量在方法区(所有方法共享)
静态方法可以用类名来调用(无对象),普通方法只能用对象来调用,编译时系统会自动给对象加上This.引用变量
java类的加载过程:
系统调用时:静态初始化块 1次(只在最先调用一次)
实例初始化块 n次 (每产生一次对象之前都要调用一次)
构造函数 n次