1.[深入理解JVM笔记]JVM内存机制引言

简介:
1
2
3
4
5
6
7
8
9
10
11
12
String str1 =  "abc" ;
String str2 =  "abc" ;
System.out.println(str1 == str2); //true
String str3 =  new  String( "abc" );
String str4 =  new  String( "abc" );
System.out.println(str3 == str4); //false
String s1 =  "ja" ;
String s2 =  "va" ;
String s3 =  "java" ;
String s4 = s1 + s2;
System.out.println(s3 == s4); //false
System.out.println(s3.equals(s4)); //true


栈和堆

Java中的内存划分为两种:栈内存,堆内存。

当在一段代码块定义一个变量时,Java救灾栈中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为变量所分配的内存空间。

堆内存用来存放有new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

栈主要存放一些基本类型的变量和对象句柄。

数据共享

栈有一个很重要的特性,就是数据共享。如:int a = 3; int b = 3; 编译器先处理int a = 3; 会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没有,就将3存放进来,然后将a指向3。接着处理int b = 3; 在创建完b的引用变量后,因为在栈中已经由3个值了,便将b直接指向3。这样a与b同时均指向3.

对象引用

String是一个包装类数据。可以:


1
2
String str =  new  String( "abc" );
String str =  "abc" ;


第一种用new()方法来创建对象的,它会存放在堆中。每调用一次就会创建一个新的对象。而第二种是先在栈中创建一个String类的对象引用变量str,然后查找堆中有没有存放"abc",如果没有,就将"abc"存放在栈中,并令str指向"abc",如果有,则直接指向"abc"。

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==。


1
2
3
String str1 =  "abc" ;
String str2 =  "abc" ;
System.out.println(str1 == str2); //true


可以看出str1和str2是指向同一个对象的。


1
2
3
String str3 =  new  String( "abc" );
String str4 =  new  String( "abc" );
System.out.println(str3 == str4); //false


对于new()的对象则一概在堆中创建新对象,不管其字符串值是否相等,是否有必要创建新对象。

另外,String str1 = "abc"创建的对象str,对象可能并没有被创建,而可能只是指向一个先前已经创建的对象。只有通过new方法才能保证每次都创建一个新对象。

自测题:

1
2
3
4
5
6
7
8
String bb =  "abc" ;
System.out.println(aa==bb);
bb =  "a"  "b"  "c" ;
System.out.println(aa==bb);
System.out.println(aa.equals(bb));
String cc =  "a" ;
String dd = cc +  "d" ;
System.out.println(cc.equals(dd));










本文转自 LinkedKeeper 51CTO博客,原文链接:http://blog.51cto.com/sauron/1224674,如需转载请自行联系原作者
目录
相关文章
|
存储 安全 算法
深入剖析JVM内存管理与对象创建原理
JVM内存管理,JVM运行时区域,直接内存,对象创建原理。
40 2
|
1月前
|
存储 算法 安全
【JVM】深入理解JVM对象内存分配方式
【JVM】深入理解JVM对象内存分配方式
26 0
|
26天前
|
存储 缓存 Java
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
金石原创 |【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系机制(1)
34 1
|
1月前
|
监控 安全 算法
深入理解操作系统的内存管理机制
【2月更文挑战第30天】 本文旨在探讨操作系统中至关重要的一环——内存管理。与传统摘要不同,本文将直接点出核心议题:操作系统是如何通过复杂的数据结构和算法实现对计算机内存的有效管理和优化。文章将详细阐述内存管理的关键组成部分,包括内存分配、虚拟内存技术、分页和段机制等,并探讨它们如何共同协作以支持多任务处理和保护系统安全。通过对这些机制的深入了解,读者可以更好地把握操作系统设计之精髓及对现代计算环境的深远影响。
|
26天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
68 0
|
7天前
|
存储 算法 数据安全/隐私保护
深入理解操作系统的内存管理机制
【4月更文挑战第17天】 在现代计算机系统中,操作系统扮演着资源管理者的角色,其中内存管理是其核心职能之一。本文探讨了操作系统内存管理的关键技术,包括虚拟内存、物理内存分配与回收、分页和分段机制,以及内存交换技术。通过分析这些机制的原理和实现,我们旨在加深读者对操作系统如何有效管理和保护内存资源的理解。
7 1
|
8天前
|
监控 Java 关系型数据库
JVM工作原理与实战(十三):打破双亲委派机制-线程上下文类加载器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了打破双亲委派机制的方法、线程上下文类加载器等内容。
12 2
|
9天前
|
算法
深入理解操作系统的内存管理机制
【4月更文挑战第15天】 本文将探讨操作系统中至关重要的一环——内存管理。不同于通常对内存管理概念的浅尝辄止,我们将深入研究其核心原理与实现策略,并剖析其对系统性能和稳定性的影响。文章将详细阐述分页系统、分段技术以及它们在现代操作系统中的应用,同时比较它们的效率与复杂性。通过本文,读者将获得对操作系统内存管理深层次工作机制的洞见,以及对设计高效、稳定内存管理系统的理解。
|
12天前
|
存储 前端开发 安全
JVM内部世界(内存划分,类加载,垃圾回收)(上)
JVM内部世界(内存划分,类加载,垃圾回收)
46 0
|
16天前
|
存储 算法 安全
深度解析JVM世界:JVM内存分配
深度解析JVM世界:JVM内存分配