笔试题:

String strA = new String("123123");这一行中创建了几个String对象??
 public class StringHeapCountTest {

     public static void main(String[] args) {
String strA = new String("123123");
System.out.println(1);
} }
这个题主要考察应试者对java内存结构(堆、非堆、栈、本地方法栈)、堆中的常量值、类加载和对象创建过程的了解程度。

一. 基准数据:首先我们看一下下面的代码, 什么都没有时在jvm堆中创建了多少String

 public class StringHeapCountTest {

     public static void main(String[] args) {
System.out.println(1);
} }

在第4行打断点,然后使用jps打印出当前进程,再使用jmap -histo xxx打印当前jvm中的对象数。如下图所示,String有3778个

二,. 再看如下代码中String的个数

 public class StringHeapCountTest {

     public static void main(String[] args) {
String strA = "123123";
System.out.println(1);
} }

如下图所示,String有3779个 ,比上一个实验多创建一个

三、 最后我们恢复文章开头题目中的第4行,再统计一下jvm中String的个数.如下图所示,3780个,创建两个

这个题目有很多变种,这里给出验证方法供参考。

jmap命令手册

-histo[:live]  to print histogram of java object heap; if the "live" suboption is specified, only count live objects

@See String.intern()

GC ROOT: http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fconcepts%2Fgcroots.html&cp=37_2_3

jcmd 1.7新增命令 https://www.jianshu.com/p/388e35d8a09b,  可以替代jps jstack jmap jinfo

jcmd pid GC.class_histogram | grep java.lang.String

jcmd 9952 help 
The following commands are available:
...
VM.native_memory
 ... 
Thread.print                 打印线程栈
GC.class_stats            对象个数,占用字节数...
GC.class_histogram    打印class统计信息:对象个数,占用字节数。 只有两列,内容比GC.class_stats精简
GC.heap_dump            堆dump
GC.run_finalization
GC.run                         手动触发GC
VM.uptime                    启动时间
VM.flags                       启动参数 -XX
VM.system_properties 系统参数
VM.command_line       启动命令
VM.version

jcmd jmap应用:一个String经典笔试题的验证的更多相关文章

  1. 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

    经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n ...

  2. 经典笔试题:用C写一个函数测试当前机器大小端模式

    “用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 #include <stdio.h> union tes ...

  3. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

  4. .Net经典笔试题

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答:private:私有成员,在类的内部才可以访问: protected:保护成员,该类内部和 ...

  5. 2018第一波iOS经典笔试题(现场实拍)

    序言 作为一个开发者,眼里不仅仅只存在于那一行又一行的代码,更还有那诗和远方. 注明:面试是对自我审视的一种过程,面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正 ...

  6. js数组知识点总结及经典笔试题

    1.判断数组 这是笔试里经常会出现的知识考察点,总结一下 (1)Array.isArray()方法判断 var a=[]; Array.isArray(a) //返回true var b='hello ...

  7. Java 经典笔试题

    这些题目对我的笔试帮助很大,有需要的朋友都可以来看看,在笔试中能遇到的题目基本上下面都会出现,虽然形式不同,当考察的基本的知识点还是相同的. 在分析中肯定有不足和谬误的地方还请大虾们能够给予及时的纠正 ...

  8. C,C++经典笔试题(答案)转自:http://blog.163.com/jianhuali0118@126/blog/static/377499702008230104125229/

    一.请填写BOOL , float, 指针变量 与“零值”比较的 if 语句.(10分) 请写出 BOOL   flag 与“零值”比较的 if 语句.(3分) 标准答案:      if ( fla ...

  9. php经典笔试题

    五.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 5.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组.(提示:不能使用系统已有函数,另外请仔细回忆以前学 ...

随机推荐

  1. Image Sub-pixel interpolation by Verilog

    bilinear interpolation -------------------------------------------------------- input a0  a1 b0  b1 ...

  2. selenium webdriver frame操作,跳进跳出

    如果有两个平级的frame,跳进一个以后操作完成再操作第二个,这种情况要先跳出来,再跳进另外一个frame 跳出语句:browser.switch_to_default_content() #codi ...

  3. uboot的relocation原理详细分析

    转自:http://blog.csdn.net/skyflying2012/article/details/37660265 最近在一直在做uboot的移植工作,uboot中有很多值得学习的东西,之前 ...

  4. springMVC绑定json参数之二(2.2.1)

    二.springmvc 接收不同格式的json字符串 2.扫盲完了继续测试springmvc 接收不同格式的json字符串 1).格式一:json简单数组对象 前台两种传递方式: 方式一(需要拼接js ...

  5. LDA与最小二乘法的关系及其变种详解

    1 LDA与最小二乘法的关联 对于二值分类问题,令人惊奇的是最小二乘法和LDA分析是一致的.回顾之前的线性回归,给定N个d维特征的训练样例(i从1到N),每个对应一个类标签.我们之前令y=0表示一类, ...

  6. overflow: auto;溢出自动显示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. shell判断网络主机存活

    判断网络主机存活企业面试题4:写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多) #!/bin/sh#[ -f /etc/init.d/functions ] & ...

  8. HTTP ERROR

    HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源HTTP 401.4 ...

  9. 将Linux 标准输出,错误输出重定向到文件

    1.想要把make输出的全部信息,输出到某个文件中,最常见的办法就是: make xxx > build_output.txt 此时默认情况是没有改变2=stderr的输出方式,还是屏幕,所以, ...

  10. Hive 进阶

    两种情况下不走map-reduce: 1. where ds >' ' //ds 是partition 2. select * from table //后面没有查询条件,什么都没有 1.建表 ...