jvm
huhuhu1234565asdf
这个作者很懒,什么都没留下…
展开
-
jvm的线程、栈与栈帧
在java语言里面,java线程与操作系统的线程一对一绑定,jvm的参数-Xss设置的就是操作系统线程栈的大小。 在java中创建Thread对象并调用其start方法,jvm会创建一个java线程,并创建一个操作系统线程,然后将操作系统的线程绑定到java线程上。在hotspot虚拟机中的实现如下: native_thread = new JavaThread(&thread_entry,sz); os::create_thread(this,thr_type,stack_sz) OSThrea原创 2021-01-24 15:42:58 · 825 阅读 · 0 评论 -
java的内存分配原则
上篇文章说了,对象有可能会分配栈上,这篇文章就来详细说一下java的内存分配原则。 先来说说栈上分配 栈上分配有两个技术基础: 逃逸分析 定义:在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他过程或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。 标量替换 允许将对象打散分配在栈上,比如若一个对象拥有两个字段,会将这两个字段视作局部变量原创 2021-01-23 16:17:34 · 246 阅读 · 1 评论 -
jvm之运行时内存结构
java虚拟机运行时数据区分为:虚拟机栈,本地方法栈,堆,方法区和程序计数器(在hotspot虚拟机实现中:虚拟机栈、本地方法栈合二为一),如下图所示: java虚拟机栈是线程私有的,它的生命周期与线程的生命周期相同。 java堆是线程共享的,用于存放对象实例,但并不是所有的对象都会放在堆中。比如说,开启了逃逸分析,JIT会将对此执行的字节码编译为机器码以提高运行速度,具体的实现和操作系统、虚拟机的运行模式有关(虚拟机的运行模式有三种:客户端模式,服务器模式,混合模式,只有在服务器模式才能开启逃逸分析,原创 2021-01-23 15:20:45 · 125 阅读 · 0 评论