jmap应用:一个经典String笔试题的验证

笔试题:

String strA = new String("123123");这一行中创建了几个String对象??
1 public class StringHeapCountTest {
2
3     public static void main(String[] args) {
4         String strA = new String("123123");
5         System.out.println(1);
6     }
7
8 }
这个题主要考察应试者对java内存结构的了解程度。堆、非堆、栈、本地方法栈

首先我们看一下下面的代码在堆中创建了多少String

1 public class StringHeapCountTest {
2
3     public static void main(String[] args) {
4         System.out.println(1);
5     }
6
7 }

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

再看如下代码中String的个数

1 public class StringHeapCountTest {
2
3     public static void main(String[] args) {
4         String strA = "123123";
5         System.out.println(1);
6     }
7
8 }

如下图所示,String有3779个

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

原文地址:https://www.cnblogs.com/yszzu/p/9270682.html

时间: 2024-08-30 04:54:46

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

java经典30笔试题

1. 下面哪些是Thread类的方法() A start()       B run()       C exit()       D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方法,如System.exit(0). 2. 下面关于java.lang.Exception类的说法正确的是() A 继承自Throwable      B Serial

经典PHP笔试题

1.考虑如下脚本.标记处应该添加什么代码才能让脚本输出字符串php? $alpha = 'abcdefghijklmnopqrstuvwxyz'; $letters = array(15, 7, 15); foreach($letters as $val) {/* 这里应该加入什么 */ }?> A.echo chr($val); B.echo asc($val); C.echo substr($alpha, $val, 2); D.echo $alpha{$val}; E.echo $alph

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

“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h> 2 3 union test 4 { 5 int a; 6 char b; 7 }; 8 9 int endian_test(void) 10 { 11 union test t1; 12 t1.a = 1; 13 return t1.b; 14 } 15 16 int main(void) 17 { 18 int i =

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

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(

iO经典笔试题整理

iOS经典笔试题整理---2014年8月 1.回答person的retainCount值,并解释为什么 Person * per = [[Person alloc] init]; 此时person 的retainCount的值是1self.person = per; 在self.person 时,如果是assign,person的 retainCount的值不变,仍为1若是:retain person的retainCount的值加1,变为2 若是:copy person的retainCount值

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

经典的阿里前端笔试题

1 请说明下面各种情况的执行结果,并注明产生对应结果的理由. function doSomething() { alert(this); } ① element.onclick = doSomething,点击element元素后. ② element.onclick = function() {doSomething()}, 点击element元素后. ③ 直接执行doSomething(). 参考答案: 1.element:调用执行时直接指向事件元素. 2.window:函数调用中的 thi

转:嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3). 意识到这个表达式将使一个1

C++经典笔试题详解

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用初始化以后不能被改变,指针可以改变所指的对象.