天天看点

Java 系列小问题 |学习笔记

开发者学堂课程【Java面试疑难点串讲1:面试技巧及语言基础:Java 系列小问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:

https://developer.aliyun.com/learning/course/24/detail/486

Java系列小问题

内容介绍

一、小问题

1、String str=”hello”,这个字符串对象在栈内存中明明有一个引用(str[ox0010])为什么还说这个字符串是匿名对象呢?

所谓的字符串是匿名对象,实际上是因为只要使用了““”声明,那么就表示将在堆内存空间里面开辟一个新的字符串对象( String 对象),但是这个对象是可以直接使用的,例如”“Hello”.length()”。

这个时候的字符串由于没有引用,所以称为匿名对象,而对于此时的代码“String str=”hello””,已经明确的为 str 对象进行了实列化,所以“Hello”它对应的堆内存的地址已经有了明确的栈内存指向就不是匿名对象了。 

1当使用直接赋值的方式实例化一个字符串对象的时候,他的引用是保存在哪里的?

只要是引用对象就保存在堆内存里面,而我们所有能够进行的内存控制,也只有堆内存。

2、 对象池(常量池)和栈是什么关系?

课程参考:

http://www.mldn.cn/course/127

不管是对象池还是常量池,实际上都是保存在堆内存里面的,而堆内存需要进行一些合理的划分。

Java 系列小问题 |学习笔记

3、不同的操作系统会由软件和硬件模拟出不同的虚拟机,但是不同的 JVM 对 JAVA 程序都支持,能实现这个功能的原理是不是:虚拟机中定义了类似于接口这样的操作,然后接口中定义了类似于 native 抽象方法,然后具体方法的实现交给操作系统去完成?

完整的介绍:

对于 JVM 有三种实现标准,这三种实现标准我们使用的是 HotSpot 虚拟机标准,这个标准的实现不是简单的说只是调用了一些底层函数。他里面是需要与一些设备进行交互的,而整个系统设计之中,为了可以让 Java 调用函数功能,所以专门提供有一个 native 交由 JVM 负责实现一些具体功能。