当前位置: 首页 > news >正文

做网站手机dede 学校网站

做网站手机,dede 学校网站,查网站备案信息,网站被spider重复抓取寄存器#xff1a;最快的存储区#xff0c;位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限#xff0c;所以寄存器由编译器根据需求 进行分配。你不能直接控制#xff0c;也不能在程序中感觉到寄存器存在的任何迹象。栈#xff1a;存放基本类型的数据和对…寄存器最快的存储区位于不同于其他存储区的地方——处理器内部。寄存器的数量极其有限所以寄存器由编译器根据需求 进行分配。你不能直接控制也不能在程序中感觉到寄存器存在的任何迹象。栈存放基本类型的数据和对象的引用但对象本身不存放在栈中而是存放在堆中堆一种通用性的内存池(也存在于RAM中)用于存放所以的JAVA对象。堆不同于堆栈的好处是编译器不需要知道要从堆里分配多少存储区域也不必知道存储的数据在堆里存活多长时间。因此在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候只需要new写一行简单的代码当执行这行代码时会自动在堆里进行存储分配。当然为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。存放用new产生的数据静态域存放在对象中用static定义的静态成员常量池存放常量非RAM(随机存取存储器)存储硬盘等永久存储空间。如果数据完全存活于程序之外那么它可以不受程序的任何控制在程序没有运行时也可以存在。 这里我们主要关心栈堆和常量池对于栈和常量池中的对象可以共享对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的当没有引用指向数据时这个数据就会消失。堆中的对象的由垃圾回收器负责回收因此大小和生命周期不需要确定具有很大的灵活性。Java内存分配中的栈在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时Java就在栈中为这个变量分配内存空间当该变量退出该作用域后Java会自动释放掉为该变量所分配的内存空间该内存空间可以立即被另作他用。Java内存分配中的堆堆内存用来存放由new创建的对象和数组。 在堆中分配的内存由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后还可以 在栈中定义一个特殊的变量让栈中这个变量的取值等于数组或对象在堆内存中的首地址栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。常量池 (constant pool)常量池指的是在编译期被确定并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的*常量值(final)*还包含一些以文本形式出现的符号引用比如类和接口的全限定名字段的名称和描述符方法和名称和描述符。虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和包括直接常量(string,integer和 floating point常量)和对其他类型字段和方法的符号引用。对于String常量它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的 对于String类型有一张固定长度的CONSTANT_String_info表用来存储文字字符串值注意该表只存储文字字符串值不存储符号引 用。说到这里对常量池中的字符串值的存储位置应该有一个比较明了的理解了。在程序执行的时候,常量池会储存在Method Area,而不是堆中。堆与栈Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、 anewarray和multianewarray等指令建立它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的堆的*优势是可以动态地分配内存大小生存期也不必事先告诉编译器因为它是在运行时动态分配内存的*Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是由于要在运行时动态 分配内存存取速度较慢。栈的优势是存取速度比堆要快仅次于寄存器栈数据可以共享。但缺点是存在栈中的数据大小与生存期必须是确定的缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。字符串内存分配对于字符串其对象的引用都是存储在栈中的如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串在常量池中永远只有一份在堆中有多份。这里我们主要关心栈堆和常量池对于栈和常量池中的对象可以共享对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的当没有引用指向数据时这个数据就会消失。堆中的对象的由垃圾回收器负责回收因此大小和生命周期不需要确定具有很大的灵活性。String s1 china;String s2 china;String s3 china;String ss1 new String(china);String ss2 new String(china);String ss3 new String(china);这里解释一下黄色这3个箭头对于通过new产生一个字符串(假设为“china”)时会先去常量池中查找是否已经有了“china”对象如果没有则在常量池中创建一个此字符串对象然后堆中再创建一个常量池中此”china”对象的拷贝对象。这也就是有道面试题StringsnewString(“xyz”);产生几个对象一个或两个如果常量池中原来没有”xyz”,就是两个。存在于.class文件中的常量池在运行期被JVM装载并且可以扩充。String的 intern()方法就是扩充常量池的 一个方法当一个String实例str调用intern()方法时Java 查找常量池中是否有相同Unicode的字符串常量如果有则返回其的引用如果没有则在常量池中增加一个Unicode等于str的字符串并返回它的引用String s0 kvill;String s1new String(kvill);String s2new String(kvill);System.out.println( s0s1 );s1.intern();s2s2.intern(); //把常量池中kvill的引用赋给s2System.out.println( s0s1);System.out.println( s0s1.intern() );System.out.println( s0s2 );falsefalsetruetrueString常量池问题的几个例子【1】String a ab;String bb b;String b a bb;System.out.println((a b)); //result false【2】String a ab;final String bb b;String b a bb;System.out.println((a b)); //result true【3】String a ab;final String bb getBB();String b a bb;System.out.println((a b)); //result falseprivate static String getBB() {return b;}分析【1】中JVM对于字符串引用由于在字符串的连接中有字符串引用存在而引用的值在程序编译期是无法确定的即a bb无法被编译器优化只有在程序运行期来动态分配并将连接后的新地址赋给b。所以上面程序的结果也就为false。【2】和【1】中唯一不同的是bb字符串加了final修饰对于final修饰的变量它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中。所以此时的a bb和a b效果是一样的。故上面程序的结果为true。【3】JVM对于字符串引用bb它的值在编译期无法确定只有在程序运行期调用方法后将方法的返回值和a来动态连接并分配地址为b故上面程序的结果为false。结论字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好存放在字符串常量池中而有的是运行时才被创建使用new关键字存放在堆中。基础类型的变量和常量在内存中的分配对于基础类型的变量和常量变量和引用存储在栈中常量存储在常量池中。int i1 9;int i2 9;int i3 9;final int INT1 9;final int INT2 9;final int INT3 9;编译器先处理int i1 9首先它会在栈中创建一个变量为i1的引用然后查找栈中是否有9这个值如果没找到就将9存放进来然后将i1指向9。接着处理int i2 9在创建完i2的引用变量后因为在栈中已经有9这个值便将i2直接指向9。这样就出现了i1与i2同时均指向9的情况。最后i3也指向这个9。成员变量和局部变量在内存中的分配对于成员变量和局部变量成员变量就是方法外部类的内部定义的变量局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。 成员变量存储在堆中的对象里面由垃圾回收器负责回收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 change(int i) {i 1234;}}对于以上这段代码date为局部变量i,d,m,y都是形参为局部变量daymonthyear为成员变量。下面分析一下代码执行时候的变化main方法开始执行int date 9; date局部变量基础类型引用和值都存在栈中。Test test new Test();test为对象引用存在栈中对象(new Test())存在堆中。test.change(date); i为局部变量引用和值存在栈中。当方法change执行完成后i就会从栈中消失。BirthDate d1 new BirthDate(7,7,1970); d1为对象引用存在栈中对象(new BirthDate())存在堆中其中dmy为局部变量存储在栈中且它们的类型为基础类型因此它们的数据也存储在栈中。day,month,year为成员变量它们存储在堆中(new BirthDate()里面)。当BirthDate构造方法执行完之后d,m,y将从栈中消失。main方法执行完之后date变量testd1引用将从栈中消失new Test(), new BirthDate()将等待垃圾回收。
http://www.pierceye.com/news/313295/

相关文章:

  • 用别人家网站做跳转做商品抬价是什么兼职网站
  • 合肥市建设信息中心网站怎么做网站的签约编辑
  • 6入空间网站免费观看网站标题怎么修改
  • iis服务器的默认网站wordpress多级分销插件
  • jquery 网站后台模板 仿2021好心人给个开车的网站
  • 济宁定制网站建设推广关于协会网站建设的意见
  • 门户网站建站要求滨州网站seo服务
  • 国外 视频上传网站源码怎么看网站的访问量
  • 网站的建设框架3网站建设
  • 购物网站设计的目的wordpress 游戏主题下载失败
  • 兰州最好的网站开发公司单页网站是什么样子的
  • 在线购物商城网站江苏营销型网站
  • 如何在百度上为企业做网站wordpress轮播图设置
  • qt 网站开发怎样开发一个app软件
  • html5博客网站模板泉州市住房与城乡建设网站
  • 没网站怎么做app创意设计图片
  • 重庆涪陵网站设计公司推荐外贸优化网站制作
  • 网页怎么制作四页石家庄seo排名外包
  • 高校信息化建设 网站东阳网络科技有限公司
  • 网站 如何做 中英文切换网站怎么提升关键词排名
  • 企业只有建立自己的网站平台金坛建设局网站
  • 网站建设及维护费用网站开发质量控制计划书
  • dede免费网站模板内蒙古住房与建设官方网站
  • 网络设计开发网站电子商务网站建设财务分析
  • 牛商做网站的理念国外便宜域名注册商
  • 深圳网站制作880网页设计与制作教程 个人简历代码
  • 皇岗网站建设济南市住房和城乡建设局
  • 产品创新设计方案seo 网站案例
  • 做名片最好的网站上海网站开发制作公司
  • 网站如何做三端适配wordpress get_the_author_meta