美文网首页
高级工程师---JVM第一期

高级工程师---JVM第一期

作者: 薛定谔_810a | 来源:发表于2019-08-19 11:59 被阅读0次

    问题1:为什么做堆栈分离?
    答:1.因为堆可以线程共享,而栈是线程独占,所以可以节约内存。
    2.模块化的设计思想
    3.栈因为需要保存系统运行上下文(线程切换),所以地址段是提起划分
    好的,也就是说,栈的大小是固定的(可以用jmeter查看线程创
    建时的内存变化情况,基本一个线程给10m的内存空间)
    4.面向对象--就是堆栈,堆存储属性,栈储存方法,属性就是数据,方
    法就是运行逻辑。


    问题2:堆栈中分别存什么?
    答: 堆:存对象,大小不可估。
    栈:基本数据类型(大小固定,且小(1-8个字节)),堆对象引用
    (4btye)


    问题3:java中参数传递是值传递还是引用传递
    答: 在栈中都是传引用值调用。咋进入被调用方法时,被传递的这个引用的值,
    被程序查找到堆中,这个时候才对应到真正的对象。如果此时修改,
    是修改的堆对象,而非引用,所以修改是可以保持的。


    问题4:Java对象的大小?
    答: 空Object对象的大小是8byte,完成生命周期的空间大小是4byte(栈中引用的大小)
    +8byte。所以其他对象的大小可以根据基本类型计算。
    包装类型是对象,它的大小至少16byte(java大小是8的整数倍),基本内存开销是基本
    类型的N倍,另外JDK5有自动类型转换了。
    问题5:引用类型
    答: 强引用:new对象时,虚拟机生成的引用。被强引用则不会被垃圾回收
    软引用:缓存,内存多就不回收,内存少就回收,OutofMemory时,肯定没软引用了
    弱引用:缓存,只要发生垃圾回收就一定回收,活不过一个周期
    虚引用:跟踪垃圾回收过程,做系统通知用,告知对象被收集器回收了
    虚引用编码时接触不到,软虚做缓存,但是内存够时应该用强引用做缓存,控制权
    不要交给jvm

    相关文章

      网友评论

          本文标题:高级工程师---JVM第一期

          本文链接:https://www.haomeiwen.com/subject/vmcbjctx.html