Skip to content

Commit 1d83241

Browse files
author
Lillian Zhang
committed
Suggestions from Code Review
1 parent 4adf847 commit 1d83241

File tree

2 files changed

+48
-34
lines changed

2 files changed

+48
-34
lines changed

src/main/java/org/truffleruby/core/GCNodes.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import java.lang.management.MemoryUsage;
1616
import java.time.Duration;
1717

18+
import com.oracle.truffle.api.dsl.Cached;
19+
import org.jcodings.specific.UTF8Encoding;
1820
import org.truffleruby.SuppressFBWarnings;
1921
import org.truffleruby.builtins.CoreMethod;
2022
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
@@ -26,6 +28,8 @@
2628
import org.truffleruby.builtins.PrimitiveArrayArgumentsNode;
2729
import org.truffleruby.collections.WeakValueCache;
2830
import org.truffleruby.core.array.RubyArray;
31+
import org.truffleruby.core.rope.CodeRange;
32+
import org.truffleruby.core.string.StringNodes;
2933
import org.truffleruby.language.SafepointManager;
3034
import org.truffleruby.language.control.RaiseException;
3135

@@ -135,7 +139,8 @@ public static abstract class GCStatPrimitiveNode extends PrimitiveArrayArguments
135139

136140
@TruffleBoundary
137141
@Specialization
138-
protected RubyArray stat() {
142+
protected RubyArray stat(
143+
@Cached StringNodes.MakeStringNode makeStringNode) {
139144
long time = 0;
140145
int count = 0;
141146
int minorCount = 0;
@@ -173,13 +178,12 @@ protected RubyArray stat() {
173178

174179
// Get memory usage values from relevant memory pools (2-3 / ~8 are relevant)
175180
memoryPools = new Object[memoryPoolNames.length];
176-
for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) {
177-
if (bean.getName().equals(memoryPoolNames[0])) {
178-
memoryPools[0] = beanToArray(bean);
179-
} else if (bean.getName().equals(memoryPoolNames[1])) {
180-
memoryPools[1] = beanToArray(bean);
181-
} else if (memoryPoolNames.length == 3 && bean.getName().equals(memoryPoolNames[2])) {
182-
memoryPools[2] = beanToArray(bean);
181+
for (int i = 0; i < memoryPoolNames.length; i++) {
182+
String memoryPoolName = memoryPoolNames[i];
183+
for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) {
184+
if (bean.getName().equals(memoryPoolName)) {
185+
memoryPools[i] = beanToArray(bean);
186+
}
183187
}
184188
}
185189

@@ -188,7 +192,8 @@ protected RubyArray stat() {
188192
// Use an object array instead because otherwise ArrayHelpers.java line 51 complains
189193
Object[] memoryPoolNamesCast = new Object[memoryPoolNames.length];
190194
for (int i = 0; i < memoryPoolNames.length; i++) {
191-
memoryPoolNamesCast[i] = memoryPoolNames[i];
195+
memoryPoolNamesCast[i] = makeStringNode
196+
.executeMake(memoryPoolNames[i], UTF8Encoding.INSTANCE, CodeRange.CR_UNKNOWN);
192197
}
193198

194199

@@ -205,16 +210,24 @@ protected RubyArray stat() {
205210
createArray(memoryPools) });
206211
}
207212

208-
protected RubyArray usageToArray(MemoryUsage usage) {
209-
return createArray(new Object[]{ usage.getCommitted(), usage.getInit(), usage.getMax(), usage.getUsed() });
210-
}
211-
212213
protected RubyArray beanToArray(MemoryPoolMXBean bean) {
214+
MemoryUsage usage = bean.getUsage();
215+
MemoryUsage peak = bean.getPeakUsage();
216+
MemoryUsage last = bean.getCollectionUsage();
213217
return createArray(
214-
new Object[]{
215-
usageToArray(bean.getUsage()),
216-
usageToArray(bean.getPeakUsage()),
217-
usageToArray(bean.getCollectionUsage()) });
218+
new long[]{
219+
usage.getCommitted(),
220+
usage.getInit(),
221+
usage.getMax(),
222+
usage.getUsed(),
223+
peak.getCommitted(),
224+
peak.getInit(),
225+
peak.getMax(),
226+
peak.getUsed(),
227+
last.getCommitted(),
228+
last.getInit(),
229+
last.getMax(),
230+
last.getUsed() });
218231
}
219232

220233
}

src/main/ruby/truffleruby/core/gc.rb

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def garbage_collect
7676
end
7777

7878
def self.stat(option = nil)
79-
time, count, minor_count, major_count, unknown_count, commited, used, memory_pool_names, memory_pool_info = Primitive.gc_stat()
79+
time, count, minor_count, major_count, unknown_count, committed, used, memory_pool_names, memory_pool_info = Primitive.gc_stat()
8080

8181
# Initialize stat for statistics that come from memory pools, and populate it with some final stats
8282
stat = {
@@ -97,30 +97,31 @@ def self.stat(option = nil)
9797
:last_init => 0.0,
9898
:last_max => 0.0,
9999
:last_used => 0.0,
100-
:heap_available_slots => commited, # should be the same as the calculated commited
100+
:heap_available_slots => committed, # should be the same as the calculated committed
101101
:heap_live_slots => used, # should be the same as the calculated used
102-
:heap_free_slots => commited - used,
102+
:heap_free_slots => committed - used,
103103
}
104104

105105
(0...memory_pool_names.length).each do |i|
106106
# Populate memory pool specific stats
107-
stat[Truffle::Interop.to_string(memory_pool_names[i])] = {
108-
:committed => memory_pool_info[i][0][0],
109-
:init => memory_pool_info[i][0][1],
110-
:max => memory_pool_info[i][0][2],
111-
:used => memory_pool_info[i][0][3],
112-
:peak_committed => memory_pool_info[i][1][0],
113-
:peak_init => memory_pool_info[i][1][1],
114-
:peak_max => memory_pool_info[i][1][2],
115-
:peak_used => memory_pool_info[i][1][3],
116-
:last_committed => memory_pool_info[i][2][0],
117-
:last_init => memory_pool_info[i][2][1],
118-
:last_max => memory_pool_info[i][2][2],
119-
:last_used => memory_pool_info[i][2][3],
107+
info = memory_pool_info[i]
108+
stat[memory_pool_names[i]] = {
109+
:committed => info[0],
110+
:init => info[1],
111+
:max => info[2],
112+
:used => info[3],
113+
:peak_committed => info[4],
114+
:peak_init => info[5],
115+
:peak_max => info[6],
116+
:peak_used => info[7],
117+
:last_committed => info[8],
118+
:last_init => info[9],
119+
:last_max => info[10],
120+
:last_used => info[11],
120121
}
121122

122123
# Calculate stats across memory pools
123-
stat[Truffle::Interop.to_string(memory_pool_names[i])].each_pair do |key, value|
124+
stat[memory_pool_names[i]].each_pair do |key, value|
124125
stat[key] += value
125126
end
126127
end

0 commit comments

Comments
 (0)