相信绝大多数java开发者或多或少的都应该知道jvm,但是有多少人又深入去了解过,笔者深感自身能力的不足,去看了些资料,觉得还是有必要整理下自己的学习记录,时常回头看看,多看多实践提升自己的能力,故开始进行jvm相关的知识梳理和记录,一起来学习吧 ...
分类:
其他好文 时间:
2019-11-23 17:50:37
阅读次数:
61
1、程序计数器(Program Counter Register): (1)、概念:一块较小的内存空间,可以看做当前线程所执行的字节码的行号指示器。 (2)、用途:字节码解释器工作的时候通过这个计数器的值选取下一条执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要这个计数器来完成 ...
分类:
编程语言 时间:
2019-11-23 12:47:16
阅读次数:
74
C语言占用的内存可以分为5个区: ①代码区(Text Segment):不难理解,就是用于放置编译过后的代码的二进制机器码。 ②堆区(Heap):用于动态内存分配。一般由程序员分配和释放,若程序员不释放,结束程序时有可能由操作系统回收。(其实就是malloc()函数能够掌控的内存区域) ③栈区(St ...
分类:
编程语言 时间:
2019-11-23 12:24:23
阅读次数:
96
从上面这个图我们总体上对JVM的结构特别是内存结构有了比较清晰的认识,虽然在JDK1.8+的版本中,JVM内存管理结构有了一定的优化调整。主要是方法区(持久代)取消变成了直接使用元数据区(直接内存)的方式,但是整体上JVM的结构并没有大改,特别是我们最为关心的堆内存管理方式并没有在JDK1.8+的版本中有什么变化,所以图中的结构整体上是没有什么不准确的,之所以将方法区以及持久代标注出来,主要还是为了起到对比认识的作用,大家知道就可以了。
关于持久代元数据区的使用问题,目前可以理解就是使用的物理内存,理论上是不受JVM自动内存回收机制管理的,如果不设置参数大小默认最大使用限制就是操作系统可用物理内存的大小,设置了-XX:MetaspaceSize参数的话,JVM就会在使用物理内存空间时自己进行限制。
至于直接内存与物理内存到底是不是一回事,我认为对于我们理解上没有区别,只是概念的区别,另外就是对这块内存使用细节上的区别,如果不受JVM的自动回收管理,那么怎么管理呢?说到底还是JVM本身在直接使用物理内存或者说是直接内存(用时直接“malloc”物理内存区域,而不再是JVM进程启动时初
分类:
编程语言 时间:
2019-11-19 01:19:54
阅读次数:
88
先给出结论,Java中只有值传递 ! 简单案例01 打印如下 显而易见并没有修改变量num的值, main函数 和changeNum函数运行在两块相互隔离的内存区域内, 只在main函数中调用changeNum()函数时,将num的值(拷贝一份)作为参数传递过去, 并在changeNum()函数中进 ...
分类:
编程语言 时间:
2019-11-17 17:47:09
阅读次数:
115
知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。 Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚拟机规范 1. Jvm内存按照运行时态及内存规范划分 2. Java内存区域 2.1 线程安全 2. ...
分类:
编程语言 时间:
2019-11-17 13:08:22
阅读次数:
103
C++中,内存分成5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。Windows下栈的大小为1M 项目-->属性-->链接器-->系统-->堆栈保留大小 可以设置栈的大小 栈 是一块连续的内存区域,由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变 ...
分类:
编程语言 时间:
2019-11-16 12:37:29
阅读次数:
70
一、方法的参数传递机制 方法的参数传递机制:把实参传递给形参。 (实参-->形参) 1、基本数据类型形参 结论:形参是基本数据类型,实参给形参传的是“数据值”,形参值得修改不会影响实参。因为实参是“copy 复制”了一份数据值给形参。 图解: 注意:栈中的内存区域是按照方法来划分的,方法被执行时,就 ...
分类:
其他好文 时间:
2019-11-16 10:53:48
阅读次数:
60
一、运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 二、区域介绍 1. 程序计数器 程序计数器(Program Co ...
分类:
编程语言 时间:
2019-11-11 14:17:21
阅读次数:
92
Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力,不建议使用该类 public class UnsafeTest { public static void m ...
分类:
其他好文 时间:
2019-11-10 13:53:40
阅读次数:
76