Java内存结构与模型

 我来答
户如乐9318
2022-11-17 · TA获得超过6604个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:133万
展开全部

  一 java内存结构

   Heap(堆) 实例分配的地方 通过 Xms与 Xmx来设置

   MethodArea(方法区域) 类的信息及静态变量 对应是Permanet Generation 通过 XX PermSize来设置

   JavaStack(java的栈) 虚拟机只会直接对Javastack执行两种操作 以帧为单位的压栈或出栈 通过 Xss来设置 若不够会抛出StackOverflowError

   ProgramCounter(程序计数器) 每一个线程都有它自己的PC寄存器 也是该线程启动时创建的 PC寄存器的内容总是指向下一条将被执行指令的饿地址 这里的地址可以是一个本地指针 也可以是在方法区中相对应于该方法起始指令的偏移量

   Nativemethodstack(本地方法栈) 保存native方法进入区域的地址

  当中Heap和MethodArea是被所有线程的共享使用的

  而Javastack Programcounter和Nativemethodstack是以线程为粒度的 每个线程独自拥有自己的部分

  二 内存模型

  由以上可以知道java内存分为main memory和线程的Working Memory 就会涉及到这两种内存数据同步以及多个线程操作时数据一致性和可见性的问题 这就不可避免要加锁了 在java中可采用如下的形式

     synchronized关键字或使用ncurrent locks中的锁

     volatile关键字 Volatile表示的是线程每次操作都是在主内存中进行 这只能保证其可见性 而不能保证其的原子性 要有原子性还得加锁

     final变量(基本类型 类类型还是可以改值的)

  三 如何保证线程安全

   每个线程只操作自有的数据 这个可能性要小

   设计的类无数据成员 也就没有共享变量 要有可用是 final或volatile

lishixinzhi/Article/program/Java/hx/201311/26489

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式