精华内容
下载资源
问答
  • Java对象在哪里创建

    千次阅读 2017-04-08 18:38:01
    对象在哪里创建?  Java数据存储在哪里? 1,寄存器,存取速度最快,在cpu里面 2,堆栈,地址引用放栈里,对象放堆里,Java中的引用可以理解为c中的指针 3,堆,方面灵活但是缺点是比较耗内存(何时清除?)...
    对象在哪里创建?
    

       Java数据存储在哪里?
    1,寄存器,存取速度最快,在cpu里面
    2,堆栈,地址引用放栈里,对象放堆里,Java中的引用可以理解为c中的指针
    3,堆,方面灵活但是缺点是比较耗内存(何时清除?)
    4,静态区,存一些static的数据,程序执行时随时调用,处于固定位置
    5,常量池,比如String 常量永远不会变得数据
    6,非RAM区域,程序之外比如:流式对象和固定对象


    基本类型,Java中天生拥有的常用的数据存于栈中,这样存取方便,大小范围,名称都是已经规范好的,Java是一种强类型的语言,变量a是int就是int,是String就是String,基本类型没有对象概念,不过基本类型有包装类(方便数据转换操作)数据是作为字面值纯在的,不同基本类型可以同时找同一字面值比如inta=5;int b=5;在栈中只开辟了5,栈中数据方法执行完立刻销毁空出内存给其他数据。
    引用类型,比如类,数组,集合,String(特殊的引用类型只有他一个)引用和对象组成(不同对象数据一样,其存储内存也在不同内存中)

    对于数据存于哪,要取决于在哪里声明的,在方法中声明的基本类型变量,引用类型变量地址(数据放堆中)这些放方发栈中,在类中声明的基本类型数据变量,对象的引用好数据整体都放堆
    展开全文
  • pycharm中查找一个对象在哪里被引用

    万次阅读 2018-10-28 19:22:20
    要查找的对象上右键-》Find Usages-》界面下方会列出查找结果。 快捷键:Alt + F7 下面以test.py和test2.py为例,其中test2.py使用了test.py的foo函数 文件test.py中,把鼠标放到foo上面再右键点击Find Usages。...

    PyCharm的Find Usages功能可以查找某个对象(变量、函数、或者类等)被引用的地方

    使用:
    在要查找的对象上右键-》Find Usages-》界面下方会列出查找结果。
    快捷键:Alt + F7

    下面以test.py和test2.py为例,其中test2.py使用了test.py的foo函数

    在文件test.py中,把鼠标放到foo上面再右键点击Find Usages。

    查找结果如下图所示,可以看出foo()函数被引用了3次,其中test2.py引用了2次,test3.py引用了1次

    展开全文
  • 或者说为什么要使用堆对象那。 使用堆对象跟只使用对象指针的区别在哪儿那。
  • 之前使用的工具是 navicat mysql ,最近换成 navicat premium 12版本的后 ,点击对象信息找不到在哪里了,我习惯看ddl的全部信息,之前点击对象信息在中间框框的下面,可是 navicat premium 12版本点击后 一直找不到...

    之前使用的工具是 navicat mysql ,最近换成 navicat premium 12版本的后 ,点击对象信息找不到在哪里了,我习惯看ddl的全部信息,之前点击对象信息在中间框框的下面,可是 navicat premium 12版本点击后 一直找不到在哪里。下面来跟着看看在哪里吧!

    在这里插入图片描述

    展开全文
  • java的对象存储在哪里

    千次阅读 2020-02-29 14:29:17
    1、寄存器 寄存器是速度最快的存储区域,...常用于存放对象引用与基本数据类型,不存放Java对象。栈内存被要求存放其中的数据的大小、生命周期必须是已经确定的。 3、堆 通用的内存池,位于RAM中,用于存放所有的...

    1、寄存器
    寄存器是速度最快的存储区域,它位于处理器内部,但它的数量有限,所以要按需分配,不能被人控制。
    2、堆栈
    通常也叫栈,位于RAM中,堆栈指针向下移动,则分配新的内存;向上移动,则释放那些内存。这种存储方式速度仅次于寄存器。常用于存放对象引用与基本数据类型,不存放Java对象。栈内存被要求存放在其中的数据的大小、生命周期必须是已经确定的。
    3、堆
    通用的内存池,位于RAM中,用于存放所有的Java对象。编译器不需要知道存储的数据在堆中存活多长时间;当需要一个对象时,用new写一行代码,当执行这行代码时,会自动在堆中进行存储分配,同时,有以上原因,用堆进行存储分配和清理可能比堆栈进行存储分配花更多的时间。
    4、常量存储
    常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会改变。但有时在嵌入式系统中,常量本身会和其他部分隔开,放在ROM中。
    5、非RAM存储
    如果数据完全存活在程序之外,那么它可以不受程序控制,程序没有运行时也可以存在。比如流对象与持久化对象。

    特殊:基本类型
    在Java中,new创建的对象都存放在堆中,但用new创建一个特别小的,简单的变量,就比较麻烦,所以Java采用了与c一样的方法,不用new来创建变量,而是创建一个不是引用的变量,这个变量将值存储在栈中,而且这些变量占的内存空间是确定的,不随机器硬件架构而变化。
    Java的数组
    在C/C++语言中,数组就是个内存块,超出内存块访问数据或在内存初始化前访问数据是很危险的;
    Java会确保数组被初始化,而且不能在它的范围外访问,这种范围检查,以每个数组上少量的内存开销和运行时的下标检查为代价。
    当创建一个Java数组时,世纪上创建了一个引用数组,每个引用都会初始化为null。
    但创建一个用来存放基本数据类型的数组时,Java也会把它初始化,就算将数组所占的内存全部置为0。


    在Java中,栈里面的数据是可以共享的
    比如我们定义一个变量:

    int a = 1;
    int b = 1;

    编译器就会先在栈中开辟一块空间存储引用a,然后在栈中查看是否有1这个值存在,发现没有,则在栈中开辟空间存储1这个值;然后再开辟空间存储b,在栈中查看是否有1,发现存在1这个值,那就把b指向1的地址。
    用这样数据共享的方式可以节省空间,防止反复的向内存加入同样的值。


    Java的String是比较特殊的。
    比如这行代码

    String s = “123”;
    String b = “123”;
    System.out.print(s == b);

    这段代码先在字符串常量池中查找是否有”123“这个字符串(关于字符串常量池可以看这里),没有的话,则在字符串常量池中创建。很明显,b字符串创建时常量池里已经有123这个字符串了,把它指向123的地址就好了,所以打印出true。

    String sc = new String(“123”);
    String s = “123”;

    这两行代码的区别是:
    第一行代码的步骤是
    1、先定义一个名为sc的引用
    2、然后检索常量池中是否有123的字符串
    3、如果不存在,则在字符串常量池中存储进一个值为"abc"的字符串对象。
    4、在堆中创建存储一个”abc“字符串对象
    5、将对象引用指向堆中的对象
    第二行代码和第一行代码的前三步都一样,但后面则是直接将s指向字符串常量池当中的”123“对象。
    这里指的注意的是,采用new的方式,虽然是在堆中存储对象,但是也会在存储之前检查常量池中是否已经含有此对象,如果没有,则会先在常量池创建对象,然后在堆中创建这个对象的”拷贝对象“。这也就是为什么有道面试题:String s = new String(“xyz”);产生几个对象?的答案是:一个或两个的原因。因为如果常量池中原来没有”xyz”,就是两个。


    最后再转载一个网上看到的一个例子,帮助对栈内存、堆内存的存储进行理解:

    class BirthDate {
        private int day;
        private int month;
        private int year;
        public BirthDate(int d, int m, int y) {
            day = d;
            month = m;
            year = y;
        }
        省略get,set方法………
    }
    
    public class Test {
        public static void main(String args[]) {
            int date = 9;
            Test test = new Test();
            test.change(date);
            BirthDate d1 = new BirthDate(7, 7, 1970);
        }
    
        public void change1(int i) {
            i = 1234;
        }
    }
    

    对于以上这段代码,date为局部变量,i,d,m,y都是形参为局部变量,day,month,year为成员变量。下面分析一下代码执行时候的变化:

    1. main方法开始执行:int date = 9;
      date局部变量,基础类型,引用和值都存在栈中。
    2. Test test = new Test();
      test为对象引用,存在栈中,对象(new Test())存在堆中。
    3. test.change(date);
      调用change(int i)方法,i为局部变量,引用和值存在栈中。当方法change执行完成后,i就会从栈中消失。
    4. BirthDate d1= new BirthDate(7,7,1970);
      调用BIrthDate类的构造函数生成对象。
      d1为对象引用,存在栈中;
      对象(new BirthDate())存在堆中;
      其中d,m,y为局部变量存储在栈中,且它们的类型为基础类型,因此它们的数据也存储在栈中;
      day,month,year为BirthDate对象的的成员变量,它们存储在堆中存储的new BirthDate()对象里面;
      当BirthDate构造方法执行完之后,d,m,y将从栈中消失。
    5. main方法执行完之后。
      date变量,test,d1引用将从栈中消失;
      new Test(),new BirthDate()将等待垃圾回收器进行回收。
    展开全文
  • Java对象的内存是在哪里分配的?

    千次阅读 2020-09-11 21:12:20
    对于绝大多数对象,内存的确是堆中分配的,但是随着JIT编译器的进步、逃逸分析技术的成熟,“Java对象都是堆中分配内存”这个结论变得不是那么绝对了。 针对Java的内存分配策略,笔者这里画了一张简图如下: 栈...
  • Servlet+JavaBean+JSP中,请求对象与响应对象在哪里生成,如何传递的? 以及由哪个对象管理?
  • 对象指针指向 instance对象的isa指向class对象 class对象的isa指向meta-class对象 meta-class对象的isa指向基类的meta-class对象 ...对象方法、属性、成员变量、协议信息,存放class对象中 类方...
  • new创建对象对象保存堆还是栈? –>堆内存是用来存放由new创建的对象和数组,即动态申请的内存都存放堆内存 –>栈内存是用来存放函数中定义的一些基本类型的变量和对象的引用变量 例子: 局部变量,...
  • Java中的引用类型的对象存放在哪里

    千次阅读 2020-06-19 12:04:22
    根据上下文来确定。 根据上下文来确定。...//这个obj随对应的Test对象分配堆里 } 对于方法中的局部变量的引用时存放java运行时数据区的栈中,对于实例变量则是存放java运行时数据区的堆中。 ...
  • java面向对象

    万次阅读 多人点赞 2018-08-21 16:51:59
    包括面向对象概念、类与对象的关系、封装、构造函数、this关键字、static关键字、单例设计模式、继承、多态、内部类、异常、包等java基础知识。 1、面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是...
  • Class对象就是.class文件?那么这个对象存在哪里呢?本地硬盘?不是内存中吗
  • java对象在内存中的分配

    万次阅读 多人点赞 2017-02-10 22:45:33
    堆内存中存放的是new出的对象,new出的对象只包含成员变量。  栈内存中:存放的是局部成员变量。对于基本的数据类型存放的是基本变量的值,而对于对象变量,存放的是堆内存的地址。  静态、常量区:存放的是静态...
  • 对象

    2016-10-06 13:14:30
    这相当于,创建 QObject对象时,可以提供一个其父对象,我们创建的这个 QObject对象会自动添加到其父对象的 children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里
  • Java中实例对象存储哪?

    千次阅读 2020-04-06 19:15:42
    当实例对象存储在堆区时:实例对象存放在堆区,对实例的引用存在线程栈上,而实例的元数据存在方法区或者元空间。...如果一个对象在方法中被定义,但是对象的使用仅是在当前方法中,而且对象本身比较简单,那么...
  • 权限对象是由一组权限字段组成,这些权限字段的值用于权限...AUTHORITY-CHECK中,必须指明权限对象的所有权限字段,但有一个例外,可以用DUMMY绕过某个权限字段的检查。一个权限对象中最多允许定义10个权限字段。...
  • JAVA对象在JVM中内存分配

    千次阅读 2017-04-22 13:50:07
    如果你还不了解JVM内存模型的建议您先看下JVM内存模型以一下代码为例,来分析下,java对象在内存中的空间分配。public class Student { private String name; private static Birthday birthday = new Birthday(); ...
  • JVM学习之对象内存布局,对象

    千次阅读 2018-10-08 15:54:29
    创建对象之后需要使用对象,java中除了对对象属性方法的调用以外还有加锁实现同步等其他操作,这里的锁加哪里,如何记录锁,如何对锁进行分类(有对象锁,class锁),垃圾回收机制中有关于GC的标记,知道当前...
  • pageContext对象

    千次阅读 2016-04-27 11:23:22
    //可以存储变量 注意:这种存储方式只能本页面获取,其他页面无法获取。  pageContext.setAttribute("name", "孙悟空"); //获取方法为: String name =(String)pageContext.getAttribute("name"); 操作其他的...
  • 对象引用与对象存放的地址和区别

    千次阅读 2020-04-17 00:15:08
    java的学习当中,很多时候并没有能很好分清把对象对象的引用。如果没能很好认识分清这两者的关系,就可能会很难理解一些指针的移动的代码。 JAVA中基本类型变量存储栈中,引用类型的对象存储栈中,对象的...
  • HttpServletRequest 对象

    千次阅读 2018-08-09 11:47:10
    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。 其他的具体方法就不详细描述...
  • java -面向对象编程-类与对象

    千次阅读 2017-01-01 15:38:07
    上一章讲了面向对象编程的理念以及为什么要学习面向对象编程。但是我们也说了。面向对象编程是一个理念,要掌握它不是一日之功,而是要不断地学习,实践再学习。而今天说讲的内容,就是你学习面向对象编程的第一步:...
  • java中实例对象存储什么位置

    千次阅读 2019-08-16 10:27:45
    1) 实例对象的元数据class信息:存储方法区或者元空间 2) 实例对象本身:存储堆内存中 3) 实例对象的引用地址:存储栈内存中 Object实例对象一定存储堆中吗? 不一定,因为java中如果出现线程逃逸...
  • 原先多次使用的类库新增了一个对象,经编译后无错误显示。但对象浏览器中看到的运行库中没有这个新对象。所以其他模块中自然不能引用这个对象。为了排除系统问题,我把机器从操作系统到开发平台全部重装了一...
  • C++对象数组

    千次阅读 2019-09-24 08:24:49
    C++对象数组 一、对象数组 1.C++对象数组的定义:类名 数组名[元素个数] 例:Student stu[10]; 2.对象数组访问形式:数组名... (1)建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需...
  • C++之对象数组与对象指针

    千次阅读 2018-10-23 19:07:59
    1.对象数组 是指每一个数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把...(1)当只需要一个参数时,定义对象数组时可以直接等号后面的花括号内提供实参;当需要多个参数时,只能对一个构造函...
  • ModelAndView对象

    千次阅读 2016-05-30 09:00:08
    因此,经常需要控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法, 让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 371,708
精华内容 148,683
关键字:

对象在哪里