美文网首页
01__JVM(2)线程私有部

01__JVM(2)线程私有部

作者: 忞触动心灵 | 来源:发表于2019-05-25 16:56 被阅读0次

线程私有部分(指令区)-----运行时才有

image

运行时数据区------内存分配和优化

运行时分配

生命周期是跟随线程的

异常情况

方法的递归调用

递归循环
package testWork;

// -Xss128k 设置虚拟机栈的大小为128k

public class JavaWNStackSOF {

    private int stackLongth = 0; //调用方法的次数
    //递归循环
    public void tech() {//只会入栈,不会出栈了.(一次就有一个栈帧)
        stackLongth++;
        //做点其他事
        tech();//再调用一次(不会 出栈)
    }

    public static void main(String[] args) throws Throwable {

        JavaWNStackSOF oom = new JavaWNStackSOF();

        try {
            oom.tech();//调用方法
        }catch (Throwable e) {
            //输出异常时循环次数(不是一个普通的异常)
            System.out.println("栈异常! 调用方法的次数(入虚拟机栈的栈帧次数)."
            +oom.stackLongth);

            throw e;
        }

    }

}

测试

package testWork;

public class JavaWNStackSOF {

    /**
     * Run-->Edit Configurations-->VN Options :设置虚拟机栈内存大小 -Xss128k
     *  -Xss128k 栈异常! 调用方法的次数(入虚拟机栈的栈帧次数).993
     *  -Xss512k 栈异常! 调用方法的次数(入虚拟机栈的栈帧次数).7310
     *  默认大小  栈异常! 调用方法的次数(入虚拟机栈的栈帧次数).24741
     */
    private int stackLongth = 0; //调用方法的次数
    //递归循环
    public void tech() {//只会入栈,不会出栈了.(一次就有一个栈帧)
        stackLongth++;
        //做点其他事
        tech();//再调用一次(不会 出栈)
    }

    public static void main(String[] args) throws Throwable {

        JavaWNStackSOF oom = new JavaWNStackSOF();

        try {
            oom.tech();//调用方法
        }catch (Throwable e) {
            //输出异常时循环次数
            System.out.println("栈异常! 调用方法的次数(入虚拟机栈的栈帧次数)."
            +oom.stackLongth);

            throw e;
        }


    }

}

加局部变量(栈帧中加内容:加大栈帧)


 默认大小:    栈异常! 调用方法的次数(入虚拟机栈的栈帧次数).16387
 
 
         int a = 1;
         int b = 2 ;
         int c = ++a+ ++b;

优化策略

1.调整虚拟机的大小,调大还时调小? (虚拟机栈的大小设置 -Xss512k 默认 1M)

栈需要调整==小点==

线程的私有部分(程序计数器,本地方法栈,==虚拟机栈==)----线程运行时才有

高并发,多线程 : 栈的大小 1M = 1000线程同时运行 * 1M = 1G的运行内存

一个线程就有一个对应的虚拟机运行栈:一般栈的大小设为128k=1000线程同时运行*128K = 128M

相关文章

  • 01__JVM(2)线程私有部

    线程私有部分(指令区)-----运行时才有 运行时数据区------内存分配和优化 运行时分配 生命周期是跟随线程...

  • jvm运行时区域

    程序计数器1、 线程私有。2、 唯一一个没有OutOfMemoryError异常的区域。 虚拟机栈1、线程私有。2...

  • E.JVM

    1、JVM定义 Java虚拟机包括程序计数器(线程私有),虚拟机栈(线程私有),本地方法栈(线程私有),Java堆...

  • jvm的一些笔记

    jvm内存模型 一. 线程私有区域 线程私有数据区域生命周期与线程相同, 依赖用户线程的启动/结束而创建/销毁(在...

  • JVM学习路线

    JVM内存模型 程序计数器(当前线程执行字节码的行号):线程共享虚拟机栈:线程私有本地方法栈:线程私有堆:线程共享...

  • 源码 InheritableThreadLocal(作用域扩散)

    继上篇文章《源码 ThreadLocal (线程私有变量)》后,我们明白了ThreadLocal是如何实现线程私有...

  • Java 线程安全 与 锁

    Java 线程安全 与 锁 多线程内存模型 线程私有栈内存每个线程 私有的内存区域 进程公有堆内存同一个进程 共有...

  • JVM 内存模型

    1.内存模型 JVM 内存分为 线程私有区 和 线程共享区。 线程私有区:程序计数器用作 多线程切换虚拟机栈管理J...

  • JVM篇

    一、java内存区域的组成 程序计数器,线程私有,用来存储线程执行到哪条字节码指令; 栈,线程私有,存储局部变量,...

  • 01__JVM(3)线程共享区

    JVM(3)线程共享区 方法区 类信息 常量 静态变量 及时编译期编译后的代码(运行时编译的 如:动态代理添加的)...

网友评论

      本文标题:01__JVM(2)线程私有部

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