java虚拟机硬实战学习系列
jvm是一个比较难以学习和理解的东西设计到的底层知识很多,对java基本功要求很高,也是java开发人员突破自己的一个好路子,打算搞一个系列的专栏,大家一起学习交流
分享牛
BPM推广者,核心开发人员。盘
展开
-
java虚拟机 jvm 出入java栈 栈空间内存分配
java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程最基本的执行行为就是函数的调用。每次函数调用其实是通过java栈传递数据的。数据结构中的栈的特性:先进后出,后进先出。FIFO.java内存中的栈跟数据结构中的特性相似也是FIFO.但是只支持进栈和出栈操作。java栈中保存的主要内容是栈帧。每一次函数调用都会有对应的栈帧被压原创 2016-04-02 08:59:08 · 11079 阅读 · 4 评论 -
java虚拟机 jvm 局部变量表实战
java局部变量表是栈帧重要组中部分之一。他主要保存函数的参数以及局部的变量信息。局部变量表中的变量作用域是当前调用的函数。函数调用结束后,随着函数栈帧的销毁。局部变量表也会随之销毁,释放空间。由于局部变量表存在栈帧中。所以,如果函数参数和局部变量比较多,会使的局部变量表膨胀,每一次调用会占用更多的栈空间。最终结局就是栈空间内存一定的情况下调用的次数减少。1.1.1. 局部变量表变量影响原创 2016-04-02 12:48:36 · 9991 阅读 · 11 评论 -
java虚拟机 jvm 栈数据区
java栈帧还是需要一些数据支持常量池的解析、正常方法的返回和异常的处理。大部分的java字节码指令需要进行常量池的访问,在栈帧数据区中保存着访问常量池的指针,方便程序访问java常量池。如下图所示: 当函数返回或者程序出现异常的时候,jvm虚拟机必须恢复调用者函数的栈帧,并且让调用者函数继续执行。什么意思呢?举一个通俗的例子:a()调用b()当b()返回的时候肯定继续让a原创 2016-04-02 17:27:50 · 4073 阅读 · 0 评论 -
5.1.3.jvm java虚拟机系统参数查看
不同的参数配置对系统的执行效果有较大的影响,因此,我们有必要了解系统实际的运行参数。1.1.1.1. -XX:+PrintVMOptions参数-XX:+PrintVMOptions可以在程序运行时,打印虚拟机接受的命令行显式参数,输出如下:VM option '+PrintVMOptions'VM option '+PrintCommandLineFlags'这两个参数我们并原创 2016-04-04 08:50:54 · 5460 阅读 · 0 评论 -
jvm java虚拟机 新生代的配置
1.1.1.1. -Xmn参数参数-Xmn1m可以用于设置新生代的大小。设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般设置为整个堆空间的1/3到1/4左右最合适。参数-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例,公式如下:-XX:SurvivorRatio=e原创 2016-04-04 10:31:46 · 20532 阅读 · 6 评论