第一:

  程序运行的时候,JVM内存主要由以下部分组成:

  1. 所有线程共享一个堆,在 Java 虚拟机中,堆(Heap)是可供各条线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。

    Java 堆在虚拟机启动的时候就被创建,Java垃圾回收管理的主要区域,这些受管理的对象无需,也无法显式地被销毁。

    Java可以处在不连续的物理空间,逻辑上连续即可。

    Java虚拟机可以动态扩展堆的大小,当堆内存无法实现全部对象实例的内存分配,那 Java 虚拟机将会抛出一个OutOfMemoryError 异常。

  2. 方法区
    所有线程共享一个方法区;里面存放的内容有点杂,可以认为是除堆和栈中的其它东西(如类信息,静态变量,常量,代码等)。
    Java虚拟机规范规定可以不对方法区进行垃圾回收,当并不是不回收,主要看具体虚拟机的实现,比如可以回收一些废弃常量和无用的类;
  3. 程序计数器
    也叫PC,存放下一条指令所在单元的地址的地方;
  4. JAVA栈
    每个线程都有一个自己的JAVA栈;存放的一般是方法的局部变量,方法出口信息等;方法调用过程中,自动压栈出栈;ps:栈空间大小是有限制的;
  5. 本地方法栈
    与JAVA栈类似,区别是使用的对象不一样,本地方法栈是给Native方法使用的,JAVA栈是给JAVA方式使用的;

第二:

  局部变量线程安全,实例属性线程不安全,静态类的静态属性就不安全,但是静态方法里的参数是安全的

第三:

  当多个线程执行同一个方法的时候,

  什么时候可能会出现异常结果:

  多个线程共享一块内存区域,在不加任何保护情况下,对其操作;

  什么时候可能会得到正确的结果:

  不使用共享内存,每个线程内存空间相互独立;

  多线程共享一块内存区域,但是对这块共享区域加锁访问;

  对象锁和类锁:非静态方法使用synchronized时,用的是对象锁,静态方法用的是类锁;

JAVA 多线程环境下的静态方法的更多相关文章

  1. Java指令重排序在多线程环境下的应对策略

    一.序言 指令重排在单线程环境下有利于提高程序的执行效率,不会对程序产生负面影响:在多线程环境下,指令重排会给程序带来意想不到的错误. 本文对多线程指令重排问题进行复原,并针对指令重排给出相应的解决方 ...

  2. HttpClient在多线程环境下踩坑总结

    问题现场 在多线程环境下使用HttpClient组件对某个HTTP服务发起请求,运行一段时间之后发现客户端主机CPU利用率呈现出下降趋势,而不是一个稳定的状态. 而且,从程序日志中判断有线程处于han ...

  3. java多线程环境单例模式实现详解

    Abstract 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用.这个机制在s ...

  4. 你是否听说过 HashMap 在多线程环境下操作可能会导致程序死循环?

    作者:炸鸡可乐 原文出处:www.pzblog.cn 一.问题描述 经常有些面试官会问,是否了解过 HashMap 在多线程环境下使用时可能会发生死循环,导致服务器 cpu 100% 的线上故障? 关 ...

  5. C#多线程环境下调用 HttpWebRequest 并发连接限制

    C#多线程环境下调用 HttpWebRequest 并发连接限制 .net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 win ...

  6. C++多线程环境下的构造函数

    多线程的环境里,我们总不可避免要使用锁.于是一个常见的场景就是: class ObjectWithLock { private: std::mutex mtx_; SomeResType shared ...

  7. Asp.Net在多线程环境下的状态存储问题

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...

  8. SQLite在多线程环境下的应用

    文一 SQLite的FAQ里面已经专门说明,先贴出来.供以后像我目前的入门者学习. (7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗? 多进程可以同时打开同一个数据库,也可 ...

  9. 多线程环境下非安全Dictionary引起的“已添加了具有相同键的项”问题

    问题: 代码是在多线程环境下,做了简单的Key是否存的判断, 测试代码如下: public class Program { static Dictionary<string, Logger> ...

随机推荐

  1. EF 传递的主键值的数量必须与实体上定义的主键值的数量匹配 原因

    主要是该数据表没有定义主键造成的

  2. Python 常用系统模块整理

    Python中的常用的系统模块中部分函数等的整理 random: 随机数 sys: 系统相关 os: 系统相关的 subprocess: 执行新的进程 multiprocessing: 进程相关 th ...

  3. Android LiveData使用

    LiveData是一个可观察的数据持有者类. 与常规observable不同,LiveData是生命周期感知的,当生命周期处于STARTED或RESUMED状态,则LiveData会将其视为活动状态, ...

  4. css3巧用选择器配合伪元素

    一 . 前言 有时我们在写底部导航栏时,会有很多超链接,每个链接间用“|”分割,如下图: 可能刚入门的朋友会想到这样完成,再单独设置span的样式, 今天主要介绍怎么样用css3简单快速的完成这个效果 ...

  5. 今天学习了flex布局

    前言:这个网站详细讲了水平.垂直.水平垂直的css方法.https://css-tricks.com/centering-css-complete-guide/ 布局的传统解决方案,基于盒状模型,依赖 ...

  6. 通过css3实现的动画导航菜单代码

    用css3样式实现的滑动导航菜单,html代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" &quo ...

  7. CA 工作流程

    散列函数 Hash 常见的有 MD5, SHA1, SHA256, 该类函数特点是函数单向不可逆,对输入非常敏感,输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完 ...

  8. maven 继承

    一个 maven 项目可以继承另一个 maven 的依赖, 称为子项目 父项目 使用场景: 多个子项目都需要某些依赖, 就可以把子项目共同的依赖抽取到父项目中, 子项目通过继承得到这些依赖, 这样也更 ...

  9. 关于数据分析的4点心得:维度、指标、KPI

    1.看数据看维度 在对某一项业务或者业务的某个模块进行分析时,可以从大小两个角度去切入分析. 首先站在广阔的视角去看待一些数据.比如对某个产品(消费品),就要分析在大环境下是一个什么样的数据,如市场排 ...

  10. fetch数据请求的封装

    export default class HttpUtils { static get(url){ return new Promise((resolve,reject)=>{ fetch(ur ...