关于Java栈的问题

问题描述

我在Java虚拟机那本书里面看到说虚拟机栈是线程私有的,但是为什么网上一大片都说栈可以共享数据?线程私有怎么共享?我的理解是,对于每一个线程,它的栈里面的值是相同的?所以说栈可以共享数据也没什么问题了?

解决方案

时间: 2025-01-24 10:43:05

关于Java栈的问题的相关文章

Java栈与堆一篇好文

Java栈与堆   ----对这两个概念的不明好久,终于找到一篇好文,拿来共享   1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.   2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再

java-关于Java栈的问题,它是共享的吗

问题描述 关于Java栈的问题,它是共享的吗 我在Java虚拟机那本书里面看到说虚拟机栈是线程私有的,但是为什么网上一大片都说栈可以共享数据?线程私有怎么共享?我的理解是,对于每一个线程,它的栈里面的值是相同的?所以说栈可以共享数据也没什么问题了? 解决方案 栈是线程私有的,意思是说每个线程都有自己的栈. 而栈可以共享数据是说,线程a在栈上的数据,线程b也是可以访问的(比如a把某个栈上变量传给了b),因为他们在一个进程内,数据访问是没有问题的. 对于每一个线程,栈里面的内容当然不一样,你要去找文

Java栈

我们天天在说java堆java栈,究竟什么是java栈? 首先需要明确一个概念,那就是通常我们说的堆.栈与java堆.java栈并不是一个东西.java堆和java栈可能都是在我们通常所说的堆中划分出内存的.在java层面上,将这划分出的内存按其用途称为java堆.java栈. <The Java Virtual Machine Specification Java SE 7 Edition>(中文版<Java 虚拟机规范(Java SE 7 版)>)中对java栈是这么解释的:

java虚拟机 jvm 出入java栈 栈空间内存分配

java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调用其实是通过java栈传递数据的. 数据结构中的栈的特性:先进后出,后进先出.FIFO. java内存中的栈跟数据结构中的特性相似也是FIFO.但是只支持进栈和出栈操作. java栈中保存的主要内容是栈帧.每一次函数调用都会有对应的栈帧被压进去java栈,执行完毕的时候被弹出java栈.如下图所示. 函数1对应栈帧1,函数2对应栈帧2.函数3对

关于Java栈与堆的思考

1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2.栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存取速度较慢. 3.Java中的数据类型有

Java栈的实例-数组和链表两种方法(转)

一.栈 栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表. 栈的修改是按后进先出的原则进行.每次删除(退栈)的总是当前栈中" 最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部, 要到最后才能删除.  2.栈的基本运算  (1) 判断栈是否

java栈中变量的作用域与内存回收问题上的一点小疑问?

问题描述 一个类的实例方法public void test(){ //dosomethings ... for(int i=0;i<100;i++){ //dosomethings ... } //dosomethings.....}这段方法在执行时,变量i的作用域在for循环块中,当出了for循环块以外,变量i失效.但是我想问一下,当出了for循环块以后,变量i的所在内存是否会被回收.也就是说是否在此test方法的栈帧出栈之前被回收? 解决方案 当调用一个java方法时,产生一个帧,帧里面包括

java内存管理(堆、栈、方法区)

java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉到的内存问题,并且在内存问题出现的时候,也不能很快的定位并解决.因此,了解并掌握Java的内存管理是我们必须要做的是事,也只有这样才能写出更好的程序,更好地优化程序的性能. 概述 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁

Java异常的栈轨迹(Stack Trace)

3.fillInStackTrace() 我们在前面也提到了这个方法.要说清楚这个方法,首先要讲一下捕获异常之后重新抛出的问题.在catch代码块中捕获到异常,打印栈轨迹,又重新throw出去.在上一级的方法调用中,再捕获这个异常并且打印出栈轨迹信息.这两个栈轨迹信息会一样吗?我们看一下代码: public class TestPrintStackTrace {     public static void f() throws Exception{         throw new Exce