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

问题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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 所有知识点已整理成app app下载地址 J2EE 部分: 1.Switch能否用string做参数? 在 Jav...
    侯蛋蛋_阅读 2,557评论 1 4
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,229评论 0 12
  • 嘿!小姑娘, 你是否常听见有个人说, 说你是个可爱的姑娘, 他要带你去看看这世界不同的地方, 你会受伤、也会迷茫,...
    烟味于红玫瑰阅读 500评论 0 0
  • DHCP I added a dhcp entry to /etc/network/interfaces auto...
    七点水Plus阅读 93评论 0 0