JVM 学习

目录

JVM 体系结构概念图

进程内存逻辑结构

线程共有和线程私有

JVM数据存储过程

JVM内存结构

关键问题解释

 Q:什么是Native Method 



JVM 体系结构概念图

                             

  • 程序计数器:较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互不影响
  • java栈: 栈:线程私有,生命周期和线程,每个方法在执行的同时都会创建一个 栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。方法的执行就对应着栈帧在虚拟机栈中入栈和出栈的过程;栈里面存放着各种基本数据类型和对象的引用;
  • 本地方法栈(Native Method stack):本地方法栈保存的是native方法的信息,当一个JVM创建的线程调用native方法后,JVM不再为其在虚拟机栈中创建栈帧,JVM只是简单地动态链接并直接调用native方法;最下面有关于Native Method的解释
  • :Java堆是Javaer需要重点关注的一块区域,因为涉及到内存的分配(new关键字,反射等)与回收(回收算法,收集器等);
  • 方法区:也叫永久区,用于存储已经被虚拟机加载的类信息,常量("zdy","123"等),静态变量(static变量)等数据。
  • 运行时常量池:运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量("zdy","123"等)和符号引用。

 

进程内存逻辑结构

                                

 

  • 直接内存:不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域;
    •  如果使用了NIO,这块区域会被频繁使用,在java堆内可以用directByteBuffer对象直接引用并操作;
    •  这块内存不受java堆大小限制,但受本机总内存的限制,可以通过MaxDirectMemorySize来设置(默认与堆内存最大值一样),所以也会出现OOM异常;

线程共有和线程私有  

这是一个线程在jvm里内存使用情况图

                             

JVM数据存储过程

这是为数据申请存储空间的逻辑关系图

JVM内存结构

由图可以较为清晰的看到,JVM的内存空间分为3大部分,分别是堆内存、方法区和栈内存。其中栈内存可以再细分为java虚拟机栈和本地方法栈。堆内存可以划分为新生代和老年代。新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。划分出来的各个区,分别保存不同的数据,并且在一般情况下,其采取的内存回收策略也是不同的。

 

 

关键问题解释

 Q:什么是Native Method 


   简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。
   "A native method is a Java method whose implementation is provided by non-java code."
   在定义一个native method时,并不提供实现体(有些像定义一个java interface),因为其实现体是由非java语言在外面实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值