帧数据区 :方法返回地址 ,动态链接 ,一些附加信息
动态链接(或者只想运行是常量池的方法引用)   指向运行时常量池当中,方法的引用地址

 

java实现动态api接口 java动态链接是什么_JAVA

 

 

java实现动态api接口 java动态链接是什么_JAVA_02

 

 

字节码文件中有常量池  左边就是符号引用  右边对应的真实的结构

 

java实现动态api接口 java动态链接是什么_JAVA_03

 

java实现动态api接口 java动态链接是什么_bc_04

 

符号右边又有符号引用   #11 int类型 #13 void返回类型  下面是类文件,还有Object 因为父类是O

java实现动态api接口 java动态链接是什么_java实现动态api接口_05

  

java实现动态api接口 java动态链接是什么_字符串_06

 

 

java实现动态api接口 java动态链接是什么_bc_07

 

 

 

String 的字面量 数值型的字面量 ,类型引用,属性引用,方法引用  栈帧里面存储了地址,地址指向的就是运行时常量池

 

 

 

java实现动态api接口 java动态链接是什么_java实现动态api接口_08

 

 

java实现动态api接口 java动态链接是什么_bc_09

 

 

 

 

string的一些特殊点

 

无论是String还是new String最终都指向了String constant pool中,只不过是String直接指向了Stringconstant pool中。而new String是在Heap中创建了一个指向String constant pool中的引用。
java中,如果定义了String类型的字符串,最终的都存在String constant pool 中。

String constant pool就是jvm规范中所谓的方法区。

一个对象由对象头,对象实际数据,以及对齐填充(可能存在)三部分组成。

new一个对象会有两个东西占用内存,引用和实例。

new一个Object对象占用24个字节(64位) 或 12个字节(32位)

在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此不用担心String对象共享而带来程序的混乱。

 

String str = new String("abc"); 创建了几个对象?

一个或两个:abc 字符串之前没有用过,这毫无疑问创建了两个对象,一个是new  String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象。

      如果之前创建了‘abc’字符串,则只创建了一个对象。

 

创建一个类的实例(对象)的方法有以下两种:
一、使用new创建对象。
二、调用Class类的newInstance方法,利用反射机制创建对象。

string比较特殊,有第三种方式,

String str="abc";

这种方式是String特有的,并且它与new的方式存在很大区别。

String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

 

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象




无论是String还是new String最终都指向了String constant pool中,只不过是String直接指向了Stringconstant pool中。而new String是在Heap中创建了一个指向String constant pool中的引用。
java中,如果定义了String类型的字符串,最终的都存在String constant pool 中。

String constant pool就是jvm规范中所谓的方法区。

一个对象由对象头,对象实际数据,以及对齐填充(可能存在)三部分组成。

new一个对象会有两个东西占用内存,引用和实例。

new一个Object对象占用24个字节(64位) 或 12个字节(32位)

在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此不用担心String对象共享而带来程序的混乱。

 

String str = new String("abc"); 创建了几个对象?

一个或两个:abc 字符串之前没有用过,这毫无疑问创建了两个对象,一个是new  String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象。

      如果之前创建了‘abc’字符串,则只创建了一个对象。

 

创建一个类的实例(对象)的方法有以下两种:
一、使用new创建对象。
二、调用Class类的newInstance方法,利用反射机制创建对象。

string比较特殊,有第三种方式,

String str="abc";

这种方式是String特有的,并且它与new的方式存在很大区别。

String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。

 

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象