有人问我 Java 的 String 能方几个 G 的数据,内存有那么便宜吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rikeinei
V2EX    问与答

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

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

    有人问我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     Solana     917 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:17 PVG 06:17 LAX 14:17 JFK 17:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86