V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rikeinei
V2EX  ›  问与答

有人问我 Java 的 String 能方几个 G 的数据,内存有那么便宜吗

  •  
  •   rikeinei · 2015-06-18 15:50:24 +08:00 · 2511 次点击
    这是一个创建于 3451 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有人问我Java的String 能方几个G的数据,内存有那么便宜吗
    我在怀疑他搞什么

    11 条回复    2015-06-19 13:35:30 +08:00
    ivanlw
        1
    ivanlw  
       2015-06-18 16:03:33 +08:00
    搞面试的。
    wdlth
        2
    wdlth  
       2015-06-18 16:17:28 +08:00
    用String放G级的数据,他是当clob用么……
    rikeinei
        3
    rikeinei  
    OP
       2015-06-18 16:43:02 +08:00
    @ivanlw @wdlth 一个开发人员,问出这个问题,确实有点。。。
    问了一下经过,他懒的改程序,要不是他是客户,我就开了他了
    jedrek
        4
    jedrek  
       2015-06-18 16:46:17 +08:00
    若面试碰到这种傻逼问题,是真比吃了苍蝇还恶心
    hinate
        5
    hinate  
       2015-06-18 16:55:50 +08:00 via iPhone
    你应该反问,你会把几个G的数据放到里面吗→_→
    fangjinmin
        6
    fangjinmin  
       2015-06-18 17:02:58 +08:00
    这个问题还真不好回答。
    得看该变量是什么类型才行,如果是全局变量,或者是静态变量,应该是看堆的内堆大小。
    如果是临时变量,应该看stack的大小。
    akira
        7
    akira  
       2015-06-18 17:17:47 +08:00
    说不定过几年,机器标配都是TB级别内存呢。
    otakustay
        8
    otakustay  
       2015-06-18 18:10:33 +08:00
    我以为这问题在问你一个char占多大*String的length是啥类型……
    iyangyuan
        9
    iyangyuan  
       2015-06-19 09:19:12 +08:00
    @fangjinmin

    无论变量可见性如何,String的空间都是分配在堆中的吧!栈里分配的仅仅是指针而已。

    一般情况而言,线程栈的大小只有1M左右,如果直接将字符串分配在栈里,很容易就溢出了。

    线程栈的内部会存放方法帧,帧中存放的要么是指针,要么是基本类型,一般递归时,由于帧太多,可能会导致栈内存溢出。

    堆内存溢出举例:

    byte[] buffer = new byte[1024*1024*512]; //假设jvm堆内存小于512M,抛出:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    栈内存溢出举例:

    //抛出:Exception in thread "main" java.lang.StackOverflowError
    public static void main(String[] args){
    main(args);
    }

    个人见解,仅供参考
    fangjinmin
        10
    fangjinmin  
       2015-06-19 10:49:54 +08:00
    @iyangyuan 只在函数中用到的变量,都是在stack中,或者是从外面传入参数的拷贝也都是在stack里面分配内存。
    SoloCompany
        11
    SoloCompany  
       2015-06-19 13:35:30 +08:00
    如果按字符个数算,是2g,按内存占用算,是4g,这个算答案么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1180 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:41 · PVG 02:41 · LAX 10:41 · JFK 13:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.