নিষ্ক্রিয় থাকাকালীন খুব উচ্চ `gc-cons-threshold` স্থাপন করা এবং আবর্জনা সংগ্রহ করার কোনও খারাপ দিক রয়েছে কি?


17

আমি নীচের দুটি লাইন আমার শীর্ষে যুক্ত করেছি init.el:

(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))

তার অর্থ যে বরাদ্দ মেমরির প্রতি 800 কিলোব্যাট আবর্জনা সংগ্রহের পরিবর্তে ইম্যাকস অলস অবস্থায়, যখন যখন বিরতি আমাকে বিরক্ত করে না তখন তা করে। (এটি 1 গিগাবাইট মেমরি বরাদ্দ করার পরেও সংগ্রহ করে, তবে আমি মনে করি না এটি ঘটবে)।

এটি আমার প্রারম্ভকালীন সময়টিকে প্রায় দুই তৃতীয়াংশ দ্বারা উন্নত করেছে। তত্ত্বগতভাবে, এটি সাধারণভাবে কর্মক্ষমতাও উন্নত করা উচিত। এই পদ্ধতির কোনও ডাউনসাইড রয়েছে?


1
নীতিগতভাবে আপনি gc-cons-thresholdযে কোনও সময় আসলে আঘাত করতে ইচ্ছুক তার চেয়ে উচ্চতর কোনও স্থাপন করা উচিত নয় , কারণ আপনার অবশ্যই ধরে নেওয়া উচিত যে আপনি সময়ে সময়ে সেই মানটিকে সত্যই আঘাত করবেন (সর্বোপরি, কে জানে যে কতটা আবর্জনা আদায় হতে পারে) কিছু অপ্রত্যাশিত-উত্সাহী অ নিষ্ক্রিয় কার্য দ্বারা)। আমি নিষ্ক্রিয় টাইমার দিয়ে জিসি ট্রিগার করার ক্ষেত্রে কোনও বিশেষ সমস্যা দেখতে পাচ্ছি না, তবে আমি মনে করি যে অ-নিষ্ক্রিয় গিসির জন্য প্রান্তিককরণটি এটি ওটিটি হিসাবে বেশি মনে হয় এবং আমার ধারণাটি সম্ভবত এটি "আমার থেকেও বেশি" হিসাবে নির্বাচিত হয়েছিল think 'আমি সর্বোচ্চ ব্যবহার করতে ইচ্ছুক "না হয়ে" দরকার পড়বে "।
ফিল্ড করুন

5
স্টিফান মননিয়ারের এই পোস্ট অনুসারে : "এটি স্পর্শ না করাই ভাল E আমি ব্যবহারকারীদের তাদের .emacs থেকে কোনও জিসি-কনস-থ্রেশোল্ড সেটিংস মুছে ফেলার পরামর্শ দিচ্ছি ""
izkon

1
@ আইজকন ব্যতীত যে পোস্টটি আপনি লিঙ্ক করেছেন তার সাথে 2007 সালের তারিখ রয়েছে, যদিও উদাহরণস্বরূপ এই পোস্টটি , যেখানে কেউ বাস্তবে পরীক্ষা-নিরীক্ষা করেছে - এবং প্রান্তিক পরিবর্তনটি পার্থক্য তৈরি করেছে - তা ২০১ it সালের। তারিখটি হয়, তাই হয় তা আবার ফিরে আসে নি, বা কর্মক্ষেত্রটি কেবল কখনও হয়নি ভাল কাজ করেছে।
হাই-অ্যাঞ্জেল

1
@ এরিক আমি মনে করি আপনি এর (eval-when-compile (* 1024 1024 1024))সাথে প্রতিস্থাপন করতে পারবেন most-positive-fixnum (দয়া করে এটি করুন, আমি নিশ্চিত যে আপনার প্রশ্নে আসা প্রত্যেক ব্যক্তিই আপনার কোডটি তাদের কনফিগারেশনে অনুলিপি করেছেন)
হাই-এঞ্জেল

2
@ হাই-অ্যাঞ্জেল আমি এটি একটি ভাল ধারণা বলে মনে করি না। যদি ইমাসগুলি বাস্তবে অলস না হয়ে বিপুল পরিমাণে মেমরি বরাদ্দ করে তবে সিস্টেমটি অদলবদল না করে বা সম্পূর্ণরূপে মেমরির বাইরে চলে না যাওয়া পর্যন্ত এটি বরাদ্দ অবিরত করার পরিবর্তে জিসি করা উচিত। যদি কিছু হয় তবে 1 জিবি ইতিমধ্যে খুব বেশি।
এরিক

উত্তর:


4

আমি যতদূর জানি, আপনার যদি র‌্যাম থাকে তবে তা ঠিক আছে, তবে যদি এমস্যাকস কখনও জিসি'র আগে সত্যিই উচ্চ ব্যবহারের চেষ্টা করে থাকে তবে এটি অনেক সময় নিতে পারে। আমি নিশ্চিত না যে এলির অর্থ কী; আইএসটিএম যে আপনার যদি যথেষ্ট স্মৃতি থাকে তবে তা ঠিক হওয়া উচিত, তবে তিনি এখানে বিশেষজ্ঞ।

এটি বলার পরে, আমি এই মুহুর্তে আমার আরআইডি ফাইলে এই লাইনগুলি ব্যবহার করেছি এবং পরিবর্তনগুলি স্থায়ী না করে স্টার্টআপের সময় হ্রাস করতে সহায়তা করে:

;;;;; Startup optimizations

;;;;;; Set garbage collection threshold

;; From https://www.reddit.com/r/emacs/comments/3kqt6e/2_easy_little_known_steps_to_speed_up_emacs_start/

(setq gc-cons-threshold-original gc-cons-threshold)
(setq gc-cons-threshold (* 1024 1024 100))

;;;;;; Set file-name-handler-alist

;; Also from https://www.reddit.com/r/emacs/comments/3kqt6e/2_easy_little_known_steps_to_speed_up_emacs_start/

(setq file-name-handler-alist-original file-name-handler-alist)
(setq file-name-handler-alist nil)

;;;;;; Set deferred timer to reset them

(run-with-idle-timer
 5 nil
 (lambda ()
   (setq gc-cons-threshold gc-cons-threshold-original)
   (setq file-name-handler-alist file-name-handler-alist-original)
   (makunbound 'gc-cons-threshold-original)
   (makunbound 'file-name-handler-alist-original)
   (message "gc-cons-threshold and file-name-handler-alist restored")))

আপনি ব্যবহার করবেন না কেন after-init-hook?
এরিক

3
কারণ এটি সূচনার পরে অবিলম্বে চলবে, যা ব্যবহারকারীকে জিসির জন্য অপেক্ষা করতে পারে। একটি নিষ্ক্রিয় টাইমার ব্যবহার করে, এটি যখন চলতে পারে যখন ব্যবহারকারী ইমাস ব্যবহার না করে।
blujay
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.