zoukankan      html  css  js  c++  java
  • 虚拟机栈相关的问题

    Q:举例栈溢出的情况?(StackOverflowError)

    A:递归调用等,通过-Xss设置栈的大小

    Q:调整栈的大小,就能保证不出现溢出么?

    A:不能,如递归无限次数肯定会溢出,调整栈大小只能保证溢出的时间晚一些

    Q:分配的栈内存越大越好么?

    A:不是 会挤占其他线程的空间

    Q:垃圾回收是否会涉及到虚拟机栈?

    A:不会

    内存区块 Error GC
    程序计数器
    本地方法栈
    虚拟机栈
    堆区
    方法区

     

    Q:方法中定义的局部变量是否线程安全

    A:要具体情况具体分析

     1 /**
     2  * 方法中定义的局部变量是否线程安全?具体情况具体分析
     3  *
     4  * 何为线程安全?
     5  *     如果只有一个线程可以操作此数据,则毙是线程安全的。
     6  *     如果有多个线程操作此数据,则此数据是共享数据。如果不考虑同步机制的话,会存在线程安全问题
     7  *
     8  * StringBuffer是线程安全的,StringBuilder不是
     9  */
    10 public class StringBuilderTest {
    11 
    12     //s1的声明方式是线程安全的
    13     public static void method1(){
    14         StringBuilder s1 = new StringBuilder();
    15         s1.append("a");
    16         s1.append("b");
    17     }
    18 
    19     //stringBuilder的操作过程:是不安全的,因为method2可以被多个线程调用
    20     public static void method2(StringBuilder stringBuilder){
    21         stringBuilder.append("a");
    22         stringBuilder.append("b");
    23     }
    24 
    25     //s1的操作:是线程不安全的 有返回值,可能被其他线程共享
    26     public static StringBuilder method3(){
    27         StringBuilder s1 = new StringBuilder();
    28         s1.append("a");
    29         s1.append("b");
    30         return s1;
    31     }
    32 
    33     //s1的操作:是线程安全的 ,StringBuilder的toString方法是创建了一个新的String,s1在内部消亡了
    34     public static String method4(){
    35         StringBuilder s1 = new StringBuilder();
    36         s1.append("a");
    37         s1.append("b");
    38         return s1.toString();
    39     }
    40 
    41     public static void main(String[] args) {
    42         StringBuilder s = new StringBuilder();
    43         new Thread(()->{
    44             s.append("a");
    45             s.append("b");
    46         }).start();
    47 
    48         method2(s);
    49 
    50     }
    51 
    52 }

    附:JVM学习目录

     

  • 相关阅读:
    leetcode链表--7、rotate-list(将单链表从右数第k个结点以及之后结点移动到链表最前头)
    10、剑指offer--矩形覆盖
    leetcode链表--6、linked-list-cycle-ii(有环单链表环的入口结点)
    9、剑指offer--变态跳台阶
    8、剑指offer--跳台阶
    leetcode链表--5、linked-list-cycle(单链表是否有环)
    7、剑指offer--斐波那契数列
    Node.js 学习(二) 创建第一个应用
    Node.js 学习(一) 安装配置
    JavaScript 函数调用
  • 原文地址:https://www.cnblogs.com/ding-dang/p/13072678.html
Copyright © 2011-2022 走看看