数据什么时候在堆中
什么时候在栈中
堆跟数据结构中的堆没关系!!!!!!!!!!!!
为什么很多高级语言都把这个叫做堆?
最早Lisp这种语言,的确是用堆来管理内存的。
之后不用堆来管理了,但是沿用了这种说法。
那为什么还有栈呢?
函数是在栈中滴
函数调用栈……main()不是栈底,main()之前还有好几个函数
栈里存什么
local变量
假设函数调用
main===》》obj.a()
a是普通对象的一个方法
有一个参数,如果参数是基本变量,那么直接存栈,如果是对象,存对象的引用
然后才是local 变量
对象的引用
堆里存什么?
栈里存对象
而且每个线程一个栈
整个JVM一个堆
线程跟线程之间的数据共享是靠堆实现的。
为什么方法里定义的变量必须初始化?
不初始化的话栈里没有这个变量的位置。
高并发开发
极端情况
高并发的难点在于自己的应用服务,而不在于使用的底层技术(比如GC)
JVM的参数应该充分服务于应用服务
先把增删改查做好。
大多数准备都是在解决极端情况。