JVM笔记

本文深入探讨Java中的数据类型、堆与栈的区别及作用,并详细解释Java对象的大小及其存储方式,帮助读者理解Java内存管理机制。

一 || 概念部分

1.1 数据类型: 基本类型   基本类型的变量保存原始值,即:他代表的值即是数值本身。byte short char int long float double boolean returnAddress  

   引用类型   引用类型的变量保存引用值。引用值代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址位置。

1.2 堆与栈

1》栈是运行时单位,而堆是存储单位。

2》堆中存储的是对象。栈中存的是基本数据类型和堆中对象的引用,一个对象的大小是可以动态变化的,但栈中,一个对象只对应了一个4byte的引用。

3》为什么不把基本类型存在堆中呢,因为其占用空间一般是1-8个字节,需要空间少而确定。

4》栈解决程序的运行问题,即程序如何执行,如何处理数据。堆解决的是数据存储问题,即数据怎么放,放在哪。

5》一个线程对应其独立的线程栈。

思考:堆栈分离<1.从软件设计角度看,栈代表了处理逻辑,堆代表了数据。使处理逻辑更为清晰。

      2.堆中内容可以被多个栈共享(多个线程访问同一个对象) 数据交互便利,堆中常量和缓存可以被所有栈访问,节省空间。

      3.栈因运行时需要,需要进行地址段的划分,只能向上增长,限制栈存储能力,而堆中对象可以跟据需要动态增长的,而相应栈中只需要记录堆中一 个地址即可。

      4.面向对象:当我们把对象拆开,对象的属性其实就是数据,存放在堆中,而对象的行为(方法),就是运行逻辑,放在栈中,我们在编写面向对象  时候,既编写了数据结构,也编写了处理数据的逻辑。

      5.垃圾回收机制成为可能。>

备注:栈大小设置  -Xss    无法返回的递归。-StackOverflowError异常。


1.3 java对象大小

一个空Object对象的大小是8byte,这个大小是保存堆中一个没有任何属性值的对象的大小。Object ob = new Object(); 所占空间4+8byte     4byte是其引用占 用空间,8byte是java堆中对象的信息。因为所有java非基本类型的对象都默认继承Object对象,因此不论其他什么对象,都必须是大于8byte的。












### 关于JVM的学习资源 对于希望深入学习 Java 虚拟机 (JVM) 的开发者来说,《黑马程序员 JVM 完整教程》是一份非常有价值的入门材料[^1]。这份笔记涵盖了 JVM 基础概念、内存模型以及性能调优等内容,适合初学者快速掌握 JVM 的核心知识点。 如果需要更深层次的理解,可以参考以下书籍: 1. **《深入理解 Java 虚拟机:Jvm 高级特性与最佳实践(第 2 版)》** 这本书详细讲解了 JVM 的内部机制,包括类加载过程、垃圾回收算法、性能优化策略等高级主题。它不仅提供了丰富的理论知识,还通过实际案例帮助读者解决常见的 JVM 性能问题。 2. **《实战 Java 虚拟机》** 此书侧重于 JVM 实战技巧,特别适用于那些希望通过真实项目经验提升技能的技术人员。书中包含大量实用工具和技术的应用场景分析。 3. **《深入 JAVA 虚拟机第二版》** 另一本经典著作,专注于 JVM 架构设计及其运行原理,能够为开发者的日常编码提供指导和支持。 除了上述书籍外,在线还有许多免费资源可供利用。例如官方文档总是最好的起点之一;另外像 Oracle 提供的各种技术白皮书也是不可多得的好资料。 需要注意的是,当涉及到并发编程时,了解重排序现象非常重要。因为即使代码按特定顺序编写出来,编译器或者处理器为了提高效率可能会改变它们的实际执行次序——只要这种变化不会影响单线程环境下的最终结果即可[^2]。 至于方法实现方面,则需确保函数签名中的返回类型同其逻辑体内的最后一句`return`表达式的类别相一致。否则将会引发编译错误[^3]。 以下是基于这些原则的一个简单示例展示如何判断一个数是否偶数并找出两个数值之间的较大者: ```java public class Example { public static void main(String[] args){ System.out.println(isEvenNumber(4)); // 输出true System.out.println(getMax(8,5)); // 输出8 } public static boolean isEvenNumber(int number ){ return ((number % 2)==0); } public static int getMax(int a,int b){ if(a>b) return a; else return b; } } ``` ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值