zoukankan      html  css  js  c++  java
  • 你必须知道的261个java语言问题——第三弹

    1.String、StringBuffer、StringBuilder有什么区别

    String类代表定长字符串,其内容在创建之后是不可更改的,由于String的不可变特性,该类是线程安全的

    StringBuffer代表可变长字符串缓冲区,通过特定的方法可以改变字符串的内容和长度,它是线程安全的

    StringBuilder是StringBuffer的一个等价类,具有相似的方法,但是该类是非线程安全的

    通过intern方法可由StringBuffer或StringBuilder转化为String,同过append方法可在字符串末尾添加内容。

    2.Windows下的内存是如何管理的?

      Windows提供了3种方法来进行内存管理:

    虚拟内存,最适合用来管理型对象或者结构数组

    内存映射文件,最适合用来管理数据(通常来自文件)以及在单个计算机上运行多个进程之间共享数据

    内存堆栈,最适合用来管理量的小对象;

      Windows操纵内存可以分两个层面:物理内存和虚拟内存。

      其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过进行的。对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址。提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。

      如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常。

  • 相关阅读:
    机器学习踩坑之Win10+Ubuntu双系统安装踩坑经验
    面向对象
    模块(三)
    模块(二)
    模块之日志
    包的基础使用
    模块介绍
    递归
    匿名函数与三元表达式
    生成器与迭代器
  • 原文地址:https://www.cnblogs.com/mengyan/p/2716038.html
Copyright © 2011-2022 走看看