*/!本地方法栈
3 JVM 相关问题
问:堆和栈有什么区别
答:堆是存放对象的,但是对象内的临时变量是存在栈内存中,如例子中的 ! 是
在运行期存放到栈中的。
栈是跟随线程的,有线程就有栈,堆是跟随 的,有 就有堆内存。
问:堆内存中到底存在着什么东西?
答:对象,包括对象变量以及对象方法。
问:类变量和实例变量有什么区别?
答:静态变量是类变量,非静态变量是实例变量,直白的说,有 / 修饰的变量是静态变
量,没有 / 修饰的变量是实例变量。静态变量存在方法区中,实例变量存在堆内存中。
问:我听说类变量是在 JVM 启动时就初始化好的,和你这说的不同呀!
答:那你是道听途说,信我的,没错。
问:Java 的方法(函数)到底是传值还是传址?
答:都不是,是以传值的方式传递地址,具体的说原生数据类型传递的值,引用类型传递
的地址。对于原始数据类型, 的处理方法是从 !9 或 中拷贝到 ,
然后运行 中的方法,运行完毕后再把变量指拷贝回去。
问:为什么会产生 OutOfMemory 产生?
答:一句话: 内存中没有足够的可用内存了。这句话要好好理解,不是说 没有
内存了,是说新申请内存的对象大于 空闲内存,比如现在 还空闲 ),但是新
申请的内存需要 ),),于是就会报 了,可能以后的对象申请的内存都只要
&,@,于是就只出现一次 ,A" 也正常了,看起来像偶发事件,就是这么回
事。 但如果此时 A" 没有回收就会产生挂起情况,系统不响应了。
问:我产生的对象不多呀,为什么还会产生 OutOfMemory?
答:你继承层次忒多了, 中 产生的对象是先产生 父类,然后才产生子类,明白不?
问:OutOfMemory 错误分几种?
答 : 分两 种 , 分 别 是“ B-!C 和 ” B#A
,两种都是内存溢出,!C 是说申请不到新的内存了,这个很常见,检查应用
或调整堆内存大小。
D#A是因为永久存储区满了,这个也很常见,一般在热发布的环境中出现,是
因为每次发布应用系统都不重启,久而久之永久存储区中的死对象太多导致新对象无法申
请内存,一般重新启动一下即可。