我编写了一个小程序来解析java中的XML(SAX解析器)文件,只是为了检查我的程序消耗了多少内存。我在循环中添加了以下代码行。
System.out.println(Runtime.getRuntime().maxMemory()-Runtime.getRuntime().freeMemory()+" = used memory");
我得到以下输出:
<CATALOG>
243919216 = used memory
<CD>
243919216 = used memory
<TITLE>
243919216 = used memory
<ARTIST>
243919216 = used memory
<COUNTRY>
243919216 = used memory
<COMPANY>
243919216 = used memory
<PRICE>
243919216 = used memory
<YEAR>
243919216 = used memory
由于我对这些记忆概念不熟悉,我想知道:
答案 0 :(得分:5)
- 此输出的单位是什么(243919216 =已用内存)?
醇>
long 值,提供字节数
- 应用程序的最佳消耗内存是多少?
醇>
答案因应用程序而异。
- 这是检查内存使用情况的正确方法吗?
醇>
不。这不能给你正确的答案。使用 profiler 获取此信息。您可能还希望将this.getApplicationContext();
mManager = (NotificationManager) this
.getApplicationContext()
.getSystemService(
Context.NOTIFICATION_SERVICE);
Intent intent1 = new Intent(
this.getApplicationContext(),
Activity_Mentor.class);
// @SuppressWarnings("deprecation")
Notification notification = new Notification(
R.drawable.dpu_ic_launcher,
"New Message",
System.currentTimeMillis());
notification.number=notificationCount++;
intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingNotificationIntent = PendingIntent
.getActivity(
this.getApplicationContext(),
0,
intent1,
PendingIntent.FLAG_UPDATE_CURRENT);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(
this.getApplicationContext(),
getStaffName, chatMessage,
pendingNotificationIntent);
int NOTIFY_ME_ID = Integer.parseInt(chatId);
mManager.notify(NOTIFY_ME_ID, notification);
替换为maxMemory()
,以使更接近到实际答案。
答案 1 :(得分:2)
Java使用TLAB(线程本地分配缓冲区)每个线程从公共池中获取大块内存,并从本地分配。阅读内存记帐时,您只能看到公共池的使用量。
通过在命令行上使用-XX:-UseTLAB
禁用TLAB,可以更准确地查看内存使用情况。这将允许您按字节内存使用情况查看字节。
注意:这不会显示完整集合中将保留多少内存,您需要执行System.gc();
以查看此内容,但您可以看到已使用了多少内存。
此输出的单位是什么(243919216 =已用内存)?
内存使用当然对少量有用,关闭TLAB会有所帮助。
应用程序的最佳消耗内存是多少?
最佳数量不是额外的内存,但这对于开发工作来说效率不高。通常浪费几美元的内存以节省几个小时的开发时间是有意义的。
这是检查内存使用情况的正确方法吗?
监视内存使用情况的最简单方法是使用内存分析器。这是最好的起点,因为这会查看整个应用程序,而不仅仅是您关注的内容。
答案 2 :(得分:1)
单位为字节。
应用程序没有&#34;最佳消耗内存&#34;。所有 应用程序是不同的。
不,这不是检查内存使用情况的正确方法。这是什么
JMeter
和JVisualVM
等分析器适用于。
答案 3 :(得分:0)
添加-verbose:gc参数此参数将在本机stderr文件或重定向控制台输出的文件上记录GC占用信息。删除现有文件,运行程序直到需要。在GCMV工具中加载文件以检查内存使用行为。