java 虚拟机内存模型

java虚拟机内存模型是java程序运行的基础,充分的了解虚拟机内存模型可以对jvm进行更深入的调优,可以使相同的配置资源,运行效率最大化。jvm虚拟机将内存数据分为长须计数器、虚拟机栈、本地方法栈、java堆和方法区五个基本的部分。

一、java内存模型

在这里插入图片描述

  • 程序计数器
    程序计数器是一块很小的内存空间,由于java是支持线程的语言,当线程数量超过CPU数量时,线程之间很具时间片轮询抢夺CPU资源。对于单核CPU而言,每一时刻只能有一个线程在运行,而其他线程必须被切换出去。为此,每一个线程必须要有一个独立的程序计数器,用于记录下一条要运行的指令,各个线程之间的计数器互不影响,独立工作;是一块线程私有的空间。
  • 虚拟机栈
    java虚拟机栈也是线程私有的内存空间,它和java线程在同一时间创建,它保存方法的局部变量、部分结果、并参与方法的调用和返回。
  • 本地方法栈
    本地方法栈和java虚拟机栈的功能很相似,java虚拟机栈用于管理java函数的调用,而本地方法栈用于管理本地方法的调用。本地方法并不是java实现的,而是使用C实现。
  • java堆
    java堆可以说是java运行时内存中最为重要的部分,几乎所有的对象和数组都是在堆中分配空间的。java堆分为新生代和老年代两个部分,新生代用于存放刚刚产生的对象和年轻得对象,如果对象一直没有被回收,生存的足够长,老年对象就会被移入老年代
  • 方法区(永久代)
    方法区也是jvm内存区中非常重要的一块内存区域,与堆空间类似,它也是被jvm中所有的线程共享。方法区主要保存的信息是类的元数据。方法区中最为重要的是类的类型信息、常量池、域信息、方法信息。类型信息包括类的完整名称、父类的完整名称、类型修饰符合类型的直接接口表;常量池包括这个类的方法名称、返回类型、方法参数、方法修饰符、方法字节码、和域修饰符;方法信息包括方法名称、返回类型、方法参数、方法修饰符、方法字节码、操作数栈和方法帧栈的局部变量区的大小以及异常表。总之,方法区中保存的信息,大部分来自class文件,是java应用程序运行不可少的重要数据。

jvm内存分配参数

合理的分配内存,可以使程序的效率更大化,jvm调优方面,一些经常使用的参数还是要记住的。

  • -Xms
    设置java应用程序启动时初始的堆大小
  • -Xmx
    设置java应用程序能获得的最大的堆大小
  • -Xss
    设置线程栈的大小
  • -XX:NewSize
    设置新生代的大小
  • -XX:MaxNewSize
    设置新生代的最大值
  • -Xmn
    设置相中的新生代大小和最大值
  • -XX:NewRatio
    设置老年代与新生代的比例,它等于老年代大小除以新生代大小
  • -XX:MaxPermSize
    设置最大的永久区(方法区)的大小
  • -XX:PermSize
    设置永久区(方法区)的初始值
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java内存模型Java Memory Model,JMM)是一种规范,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。Java内存模型定义了一套读写内存数据的规范,抽象了主内存和本地内存的概念,以及对于寄存器、一级缓存、二级缓存等的抽象。Java内存模型Java并发编程有关,可以帮助我们实现线程安全的效果。 Java内存结构是指Java虚拟机的运行时数据域,包括程序计数器虚拟机、本地方法方法等。Java对象模型是指Java对象在虚拟机中的表现形式,包括对象头、实例数据和对齐填充三部分。 在Java内存模型中,每个线程都有自己的本地内存,本地内存中存储了该线程使用到的主内存中的变量副本。线程对变量的所有操作都必须在主内存中进行,而不能直接对本地内存中的变量进行操作。当一个线程需要使用另一个线程的变量时,必须将该变量从主内存中读取到本地内存中,当该线程对变量进行修改后,必须将该变量的值刷新到主内存中,以便其他线程可以看到该变量的最新值。 Java内存模型中的同步机制包括synchronized关键字、volatile关键字、final关键字和锁等。synchronized关键字和锁可以保证同一时刻只有一个线程可以执行临界代码,从而实现线程安全。volatile关键字可以保证变量的可见性和有序性,final关键字可以保证变量的不可变性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值