24 #include "precompiled.hpp"
25 #include "jvm.h"
26
27 #include "runtime/atomic.hpp"
28 #include "runtime/orderAccess.hpp"
29 #include "runtime/vmThread.hpp"
30 #include "runtime/vmOperations.hpp"
31 #include "services/memBaseline.hpp"
32 #include "services/memReporter.hpp"
33 #include "services/mallocTracker.inline.hpp"
34 #include "services/memTracker.hpp"
35 #include "services/threadStackTracker.hpp"
36 #include "utilities/debug.hpp"
37 #include "utilities/defaultStream.hpp"
38 #include "utilities/vmError.hpp"
39
40 #ifdef _WINDOWS
41 #include <windows.h>
42 #endif
43
44 #ifdef SOLARIS
45 volatile bool NMT_stack_walkable = false;
46 #else
47 volatile bool NMT_stack_walkable = true;
48 #endif
49
50 volatile NMT_TrackingLevel MemTracker::_tracking_level = NMT_unknown;
51 NMT_TrackingLevel MemTracker::_cmdline_tracking_level = NMT_unknown;
52
53 MemBaseline MemTracker::_baseline;
54 bool MemTracker::_is_nmt_env_valid = true;
55
56 static const size_t buffer_size = 64;
57
58 NMT_TrackingLevel MemTracker::init_tracking_level() {
59 // Memory type is encoded into tracking header as a byte field,
60 // make sure that we don't overflow it.
61 STATIC_ASSERT(mt_number_of_types <= max_jubyte);
62
63 char nmt_env_variable[buffer_size];
64 jio_snprintf(nmt_env_variable, sizeof(nmt_env_variable), "NMT_LEVEL_%d", os::current_process_id());
65 const char* nmt_env_value;
66 #ifdef _WINDOWS
67 // Read the NMT environment variable from the PEB instead of the CRT
68 char value[buffer_size];
69 nmt_env_value = GetEnvironmentVariable(nmt_env_variable, value, (DWORD)sizeof(value)) != 0 ? value : NULL;
|
24 #include "precompiled.hpp"
25 #include "jvm.h"
26
27 #include "runtime/atomic.hpp"
28 #include "runtime/orderAccess.hpp"
29 #include "runtime/vmThread.hpp"
30 #include "runtime/vmOperations.hpp"
31 #include "services/memBaseline.hpp"
32 #include "services/memReporter.hpp"
33 #include "services/mallocTracker.inline.hpp"
34 #include "services/memTracker.hpp"
35 #include "services/threadStackTracker.hpp"
36 #include "utilities/debug.hpp"
37 #include "utilities/defaultStream.hpp"
38 #include "utilities/vmError.hpp"
39
40 #ifdef _WINDOWS
41 #include <windows.h>
42 #endif
43
44 volatile NMT_TrackingLevel MemTracker::_tracking_level = NMT_unknown;
45 NMT_TrackingLevel MemTracker::_cmdline_tracking_level = NMT_unknown;
46
47 MemBaseline MemTracker::_baseline;
48 bool MemTracker::_is_nmt_env_valid = true;
49
50 static const size_t buffer_size = 64;
51
52 NMT_TrackingLevel MemTracker::init_tracking_level() {
53 // Memory type is encoded into tracking header as a byte field,
54 // make sure that we don't overflow it.
55 STATIC_ASSERT(mt_number_of_types <= max_jubyte);
56
57 char nmt_env_variable[buffer_size];
58 jio_snprintf(nmt_env_variable, sizeof(nmt_env_variable), "NMT_LEVEL_%d", os::current_process_id());
59 const char* nmt_env_value;
60 #ifdef _WINDOWS
61 // Read the NMT environment variable from the PEB instead of the CRT
62 char value[buffer_size];
63 nmt_env_value = GetEnvironmentVariable(nmt_env_variable, value, (DWORD)sizeof(value)) != 0 ? value : NULL;
|