发布网友 发布时间:2022-04-23 13:47
共3个回答
热心网友 时间:2022-04-11 23:44
Java JVM如何学习?首先要了解他的类型!
java虚拟机学习
数据类型(基本类型、引用类型)====>数值本身、引用值 2. 堆、栈=====>栈是运行时的单位(如何处理数据),堆是存储的单位(数据如何存储)
------栈因为是运行单位,因此里面存储的信息都是跟当前线程(或程序相关信息的。包括局部变量、程序运行状态、方法返回值等等;而堆只负责存储对象信息。在Java中,Main函数就是栈的起始点,也是程序的起始点。堆中存的是对象,栈中存的是基本数据类型和堆中对象的引用
Java中的参数传递时传值呢?还是传引用?
a) 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引
用的问题。不会直接传对象本身。
b) Java在方法调用传递参数时,因为没有指针,所以它都是进行传值调用
c) 堆和栈中,栈是程序运行最根本的东西。程序运行可以没有堆,但是不能没有栈。
而堆是为栈进行数据存储服务,说白了堆就是一块共享的内存。不过,正是因为堆和栈的分离的思想,才使得Java的垃圾回收成为可能
Java对象的大小
a) 一个空Object对象的大小是8byte(没有任何属性的对象) b) Object ob = new Object();所占的空间为:4byte+8byte。4byte是上面部分所说的Java
栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息.不论什么样的Java对象,其大小都必须是大于8byte
c) Java在对对象内存分配时都是以8的整数倍来分,基本类型包装类的大小至少是
16byte
引用类型
a) 对象引用类型分为强引用、软引用、弱引用和虚引用。
b) 强引用:就是我们一般声明对象是时虚拟机生成的引用,强引用环境下,垃圾回收
时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收 c) 软引用:软引用一般被作为缓存来使用。与强引用的区别是,软引用在垃圾回收时,
虚拟机会根据当前系统的剩余内存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间;如果剩余内存相对富裕,则不会进行回收。换句话说,虚拟机在发生OutOfMemory时,肯定是没有软引用存在的。 d) 弱引用:弱引用与软引用类似,都是作为缓存来使用。但与软引用不同,弱引用在
进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。
JVM调优总结(三)-基本垃圾回收算法 7. 垃圾回收面临的问题
a) 如何区分垃圾。垃圾回收的起点是一些根对象(java栈, 静态变量, 寄存器...)。而
最简单的Java栈就是Java程序执行的main函数 b) 如何处理碎片。“复制”方式和“标记-整理”方式,都可以解决碎片的问题。 c) 如何解决同时存在的对象创建和对象回收问题;在现有的垃圾回收方式中,要进行
垃圾回收前,一般都需要暂停整个应用(即:暂停内存的分配),然后进行垃圾回收,回收完成后再继续应用
8. 分代垃圾回收详述
a) 为什么要分代:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可
以采取不同的收集方式,以便提高回收效率。
b) 如何分代虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(OldGeneration)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的
什么情况下触发垃圾回收GC有两种类型:Scavenge GC(当新对象生成,并且在Eden
申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区)和Full GC(对整个堆进行回收)
典型配置举例
a) 堆大小设置
b) 回收器选择。串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小
数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。
垃圾回收的瓶颈
a) 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最
小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停
学习java的伙伴加我的 群去下载视频资料 540-998-279!
热心网友 时间:2022-04-12 01:02
java初学者?用不到学习JVM,学java基础语法就行热心网友 时间:2022-04-12 02:37
JVM
java虚拟机(java virtual machine 简称JVM):一种能够运行java字节码的虚拟机,作为一种编程语言的虚拟机,实际上不只是专用于java语言,只要生成的编译文件匹配JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。比如kotlin、scala等。
JVM有很多,不只是Hotspot,还有JRockit、J9等等
JVM的基本结构
JVM由三个主要的子系统构成
类加载子系统
运行时数据区(内存结构)
执行引擎
JVM又称为跨语言平台:JVM可以运行各种各样语言编译出来的字节码文件,前提是这些字节码文件必须遵循JVM的规范